2024届实习+秋招(面试疲惫的时候就懒得记录了)
猿辅导
1、自我介绍
2、项目介绍
3、项目实现了哪些功能?
一人一单:
超卖:
关注
点赞、排行榜
为什么不用list,list也是先来先排
如果只是单纯的来记录排序,两者都可以,但是我们实际需要显示的是前几名,而sorted set支持范围查询,我们项目中是需要显示排名前五的用户,list不能够支持快速的范围查询,而sorted set支持。
zset是怎么实现查找、排序的。时间复杂度
zset底层是跳表实现的。跳表分为多个level。查找时从最高的层开始查找,若此时的节点权重小于待查找的权重,就继续同一层向后查询。如果找到权重相同的,比较sds类型数据大小,或继续往低层遍历。排序是根据权重排序的。时间复杂度一般是logN。
为什么要把user存到里边,ThreadLocal是不是在分布式下失效了?
因为项目里需要用户信息去判断一人一单和超卖。之前使用的方法是在拦截器中将登录用户的信息保存到session中,但是这个方法耦合度太高,每次使用时都需要在controller中传入session,比较麻烦,所以考虑采用ThreadLocal,存放登录用户信息,这种效果挺好,因为是线程隔离的,每个线程都有自己的实例,所以用户信息也做到了线程隔离。在超卖和一人一单判断时直接从ThreadLocal中获取登录用户信息,比较方便。可以让不同方法直接使用,避免参数传递的麻烦。由于各个线程之间的数据相互隔离,避免了同步加锁带来的性能损失,大大提升了并发性的性能。但是在分布式下会失效,如果在分布式下就避免使用ThreadLocal。
订单ID生成策略
Id生成不能是有序的,不能有明显的规律,时间应用中可能随着数据量越来越大。需要分表,但虽然分表了但实际还是一张表,id也不能一样,具有全局唯一性。使用64bit的数据,第一位为0,表示正数,后31位表示时间戳,以秒为单位,后32位表示每秒生成2^32个数
你这个setnx的key,value,过期时间是怎么设计的?
对于key的设置不能随意设置,防止key设置不当,导致锁误删或者其他可能的问题。我的项目中在订单模块加锁,所以key前缀是lock:order:seckill,我要实现一人一单,防止同一用户一直请求,所以后缀是userId,总体key是lock:order:seckill:userId,这样做的目的是其他用户可以来请求下单,同一用户会被锁住。value是UUID+threadID
缓存你了解吗?说一下怎么保证一致性
数据一致性一般是指数据库和缓存中的数据保持一致性。项目中我是先更新数据库,在删除缓存。但还有其他策略,比如,先更新缓存在更新数据库,如果此时数据库出现故障,那缓存是新值,数据库是旧值,缓存失效了还是从数据库取到旧值。先更新数据库在更新缓存,缓存更新失败,从缓存中读到任任然是旧值。先删除缓存在更新数据库,假如线程1在执行更新DB,但线程2此时读,没有缓存然后重建缓存,仍然是旧值。先更新数据库在删缓存,同样的情景,但提前是更新DB的时间+删除缓存的时间要比读数据库+写缓存的时间短,这发生的概率就特别低。
sychronized锁升级,为什么要升级,为什么不用jdk1.5的重量级锁
jdk1.5的sychronized都是重量级锁,每次获取锁都需要进行互斥同步,如果多个线程同时竞争锁,会导致性能下降,特别是在并发量较高的情况下。而且他还会出现死锁情况。而对sychronized升级,有偏向锁适用于单线程,轻量级锁适用于竞争小的,轻量级锁采用cas获得锁,竞争一段时间后就会放弃竞争,不会发生阻塞,避免了上下文切换,也可以减小死锁发生的概率。
concurrentHashMap怎么保证线程安全?
算法题:两个链表相加
项目里有没有用到集合?
没有用到,但是了解ConcurrentHashMap。这是一个线程安全的集合,他的最大并发度依赖于他的level。它的get操作虽然没有家sychronized,但也是安全的。因为他的 key、value使用了volatile来修饰,一个线程的修改是对其他线程可见的。put的话他主要给第一个node加了sychronized,相对1.7的分段锁,性能提升了不少。
你的签到是怎么实现的?
签到的话可以用数据库来签到,也可以利用redis的bitmap来签到。如果用数据库的话会浪费大量空间的。假如有一个表专门来存签到表,我们给表设计一些字段,假如一个表有20个字节,那么在用户量大和签到次数多的情况下,占用大量空间。但是bitmap可以有效解决这个问题。bitmap最大512M,2^32,我们可以用31个bit来签到。key是userId+年月,然后日的话就用bitmap,也方便统计签到了几次。
面试题
计算机内存只有1G,如何排序10G的文件,文件里是int整数
首先从10G文件中加载1G文件到内存中构建一个大小1G的小顶堆,然后将最小值写入文件,在从剩余9G文件中
红黑树与平衡二叉树的区别
思特奇
1、说一下多态,用自己的话,简单的讲
2、jdk源码中用到了哪些多态,哪些设计模式用到多态?
3、说一下继承和接口的区别
4、tcp和http区别
5、说一下HashMap和ConcurrentHashMap的区别,后者怎么保证安全的?
6、说一下分布式session
7、你的关注、共同关注怎么实现的?
8、bitmap签到怎么实现的?
9、怎么对接口进行优化
池化,例如数据库连接池,将复杂计算加载到内存中
10、怎么从代码层面实现可见性?不使用api
11、说一下什么是原子性
12、volatile不保证有序性吧?
13、接口和类的区别
华为
笔试复盘:第二题
首先定义一个block数组用来存储障碍物,一个Map<Integer, ArrayList>用来存储非叶子结点也就是边的起点,起点为key,边的下一个节点为list集合,这样可以看作是一个树一个res用来保存最终结果。bfs(0,1)从起点长度为1开始搜素。
核心dfs(start,deep),如果map不包含起点,说明他是边的叶子节点,就取steps和res最大值,如果包含起点,说明他是非叶子结点,还需要继续dfs他的子节点,遇到障碍物直接就return
第一题主要思想是差分数组,获取起始和结束的最小、最大值构成差分数组,差分数组给每个start设加1,结束的下一个位置减1,条件是没有超出数组范围
for(int i=0;i<intervals.length;i++){ diff[intervals[i][0]-min] += 1; if(intervals[i][1]+1<=max){ diff[intervals[i][1]+1-min] -= 1; } }
通过差分数组恢复原数组,通过原数组每一位是哪个运行状态,加上状态对应的能耗。
1、做道题,有序序列的中位数(进阶优化没想出来)
2、笔试复盘
3、挑一个自己觉得有难度的项目(我反手给他甩出一个问题,问他对哪个感兴趣),科研项目,畅聊半个小时
4、项目存在问题,没有涉及到并发,不能只是完成项目。应该自己多去思考。聊到了ConcurrentHashmap,怎么保证实现的,还有什么安全的map,hashtable怎么安全。使用过AOP吗?
5、反问+意见一大堆
小米(安卓)
1、开局闲聊,实习多久,接受武汉吗?
2、java三大特性,感觉回答的不太好
继承:是指继承另一个类的方法和属性,实现代码的重用和扩展
封装:把对象的属性和操作数据的方法(行为)封装到一个单独的实体中,即类。通过封装,可以隐藏类内部的实现细节,只暴露对外可见的接口。
多态:多态是指同一个方法可以根据调用的对象不同表现出不同的行为
3、接口和抽象类的区别
4、static方法可以被继承、重写吗?
5、final关键字
6、String、StringBuffer、StringBuilder,StringBuffer为什么安全?
7、HashMap的put底层原理以及扩容机制
8、手撕单例,忘记考虑new 了,解释下为什么两个if?
9、反问
10、对安卓了解吗?
百度一面
自我介绍
手撕两个30分钟
MySQL和Redis如何保证一致性,先更新数据路在删缓存,那万一缓存没有删掉呢?
线程和线程池,线程池参数,工作流程,线程数怎么缩减,一套流程
消息队列,学过RocketMQ,使用过kafka,为什么不使用服务调用的方式?因业务不合适
反问
字节提前批一面
1、自我介绍
2、介绍一下你的实验室项目
3、你的项目中io是怎么处理多个事件的?大概意思是bind一个端口,那假如多条socket呢?
我感觉想让往netty上靠,因为netty使用到了io多路复用,netty有两个线程组,worker和boss,boss组用来进行连接管理、事件监听,worker用来事件处理,通过一系列handler来进行实践处理。
4、项目中使用到了网络协议吗?不懂,提示netty这些,没有
5、websocket底层是什么,和http的区别
websocket是一种应用层双向通信协议,http是一种单向通信协议。websocke在建立连接时,首先会采用http的方式向服务端发送请求。这个请求包含了
6、项目用到了udp,说说为什么不使用tcp而使用udp?tcp和udp的区别?tcp那个流量控制是怎么处理的?
7、看你项目说是解决了kafka吞掉消息的问题,说说怎么解决的?面试官说你代码写错了吧?
8、说一下缓存穿透这些
9、说一下geohasah实现附近店铺查找。(被问了三次不会)
10、说一下zset的底层,zset底层怎么查找的,加入我要查找第100个,怎么查
11、虚拟内存说一下,就说了个段也管理面试官就提问了,假如C或者C++new了一个对象,然后这个对象置为null了,解引用之后报了找不到xx错误(没听过),怎么回事?
12、进程和线程的区别说一下
13、为什么要使用多进程、多线程?我扯到了单cpu和多cpu在多线程的并行和并发
14、你项目里用到了hashmap,说一下hashmap的扩容?多线程下存在的问题
15、写sql,给了四个字段,id,name,age,city,求每个城市下面年龄最大的员工的信息?写出一部分
16、手撕力扣原题,搜索旋转数组,讲了一下讲思路,先介绍On做法,又介绍二分查找?反问,不是有序的数组为什么还可以用二分?10来分钟A了
17、投的抖音,是抖音大池子里的随机部门面试。反问没啥问的,面试官说广度还可以,深度的话还得加强。
百度二面
1、自我介绍,介绍完面试官说你这个点评项目,10个人8个有
2、讲一下kafka集群
3、epoll原理说一下(浅浅的说了一句,不理解)
4、怎么实现的附近商铺查找
5、bitmap怎么实现用户签到
6、tcp和udp的区别,怎么握手的?流量控制是怎么实现的
7、bitmap怎么实现签到的,一个人一条bitmap,那下一个月的怎么存
8、geohash怎么是实现的附近店铺查询,原理
9、秒杀怎么实现的?
10、zset底层怎么实现的?怎么查询的
11、redis+lua是干什么的?场景是什么
12、说一下mvcc,全称是什么,怎么实现的?
13、单例模式、工厂模式,干嘛的
14、类加载过程
15、redolog和undolog干嘛的?
16、二叉树高度
17、反问,被狠狠的吐槽了,应届生没有实习、项目经历,多抓原理,IO是常见的(epoll)
快手实习一面
1、自我介绍加闲聊将近10分钟
2、介绍一个项目。(不能两个都问吗?)
3、深挖线程池线程数怎么设置的(给自己挖坑了,扯了一堆什么基于cpu运算和IO操作,没答到面试官的点)
4、怎么设计分布式定时器(单实例定时器挂了怎么处理),主节点和从节点逻辑不一样
5、MySQL相关,一个表没有设置主键会发生什么?索引类型结构。主键索引的逻辑结构,B+树为什么稳定
select id, name, from user where name like 'xx%' and age > 10;联合索引(name, age),id是主键,(这个应该是都会走索引)
6、进程和线程的区别
7、进程通信有哪些?
8、上升到jvm说一下线程同步
9、sychronized底层,引出来实现一个cas自旋锁的设计
10、Object的wait和Thread.sleep区别,从操作系统层面讲
wait会释放锁释放cpu,sleep会释放cpu但不会释放锁
11、mysql主键怎么设置的,假如我没有设置主键,那然后呢?
12、手撕三个线程无限打印ABC
13、零拷贝有哪些方法?
用友高潜一面
1、全面自我介绍
2、聊导师方向、实验室主要干嘛的
3、自己做的项目有哪些,做了多长时间,有什么收获
4、springboot为什么不用http暴露接口?
5、soceket怎么释放资源的,怎么绑定的
6、kafka原理,既然聊到了zk,那你说一下为什么要用分布式锁
momenta一面
1、自我介绍
2、hashmap和hashtable的区别
3、Arraylist有哪些遍历方式
4、hashmap有哪些可以根据key排序的?LinkedHashmap和TreeMap,treemap实现了sortedmap。
5、mybatis中#和$的区别
6、sql题
<img src="C:\Users\97259\AppData\Roaming\Typora\typora-user-images\image-20230829092807561.png" alt="image-20230829092807561" style="zoom:33%;" />
7、地点选哪里,实习多久
8、get和post的区别级应用场景
腾讯一面
1、说一下实习经历和项目经历
2、项目浅浅挖了一下
3、秒杀介绍一下,存在的问题,思路是谁先抢谁到谁下单,面试官说用户体验不好。我想着把库存按时间段分摊一下,又指出了假如一个时间段的卖完了,只能等下一个时间段才能下单,这样也不好。提了一下接口限流。
4、对腾讯在深圳有什么看法,看你已经有了实习经历,来实习的意愿大吗?
5、职业规划
6、一个产品的过程中可能会遇到什么问题
7、看你也考了软考,说一做一个产品需要注意什么问题。
8、在开发过程中,遇到了难题怎么解决。
9、反问
快手一面
1、自我介绍
2、2段实习+项目介绍
3、介绍了用户注册的缓存穿透
4、4个判断题
<img src="C:\Users\97259\AppData\Roaming\Typora\typora-user-images\image-20230906095354799.png" alt="image-20230906095354799" style="zoom:33%;" />
5、OOM和stackoverflow发生在哪
6、手撕第一道,力扣hard1312. 让字符串成为回文串的最少插入次数,力扣mid516. 最长回文子序列
7、反问部门介绍,感觉是核心部门,为啥流程这么慢,说是hc不够的部门要横向对比,二面面试官不多
8、反问判断题d,被夸了一下,直接给通过
好未来一面
1、自我介绍
2、netty的零拷贝,从操作系统和jvm说下
3、linux的网络通信方式,select、poll、epoll
5、线程池解决了吞消息的问题说一下
6、线程池怎么弄得,参数,核心数怎么设置
4、手撕力扣114
飞猪二面
1、面试官迟到3分钟,可能没有睡醒
2、没有自我介绍,介绍一下项目
3、数据库如何防止sql注入,#防注入的原理
4、SpringAOP了解吗,讲了一下动态代理和静态代理,Spring用的什么代理
5、网络7层模型和功能介绍
5、数据库有哪些索引,为什么B+树和hash和全文索引放在一起,可能嘴贱,说错了
6、怎么判断有向图有环,怎么霍夫曼树怎么搞得,堆排序原理
7、怎么实现内网访问外网,外网无法访问内部主机
8、反问业务,都不敢问表现
五八同城二面
1、双亲委派模型,哪些场景打破了双亲委派模型
2、类已经加载运行了,需要更新类里的逻辑,不想重启
3、同一个类加载器下不能加载同名类
4、java值传递和引用传递
5、String、StringBuffer、StringBuilder区别
6、创建多线程几种方式
7、异步、同步线程
8、MapReduce了解吗,统计1T文件中url中次数排名top10的URL,服务器只有1GB内存
9、linux的top负载
10、redis的zset
11、缓存穿透、击穿、雪崩
12、布隆过滤器的存在的问题,查询流程,先查布隆过滤器还是redis普通数据?查询两次?怎么优化查询次数
13、分布式锁,主从锁重复获取
14、实习项目碰到的技术难点问题
科大讯飞一面
1、MQ干嘛的,缺点,顺序消费
2、redis数据结构
3、持久化方式
4、项目介绍
5、线程池参工作流程,jdk哪些线程池框架
6、jvm调优,内存模型,新生代老年代
7、tcp三次握手
8、hashmap,7和8区别
腾讯视频一面
1、自我介绍
2、实习项目的技术难点(一顿吹,面试官不懂Java)
3、拷打TCP三次握手,每次握手没收到会出现什么问题,SYN攻击,时间还挺久,腾讯喜欢问网络
4、智力题,烧绳子
5、手撕力扣1493
6、redis用过哪些数据结构,为什么快(多说一下单线程和io多路复用)reids高可用?
7、零拷贝
8、一条tcp占多少内存
9、mysql存储引擎为什么是B+树?
快手实习一面
1、自我介绍
2、kafka的消息是实时的吗?我说取决于producer,它什么时候发,我就什么时候处理。kafka消息数据量多大,消息堆积怎么处理,调整分区和消费者(我说每个分区是有序的,面试官笑了,确定??)
3、final作用范围,final赋值方式,(直接赋值,构造器赋值,代码块赋值)
4、final static怎么赋值(代码块)
5、hashmap红黑树如何退化成链表(链表会记录,直接使用链表)
6、spring源码,ioc和aop,aop场景,一个类有两个方法,a是普通方法,b是aop增强方法,a调用b有什么问题(aop失效,同一个方法调用,使用的是this,没有使用代理类,不同的类可以生效)
7、为什么用三级缓存,两级可以吗(保证bean的生命周期)
8、线程池参数、工作原理,空闲线程什么时候销毁,先销毁线程还是等工作队列中没有任务了再销毁
9、String a = "i";String b = "i"; a == b? String c = new String("i");String d = new String("i") c == d?
i == d?
10、Integer a = 127, Integer b = 127, int c = 127,a == c? a== b?
Integer a = 129, Integer b = 129; a == b?Integer为什么引用缓冲池,
11、手撕股票和
12、bean的作用域
虾皮一面
1、自我介绍
2、计算机网络tcp和https
3、操作系统进程调度算法
4、手撕
虾皮二面
1、自我介绍
2、项目介绍
3、tcp三次握手相关
4、进程调度算法
5、手撕重排链表
虾皮hr面
1、自我介绍
2、考研
3、家庭
4、意向地
#我的失利项目复盘##面试#