阿里淘宝一面
1.redis消息队列你是如何实现的
消息队列是什么,作用是什么(解耦、控流、异步);redis 怎么实现(redis 的list 以及生产消费者模型);redis 实现消息队列的缺点(消息重复消费、消息丢失、)解决方式
2.如何保证缓存与数据库一致性、(这块面试官追问了很久)
这块我不敢说自己能解决的很明白,没有绝对固定的答案,重点是有自己的考量
3.InnoDB与myslarm区别
事务、锁、索引文件(myslarm索引和数据文件不在同一地方); InnoDB 特性:两次写(解决表持久化到一半出事);change buffer;
4.jvm内存结构
八股文系列;在此之外我加点自己的料证明自己不是背的面试题 栈的两种异常:不能动态扩展是StackOutOfMemery ,能动态扩展导致OutOfMemery 方法区 1.7 与1.8区别,直接内存,堆内存不是绝对意义上的共享(H神有相关文章),PC寄存器在多线程调度层面的意义作用
5.堆内存内部结构、栈内存涉及的异常、堆外内存的接口
6.垃圾发现算法和垃圾回收算法CMS 和G1 垃圾回收器区别以及底层原理、
7.jvm调优实战用什么工具主要涉及什么参数、
8.MySQL索引在业务中的运用、
9.布隆过滤器底层原理、
10.如果有亿级别的数据,布隆过滤器初始化怎么办、
11.布隆过滤器的误判概率是固定的么
因为本身的数据结构BitMap,会有所谓的重合;意思是证明不存在有误判
阿里中台一面 (挂在算法)
1.数组跟链表区别
2.说说hashmap
3.concurrentHashmap 跟hashmap区别;
4.你项目中有什么你觉得可以的亮点
5.NIO与BIO区别:原理层面的聊就是操作系统了
6.Dubbo如何实现节点的管理
7.Dubbo服务暴露原理、
8.mysql索引需要注意的事情、:索引的创建和索引的使用(避免失效)
9.redis 消息队列如何保证消息不丢失
10,让服务端单独消费队列
11.redis 与DB如何同步、
12.redis缓存产生的相关问题
13.PrepareStatement和statement区别、
14.jvm内存结构、
15.jvm垃圾回收、
16.线程wait 与sleep 区别、
17.线程什么时候死亡、
18.如何描述MVC、缓存穿透缓存雪崩缓存击穿的解决方式
19.异常分类、 catch 出现return finally的return还会执行么
20.编程题:LRU算法和多线程ABC顺序输出
整个的面试流程我完成度比较高,聊的挺开心,但是面试过后让我写笔试题,这个我写的太差,部门没再让我进入二面流程;
腾讯TEG一面
(经过这场面试开始意识到操作系统网络协议这些的重要性)
1.什么是内存抖动、
2.什么是内存泄漏
java党可以说下ThreadLocal
3.进程与线程区别;
4.线程模型:五种Future、forkjoin(递归回溯思想)、actor(基于消息传递)、生产者消费者模型、master-worker模型
5.62bit 和32bit区别:
除了性能控制的内存,至于为什么的操作系统层面的原理说一下子
7.syn和volatile区别
8.i++ 如何保证原子性
原子类;
9.什么是AQS
10.聊到原子类肯定会谈到AQS;一个维护这state和阻塞队列进行线程状态管理的类
11.HTTPS和HTTP区别、HTTP1.0 和HTTP1.1HTTP2.0区别、
12.网络协议层级:主要是TCP网络模型和原理体系结构各个层干什么说一下;然后面试官根据你的回答聊下一步,一般会转到聊TCP
13.一个URL 输入后的整个流程:浏览器解析、DNS协议、ICMP协议、路由选择协议、MAC和IP、ARP路由解析协议这些主要过程中设计的主要协议聊下
14.你如何设计一个秒杀系统
15.hashmap、 hashtable 、concurrenthashmap 区别
16.mysql为什么高可用,异步binlog备份。
17.主从、binlog;备份恢复
18.mysql 索引结构:B+数,页存储,局部性原理。
19.B+树与B树区别:聚集索引的非叶子是否可以存储行数据,叶子节点做双向链表。
20.mysql三范式:
21.什么会导致索引失效:like、null、不满足最左匹配的查询,低过滤性的索引会被优化为全表扫描。
22.高并发与长连接导致的问题是什么如何解决,链接耗尽,连接池,修改操作系统最大连接数等等。
23.长连接与短链接区别:长连接需要Keepalive进行探活。
腾讯TEG二面
1.问项目:rpc框架怎么实现,服务暴露和发现(启动时同步服务和机器信息到注册中心),服务调用过程(调用端动态代理FactoryBean+序列化,提供端反序列化+反射)。
2.你是怎么用java远程爬取数据的:http数据吗,jsoup?
3.redis有什么数据结构:string、set、zset、list、hash,5.0版本后增加的stream。
4.布隆过滤器原理:哈希函数+位存储。
5.mysql数据库主从同步如何实现:binlog
6.redis 主从同步:aof+rdb
7.进程之间如何通信:socket、消息队列、共享内存、信号量、管道
8.如果RT 过大你会想到什么原因呢,sql性能、其他rpc接口、高并发、接口业务逻辑复杂度。
9.抽象类与接口区别:都是抽象方法、单继承多实现。
10.反转链表:迭代(三指针)+递归法(次节点反转)
11.linux如何查看文件状态:stat
12.StackOverFlow 产生原因:单线程内的入栈元素过多(1024),一般出现在递归过深的场景。
因为底层基础差遗憾挂掉
腾讯微信一面:
1.环形链表、两数相加:快慢指针,TwoSum
2.类加载、协程与协程区别:
3.协程定义
4.事务是什么解决了什么问题:保证多次操作之间的ACID特性。
5一个URL 发送之后到响应的流程是什么:dns解析(本机、isp、根域名)-> 浏览器、操作系统、网卡、光猫、isp、公网、对方光猫、对方网卡、对方操作系统服务器。
6.死锁是什么如何解决(信号量睡眠巴拉巴拉):固定共享资源的访问顺序,mysql的快速失败。
7.sql如何优化select from student 的问题在哪:换成需要的字段(尤其考虑覆盖索引),没有where条件,不要全表扫描。
8.分布式:paxos 和拜占庭问题:核心就是如何在不确定的硬件+网络环境下,保证信息安全传递的问题。
(以上建议全从计网的角度解答)
腾讯CSIG一面
1.说下一个URL输入后整个过程
2.MySQL 的B+树特性
3.left join right join join 区别,以左表、右表、两表数据为准,
4.进程与线程区别:最小的资源分配单元,最小的cpu执行单元,线程间可以直接信息传递,一个进程和创建多个线程。
腾讯CSIG二面
1.项目中你觉得挑战性大的问题:技术上就是流量海关、业务上在酷家乐的工作需要去了解房产和设计相关的专业知识,此外要进行项目资源管理,人员管理等等。
2.抽象类与接口区别
3、面向对象理解:抽象、继承、多态
面向对象三大特征
4、权限修饰符:private当前类可用,default同package下可用,protect子类可用,public公开。
5.常用设计模式:单例、工厂、模板、代理、装饰、监听
6.hashmap原理:数组+链表/红黑树
7、mysql常用引擎:innodb
InnoDB、MyISAM、Memory(一个只在内存的key-value 表)
8、Innodb和MyISAM区别:事务、锁、全文索引
9、你在本机如何配置主从,如何实现主从复制
10、B+和B树索引结构的区别
11、回表:非聚集索引拿到主键id需要查一次聚集索引才能拿到行数据,所以覆盖索引的性能很高。
12、最左前缀原则:联合索引在确定前置索引的视角下是有序的,而在全局视角下是无序的。
13、主从复制原理、如何做主从配置更改了什么文件:不是DBA不会。
14、事务原理特性:ACID
15、MVCC中回滚是怎么做的:mvcc本身和回滚没啥关系,undolog作为快照数据进行读取,在rr下事务只能读取到首次生成的readView,在rc下事务每次都会读取最新的快照。
16、(a,b,c)联合索引:ac访问能击中索引么:能,但只有a段有效。
17、HTTP1.0 与1.1区别
18、HTTPS的具体实现、SSL的握手:浏览器发送服务端请求,服务端返回数字证书,浏览器验证证书,通过后用证书内的公钥加密一个对称密钥,服务端解密出对称密钥。这样两边就可以用加密算法进行通讯。
19、三次握手四次挥手:sync,sync+1/ack(重发机制),ack+1,fin,等待,fin+1/ack(重发机制),ack+1,握手的重发机制会导致Sync洪泛攻击,挥手的重发机制就需要等待2MSL,目的就是防止没收到最后一步的ack+1,因为如果没收到就会触发重发,反推也就是如果没有重发就证明收到了。而1MSL是网络报文在网络中的最大存活时间,2MSL也就是一去一回。
20、nginx 原理:反向代理,为服务端提供代理,ip白名单、负载均衡、路由规则
21、反向代理
22、nginx命令配置文件:不是运维不知道
23、持久化策略:aof、rdb(恢复效率高但成本高、手动触发save、定时自动触发bgsave)
24、redis所有数据结构
25、持久化配置
26、集群配置和原理;主从、哨兵、Codis、Cluster
27、主要的Linux命令
28、操作系统内存管理
29、如果一个接口很慢你会怎么排查和解决问题
腾讯CSIG三面
(偏向比较宏观的问问了) Linux常用命令:
redis 缓存和数据库如何保证一致性:这方面跟面试官聊了20min:cache aside,延迟双删。
问问项目
考研吗
平时怎么学习的
字节抖音一面:
字节一面: 疯狂问项目:你项目的大概结构、用了什么技术获得什么感受,springboot、groovy、二级缓存
1.redis用在什么业务场景上面:缓存,简单异步mq,分布式锁。
2.你如何主从同步的,aof+rdb
3.什么数据放缓存什么数据放数据库,应该是根据请求流量来区分。
4.你业务中哪里用到了事务:单次请求内设计多张表的更新,就会用到事务。比如创建用户过程中,还需要给用户绑定角色和组织关系,需要用事务保障ACID。
5.业务中哪里用到了锁:jvm锁没怎么用到,因为现在都是分布式架构,单机锁的功能有限,分布式锁的话,一般用在对公共资源或逻辑的锁定,比如库存修改,比如异步任务执行体系下的任务单机执行等。
6.业务中哪里用到了索引:
你对mvc 的理解、你对spring springmvc springboot 的理解、spirngAOP在实战中的应用、
spring是ioc软件思想的实现,mvc是web应用架构分层的基础设施,boot是快速搭建微服务的一整套基础设施。
aop应用:通过postProcessor进行bean生成过程中的动态代理(jdk、cglib),日志、权限、事务
一个url请求到响应的所有流程、 知道其他并发模型么
八皇后、用两个栈实现队列(以及高并发的设计)
(面试官问的特别偏实战,完全不按正常的套路出牌就有些蒙)
字节企业服务部门一面:
1.常见的异常、错误,NPE、CME、FNFE,OOME
2.StackOverFlow和OutoFmemery产生原因,
3、abc联合索引 a=? b= ? 能击中联合索引么
4.抽象类与接口区别
5.项目中比较亮眼的点、list消费端你是阻塞读获取么,
6、异常与Error区别
7、如果一条语句执行特别慢是为什么:索引
8、你会用什么去查询数据库 的状态:explain、
9、NoClassDefFoundError 和ClassNotFoundException 效果和原因:ex是运行时,err是编译时
10、int [] a1,int []b ,b[i] = (a[0]a[1]a[i]**a[n-1]) /a[i] 求b 数组 (n) 空间O(n)
shopee一面
1、盛水最多容器
2、进程与线程区别、
3、页缺失
4、页替换算法
5、块表和多级页表的机制和作用
6、TCP 如何实现可靠性:三次握手四次挥手、超时重传、滑动窗口、拥塞控制
7、进程之间通信
8、虚拟内存:虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。
9、发送端发送接收端没有recevice会怎样;
10、TCP重试机制
11、如果一堆数据大于内存,如何拿到前面的数据:Scanner、Apache Commons IO流
12、hashmap 与 线程安全的concurrentHashmap
13、msyql索引类型
14、为什么选择B+树
15、mysql事务、mysql幻读是什么如何解决、事务原理、
shopee 二面
1、IO多路复用
2、虚拟内存整体流程
3、HTTP 2.0 新特性、 HTTP3.0新特性(UDP配合TCP 替换掉)
4、算法:10G乱序数据、1G内存、找出中位数,划分255,桶排,http://t.zoukankan.com/lfri-p-12445149.html
5、新增频繁的表怎么设计:减少索引、mq、备份异步、脏页刷盘配置fsyn=0,冷数据备份删除
6、 事务是如何保证原子性的:多个操作成功全成功失败全失败,事务结束后不存在中间态,事务commit会将数据落盘(当然这里的落盘包括bufferpool+redolog方案),事务rollback会基于undolog对已修改数据进行回滚。在宕机的情况下,事务也能恢复到事务之前的状态。
7、B+树结构
8、redis zset数据结构:跳跃表,二分查找的变种,可以从On优化到Ologn
9、消息队列实现、
10、你的远程登录设计
11、两个请求放在一起发给服务、
12、服务端业务层面如何保证有序
13、平时怎么学技术的、有无参与开源项目
美团一面
1、面向对象三大特性
2、Integer a = 20 Intger b = 20 ,a == b; true还是false:true,128缓存
3、与equals重写重载区别
4、权限修饰符的区别
5、基本数据类型都有什么
6、异常的同一接口
7、异常分类两种区别
8、我们需要抛出的异常是什么异常
9、线程池原理
10、jvm内存结构
11、mysql事务特性 和隔离级别
12、msyql事务隔离级别
13、SpringAop 和SpringIOC
14、对反射的理解
15、写一个嵌套的sql语句(where groupby oreder by 执行顺序)
16、两个栈实现队列:栈1持续push,在pop的时候将栈1导出到栈2(此时需要锁住栈1防止继续push导致乱序),这样栈2pop时候顺序就正序了满足FIFO的顺序,之后栈1继续接收push,栈2持续pop直到空,空之后继续上述过程。
美团二面
(主要问项目巴啦啦问了一堆)
1、站内信设计
2、你那个站内信的消息为什么用list 不用其他
3、同样是消息队列不用mq?redis 的list 爆出异常怎么办
4、双亲委派模型,为什么要双亲委派模型;
5、聚簇索引和非聚簇索引区别、
6、谁可以形成聚簇索引、
7、谁不可以做索引、
8、联合索引的索引失效问题
9、数据库层面通过锁防止重复insert
网易一面
1.ArrayList和LinkedList区别
2.进程和线程区别
3.你刚刚跟我说进程的切换比线程的切换更耗费资源你说说上下文切换是什么吧,cpu在某一时刻只能有一个线程在运行,为了可以单cpu实现并发执行多个任务,采用分配时间片的方式来处理多线程,也就一会执行这个线程一定时间后执行另外一个(ms级别),这样可以让外部看起来是并行执行的。线程在执行时有程序计数器来存储当前线程执行的位置和指令等信息,这些信息就是上下问,所以在切换线程时,需要调用内核函数来将上下文进行保存,以及被激活线程需要切换出这些上下文,这个过程存在内核调用所以存在成本损耗。
4.进程在内存中的结构
4.说下一个URL输入后整个过程
5.网络协议的OSI 分层结构说下吧:应用层(HTTP)-表示层()-会话层()-传输层(TCP协议)-网络层(IP地址)-数据链路层(MAC地址)-物理层(光缆、双绞线、水晶头、交换机、光猫等)
6.HTTPS与HTTP区别
7.HTTPS原理
8.TCP三次握手是什么,为什么三次握手
9.TCP四次挥手是什么,
10.TCP四次挥手中客户端最后发送消息后等2MESL是因为什么
11.TCP的拥塞控制与流量控制区别:前者是应对网络拥堵,方式检测拥塞后减少发送量,后者是滑动窗口,是双方协商后的流量控制,依据接收端是否能接收,接收后是否ack划分为4段数据,通过中间两段称为滑动窗口,随着窗口不断移动,完成流量的发送。
12.JVM内存结构都有些什么
13.堆内存结构?一定线程共享么?,TLAB
14.垃圾回收器CMS和G1区别在哪,CMS一般配合parallel New算法,也就是前者只回收老年代(复制整理),后者回收年轻代(复制清除),CMS的核心是追求最短的STW时间以及垃圾吞吐量,G1能同时处理两个区域,关键原因在于G1堆的代际划分是逻辑划分,也就是一快内存很可能某段时间是年轻代,后来变成了年老代,G1采用分区的方式进行堆内存管理,为每个区维护一个管理卡片,存储该区内的一些原信息,比如对象数量,G1追求的是可预测STW时间的垃圾回收,通过上述的区元数据维护,可以判断各个区的回收价值(垃圾占比)。
15.你觉得垃圾回收期现在不断的发展是处理优化那些问题:STW、吞吐量、堆大小、多核利用
16.你平常怎么学习的
网易二面
1.hashmap的put和get流程,获取下标(哈希-扰乱-取模)-下标为空直接设置,下标存在数据判断key是否相等(equals)如果相等就覆盖原值,如果不等就包装成一个node加入链表,如果链表长度超过8进行链表转红黑树,更新cnt;
2.hashmap 与concurrenthashmap区别
3.说下其他并发包
4.说下Semphore cycricbarrier
5.垃圾回收算法都有什么:引用计数、复制清除、标记清除
6.redis都有什么数据结构
7.redis 缓存 与数据库同步你是怎么做的:延迟双删,binlog异步
8.redis缓存可能出现的问题,以及你是怎么解决的:热key预热、缓存击穿、雪崩
9.redis String 数据结构底层是什么,sds,维护一个字符数组的长度,一般会比申请的大一些,防止适度扩充,并将length方法的时间复杂度降到O1。
10.你项目中封装了orm框架模拟mybatis,你说说你的连接池怎么处理的,比mybatis有什么区别
11.你的消息队列是怎么实现的
12.你的 消息队列如何保证可靠性:不重复消费、消息不丢失,
13.redis中布隆过滤器原理:bitmap,基于哈希函数以及减少元素的存储信息的维度,来降低大数据量场景下带来的元素判重的空间成本。