JVM的内存管理、垃圾回收、类加载和参数调优
前言在面试中通常会考察JVM判断候选人的技术热情,对于Javaer还是比较重要的,整理一下JVM相关的知识点,包括JVM的内存管理、垃圾回收、类加载机制、JVM调优参数
参考资料:JavaGuide:Java内存区域详解(重点) | JavaGuide二哥面渣逆袭:JVM面试题,54道Java虚拟机八股文(2.3万字113张手绘图),面渣逆袭必看👍 | 二哥的Java进阶之路
一、内存管理1. 讲一下JVM内存区域是怎么划分的JVM将内存区域划分为:堆、方法区、程序计数器、虚拟机栈和本地方法栈。
其中线程共享的是堆和方法区、线程私有的是程序计数器、虚拟机栈和本地方法栈
程序计数器又称PC寄存器,指向当前线程所执行的字节码的行号,主要用于分支跳转、方法调用、线程切换和恢复
虚拟机栈用于执行Java方法,每次调用一个Java方法,就会将一个栈帧入栈,栈帧包括方法的局部变量表、操作数栈、动态链接、方法出口等信息。类的静态方法的局部变量表没有this的引用。操作数栈是用于保存临时变量
本地方法栈用于执行native方法,同虚拟机栈一样,在执行方法时会创建栈帧
堆是JVM中最大的一块内存区域, ...
docker底层原理简述
前言平时用docker很多,今天深入了解下docker原理层面的实现,包括docker核心概念,文件系统,资源隔离,网络通信等
参考文章:
Docker底层原理(图解+秒懂+史上最全) - 疯狂创客圈 - 博客园
docker - Libnetwork CNM框架与实现 - 187J3X1 - SegmentFault 思否
docker网络配置:bridge模式、host模式、container模式、none模式 - 熊仔其人 - 博客园
一、docker的核心概念docker的核心组件包括客户端,守护进程,容器、镜像、镜像仓库
docker是Client/Server架构的系统,由运行在宿主机的守护进程控制主机上的容器,接收客户端的请求
由主机上或远程的客户端与守护进程交互,提供执行命令对资源操作
镜像是一个轻量级的,可运行的软件包
容器是镜像运行的实例
镜像仓库是用于保存镜像的中心
二、docker与虚拟机虚拟机在宿主机操作系统上创建虚拟层、虚拟操作系统、在安装应用,docker在宿主机创建docker引擎,创建应用共享宿主机内核
虚拟机分钟级启动,单机支持几十个,docker秒 ...
TCP常见知识点整理
前言复习一下TCP常见知识点,包括建立连接的三次握手、断开连接的四次挥手、重传机制、滑动窗口、流量控制、拥塞控制
参考资料:
4.1 TCP 三次握手与四次挥手面试题 | 小林coding
TCP 三次握手和四次挥手(传输层) | JavaGuide
TCP 传输可靠性保障(传输层) | JavaGuide
计算机网络面试题,63道计算机网络八股文(2.2万字80张手绘图),面渣逆袭必看👍 | 二哥的Java进阶之路
一、建立连接1. 三次握手是怎么做的首先服务端监听端口进入LISTEN状态;客户端发送SYN报文随机初始化客户端序列号,进入SYNC_SENT状态;服务端接受报文返回SYN+ACK报文随机初始化服务端序列号,应答序列号为客户端序列号+1;进入SYNC_RCVD状态,然后客户端接受到报文返回ACK报文,应答序列号为服务端序列号+1,连接建立进入ESTABLISHED,服务端接收到ACK报文后连接建立进入ESTABLISHED
2. 为什么是三次握手而不是两次握手三次握手而不是两次握手的主要原因是为了防止初始化历史连接,避免资源浪费,并且同步双方序列号
3. TCP的数据分 ...
消息队列基础概念及选型,常见解决方案包括消息可靠性、消息有序、消息堆积、重复消费、事务消息
前言是时候总结下消息队列相关知识点啦!我搓搓搓搓
本文包括消息队列基础概念介绍,常见解决方案包括消息可靠性、消息有序、消息堆积、重复消费、事务消息
参考资料:
Kafka常见问题总结 | JavaGuide
RocketMQ常见问题总结 | JavaGuide
【原创】消息队列的消费语义和投递语义 - 孤独烟 - 博客园
Kafka事务是怎么实现的?Kafka事务消息原理详解(文末送书)-CSDN博客
Kafka/RocketMQ事务消息对比 - 简书
1. 什么是消息队列消息队列可以看作是存放消息的容器,常用于分布式系统中,在消息的生产者和消费者之间引入一个缓冲区
它的作用主要由三点概括,分别是
解耦:生产者和消费者之间没有直接的调用关系,新增或者修改模块对其它模块的影响较小
异步:生产者无需等待消息消费完成就即刻返回,减少用户请求的响应时间
削峰:在高并发场景,消息队列可以缓存消息,平滑高峰流量,防止系统过载
2. 消息队列有什么常见应用场景日志处理:将日志发送到消息队列,由日志处理系统进行消费,进行实时分析和监控电商系统:订单的创建、支付、发货等步骤可以由消息队列进行异步处理 ...
暑期第一面oωo, TME一面面经
前言面试体验挺好的,讲项目什么的面试官也不会打断,跟着思路听,也会分享自己的思路。发现那边跟我现在在公司使用的开发平台和工具还挺相似的,都是TKE还有用灯塔做报表。反问业务对面给我介绍了好多,总之是做独立音乐人相关的内容和签约,感觉还蛮有意思的。
PS:居然没有出算法题
面经问项目
问MySQL,还有什么类型的锁,答插入意向锁、元数据锁
问元数据锁是什么锁,答在对表的字段做更改的时候加的锁
问生产环境如果对一个千万级大表加字段,怎么避免长时间加锁,因为看过生产环境加索引的方案,然后转移话题说生产环境加索引(其实大同小异)要怎么加,答建一个新表,加字段/索引,将原表数据导入新表,将期间的增量数据导入新表,新旧表改名
复盘:发现自己讲的只是MySQL5.6.7之前的 pt-online-schema-change 方案,新版本有内部Online DDL,可以参考文章:阿里面试:1000万级大表, 如何 加索引?-阿里云开发者社区
问给一个update,条件包括id、age、name,age<16,会发生什么,答会把<16的数据都锁住,特别讲了下16边界情况的next-key ...
Redis常见面试题大白话简答,关于认识Redis及其数据结构、线程模型和持久化
前言备战面试刷Redis面试题,觉得不能光看还得有输出,于是写文用大白话来回答面试题。
本文仅包括小林coding中Redis面试篇中关于认识Redis、Redis的数据结构、Redis线程模型和Redis持久化部分
写文果然是有助于理解的方式,感觉在倒逼自己思考
参考资料:
小林coding
一、认识Redis1. 什么是RedisRedis 是一种键值对数据库,常应用于分布式的场景,作为 MySQL 的缓存,也可以当作消息队列,以及分布式锁等场景。
2. Redis 和 Mencached 有什么区别它们相同的点是:都是基于内存的数据库,可以当做缓存,都有过期策略,性能都很高。
主要区别是:Redis 支持更多数据类型,而 Mencached 只支持最简单的 key-value。Redis 支持数据持久化。Redis 原生支持分片集群。Redis 还支持发布订阅模型,Lua 脚本等。
3. 为什么选 Redis 作为 MySQL 的缓存主要是因为 Redis 具备高性能和高并发。高性能指 Redis 是基于内存模型的,操作速度很快。高并发是指 Redis 单机就可破10w,而 My ...
《动手学深度学习》Pytorch 版学习笔记一:从预备知识到现代卷积神经网络
前言笔者有一定的机器学习和深度学习理论基础,对 Pytorch 的实战还不够熟悉,打算入职前专项突击一下
本文内容为笔者学习《动手学深度学习》一书的学习笔记
主要记录了代码的实现和实现过程遇到的问题,不完全包括其理论知识
引用:
《动手学深度学习》
一、预备知识1. 数据操作1.1 入门创建行向量
12# 创建行向量x = torch.arange(12)
1tensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
报错:module ‘numpy’ has no attribute ‘array’
解决方案:
numpy 版本过高,原版本为 1.21.5,使用以下命令安装 1.21.0 的 numpy
pip uninstall numpy
pip install numpy==1.21
张量的基本操作
123456# 元素的数量print(x.numel())# 张量的形状print(x.shape)# 更改形状print(x.reshape(3, 4))
1234512torch.Size([12])tensor([[ ...
腾讯 IEG 游戏前沿技术 二面复盘
前言二面 40 分钟,面的稀烂,唯一可以圈点的就是一道 hard 写出来了。问了很多基础知识,没有形成很好的引导链到自己准备的项目经历上
面试过程自我介绍巴拉巴拉同一面。。。这次没说做了运维相关,但还是提了自己了解机器学习经典算法。强调了在 xxx 实习的主要产出,包括分布式定时任务解决方案,以及对已有项目的接口调整和性能优化。
问:讲一下做了什么优化答:主要是在后台管理项目和数据分析平台项目中,出现了由于大数据量导致的性能问题。我也根据 SQL 慢查询优化的知识还有数据结构的知识进行了性能的优化
问:能具体讲讲吗
答:通过 explain 看查询的过程,尽量利用最左前缀法则,让查询条件走索引。然后看联表的时候,是不是小表驱动大表,有没有使用谓词下推,尽量不要使用 select *,尽量让索引覆盖返回字段。如果有深度分页的情况。。。(被打断)
问:可以讲有几种类型的优化吗
答:一种就是通过索引去优化,一种是通过联表的方式,还有就是分页的优化,以及分组优化,其实也是让分组条件走索引,也算是索引相关的优化
问:MySQL 索引原理答:索引使用的是 B树 和 B+树,我们知道全表扫描的话消耗 ...
腾讯 IEG 游戏前沿技术 一面复盘
前言投了个实习内推后台开发,本来要电话先交流的那天直接走流程下午面试了,对面两人,面了有一个小时,游戏本的构思续航忘记插电了最后还掉线了一下,趁着还记得面试内容复盘一下
自我介绍一下答:
您好,我是深大26届 xxx 的 xxx,对贵公司后台开发的岗位很感兴趣。现在在 xxx 做后台开发实习生,负责项目的开发和运维相关,还有一部分系统设计相关的的工作,之前在学校中也做过 web 开发相关的项目。
了解到贵公司正在招聘后台开发,做与 AI 相关的交叉。考虑到自己在 xx,对经典机器学习算法还有其相关的论文也比较了解,加上自己在后台开发相关生态的实践较多,因此认为本人跟贵公司的岗位是比较契合的。
我听学长的介绍了解到贵公司会做分布式训练的内容,这块我也是比较感兴趣的。觉得能够将自己在后台开发中对分布式服务的实践与课程中机器学习的内容还有模型的训练的知识相结合,会是很美妙的事情。
很荣幸能有今天交流的机会,希望我们沟通愉快
问实习SQL 优化问:实习干了什么答:会对已有的项目做一些修改,业务需求变动的时候对接口做修改。在开发过程中也出现过因为大数据量导致的性能问题,自己有对 SQL 优化慢查 ...
EnableScheduling 和 Scheduled 实现定时任务的任务延期问题
前言在复盘 ieg 一面看到定时任务阻塞的问题时,研究了下 @EnableScheduling 的源码,觉得可以单开一篇文章讲一讲
本文主要讲述了使用 @EnableScheduling 可能出现的线程阻塞导致定时任务延期的问题,也顺便解释了动态定时任务源码上的实现
引用文章:
@Schedule定时任务+分布式环境:@Schedule定时任务+分布式环境,这些坑你一定得注意!!! (qq.com)
java 中的线程池参数:java中四种线程池及poolSize、corePoolSize、maximumPoolSize_maximum-pool-size-CSDN博客
线程池的拒绝策略:线程池的RejectedExecutionHandler(拒绝策略)-CSDN博客
Java 中实现定时任务:Java中实现定时任务,有多少种解决方案?好久没更新博客了,最近上班做了点小东西,总结复盘一下。主要介绍了定时任务的三种 - 掘金 (juejin.cn)
线程阻塞问题问题根源Java中 使用 Springboot 自带的定时任务 @EnableScheduling 和 @Scheduled ...