转码Java选手从2月就开始陆陆续续找实习了,面了很多日常也面了很多暑期,后面面暑期的时候面麻了,就都没有录音复盘了,以下面经都是之前面得日常,帮大家查漏补缺一下,但是其实面试问题都差不多,只要基础八股加中间件什么看完,再刷刷算法就ok了。
连续固定大小的内存分配、段式管理、页式管理
内核区域
栈(从上到下分配)
文件映射匿名内存区(动态库、共享内存,从低地址开始向上增长)
堆内存(从下到上分配)
BSS段(包括未初始化的静态变量和全局变量)
数据段(包括已初始化的静态常量和全局变量)
代码段(包括二进制可执行代码)
存在线程安全问题,因为线程内部的操作不是原子性的,cpu切换的时机不同导致读取或者写入的数据不同。每个线程的栈是私有的,读取到的数据和准备写入的数据可能是不同的。
主要是解决负载均衡的问题,一致哈希算法是对 2^32 进行取模运算,是一个固定的值,用于解决集群之前的负载均衡问题,但是哈希环上的节点可能分布不均匀,所以会引入虚拟节点来对真实节点提供多个副本,虚拟节点均衡分配到哈希环当中,并映射到一个真实节点上。当节点变化时,会有不同的虚拟节点节点共同分担系统的变化,因此稳定性更高。带虚拟节点的一致性哈希方法不仅适合硬件配置不同的节点的场景,而且适合节点规模会发生变化的场景。
普通哈希算法会造成集群在扩容缩容的时候映射发生改变,需要额外的数据的迁移。
交换机是的端口也是存在mac地址的,会接收所有的包然后按照地址表进行转发。无法判断则转发全部
集群、熔断、服务降级、限流、重试、缓存、异步调用
高亮、输出到其他文件、查看指定时间、制定行数的、分页查看
重传、滑动窗口、流量控制、拥塞控制都是高可用的依赖
多协程是为了并发(协程阻塞可以切换到下一个执行),多线程是为了并行(利用多核cpu的优势)
mysql的用户连接时基于TCP/IP,并且传输层是TCP协议,中间会涉及到TCP连接的握手和断开,同时数据库层面也会涉及到用户的创建和销毁,而这些操作会影响数据库操作的处理能力(TPS、QPS),所以在应用端引入了连接池来解决TCP的问题,在数据库端引入了线程池,来解决线程的创建/销毁的开销。(每当一个客户端连接就要创建一个工作线程来进行命令处理)