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、意向地

#我的失利项目复盘##面试#
全部评论
大佬太强了 学习了
2 回复 分享
发布于 07-03 13:13 广东
很有帮助,让我这个没有那么多面试的人,也能了解到面试的流程和面试官会问的问题
1 回复 分享
发布于 07-02 23:31 河南
佬京东和快手是啥时候拿的offer?
点赞 回复 分享
发布于 07-08 23:20 四川
膜拜大佬
点赞 回复 分享
发布于 08-09 09:39 四川
有想试试京东的找我吧
点赞 回复 分享
发布于 08-10 01:15 北京

相关推荐

不愿透露姓名的神秘牛友
11-26 11:10
思特奇 Java 助理工程师 10*14 本科其他
点赞 评论 收藏
分享
评论
23
150
分享
牛客网
牛客企业服务