程序员面试六战六捷之我的面试心得

一般面试官都会让你自我介绍,我觉得自我介绍主要是有两个作用第一个是给面试官留出时间来看你的简历,他好想一下问你什么问题比较好第二个就是面试官想听一下你的表达是否存在问题一般而言建议自我介绍最好提前写好,先过几遍,让脑袋里面有一个大概。时间就控制在三分钟左右就好了,太长背不了,太短面试官简历没看完。附上我常用的自我介绍给大家参考你好,我叫张三,先后呆过X家公司,已经有X年的Java开发经验,第一家公司是XXXXX,主要是做XXXX,我主要负责XXXX。第二家公司是做什么什么的,我主要负责什么,在最近做的一个项目里面,取得了某某成果.....当然上面的内容肯定不够三分钟,所以请大家根据自己的实际情况进行适当扩充
八股文

这些问题呢,一般都是有迹可循,网上分享的面经也是一大堆,我主要是想和大家分享一些我印象比较深刻的八股文的题的思路。

讲讲ThreadLocal

我一听这个开场感觉就很稳,之前有写过ThreadLocal相关的内容。我直接一把梭,面试官久久无言。首先讲下ThreadLocal底层数据结构,然后延伸到用法,由于子线程无法获取到父线程ThreadLocal的值,所以延伸到了 InheritableThreadLocal。又因为在使用线程池的时候InheritableThreadLocal并不能解决获取父线程值的问题,因为线程池中的线程是复用的,可能在子线程中对值进行了修改,使子线程获取到的值并不正确。我又给引申到了 alibaba TransmittableThreadLocal,再顺便讲下它的原理。最后讲下ThreadLocal可能会出现内存泄漏需要注意,又把怎么排查内存泄漏的方法讲了下。讲完这些,面试官一般都不会再继续问了,因为我把他想说的都说了。

如果让你设计一个线程池,你怎么设计?

这其实就是说线程池的,只需要把线程池的核心原理讲下就行了。先说线程池主要是通过ThreadPoolExecutor来创建的,再说下几个参数的作用,网上分析线程池的文章一大堆,面试的时候可不是写文章,一定要在有限时间说重点。比如重点说下原理,主要是几个参数的作用,阻塞队列一定要用有界队列,拒绝策略有几个,默认的行为是什么,再讲讲特殊的策略CallerRunsPolicy(如果线程池未关闭,则交给调用线程池的线程执行)最后还可以引申讲下Tomcat的线程池优先扩容到最大线程数,来不及处理的多余任务才会放入到队列中。最后收个题,如果你设计,线程池的参数允许动态调整,线程池是提供了参数进行设置的。

讲讲redis分布式锁

就要讲下setNX这个命令,然后说下有什么问题(比如业务未执行完成锁就释放了,或者释放锁的不是同一个线程等等问题),然后引申到redLock,再引申到 redission实现的分布式锁,重点讲下说下setnx+lua以及watchDog然后还可以引申到 zookeeper实现分布式锁,说下有序节点,临时节点,事件监听等,一般是使用开源客户端curator的实现。最后再比较下两者区别,比如
  1. redis获取不到锁会一直不断尝试获取,比较消耗性能
  2. redis数据并不是强一致性,极端情况下可能会出现问题,redlock也无法完全保证
  3. zk设计定位就是强一致性,锁模型健壮,适合做分布式锁
  4. zk获取不到锁,只需要添加监听器就行了,不用一直轮训
zk也有缺点,就是较多客户端频繁申请加锁,释放锁,对于zk集群的压力会比较大。

time_wait过多怎么办?

从四次挥手到怎么产生time_wait,再到多了会怎样?怎么解决。这就是一个顺序链条。TCP连接处在 TIME_WAIT 状态,这个是TCP协议规定的,四次挥手时主动关闭方所处的 一个状态,会等待2个MSL(MSL=2分钟),所以在这个时间段内不会释放端口,如果并发量大的话,会导致端口不够用,从而影响新的TCP连接。我们可以通过设置对应的系统参数(reuse_buckts,好像叫这个,参数为什么不写全?我写了也记不住,干脆只需要知道有参数可以控制就行了),重用这些连接。

tomcat调优怎么做?

可以从I/O模型,JVM内存,线程池以及网络优化四个方面答。如果tomcat跑到windows上可以考虑使用NIO2,因为从操作系统层面实现了真正的异步IO,如果是在Linux服务器上,就还是建议使用NIO,因为JVM是在应用层面通过epoll实现的异步IO。JVM内存就涉及到jvm内存模型(不是JMM),然后针对年轻代,老年代,metaspace等分别进行说明,以及一些配置的参数,垃圾回收器等。网络优化的话可以从tcp的半连接队列和accept队列说起。半连接队列:保存 SYN_RECV 状态的连接。队列长度由net.ipv4.tcp_max_syn_backlog设置 accept 队列:保存 ESTABLISHED 状态的连接。队列长度为min(net.core.somaxconn,backlog)。其中 backlog 是我们创建 ServerSocket 时指定的参数,最终会传递给 listen 方法。backlog在tomcat中对应的是acceptCount的值。acceptCount默认值是 100,net.core.somaxconn的默认值是 128。你可以想象在高并发情况下当 Tomcat 来不及处理新的连接时,这些连接都被堆积在 accept 队列中,而acceptCount参数可以控制 accept 队列的长度,超过这个长度时,内核会向客户端发送RST,这样客户端会触发“Connection reset”异常所以配置tomcat的时候我们需要考虑这两个参数的值

kafka exactly once如何保证?

at least once + 幂等 = exactly once,kafka可以保证at least onceProducer 的幂等性指的是当发送同一条消息时,富贵论坛数据在 Server 端只会被持久化一次,数据不丟不重,不过这里是有条件
  1. 只能保证 Producer 在单个会话内不丟不重
  2. 幂等性不能跨多个 Topic-Partition,只能保证单个 partition 内的幂等性,当涉及多个 Topic-Partition 时,这中间的状态并没有同步。配置 enable.idempotence 设置为 true
Producer 幂等性的实现原理,Kafka Producer 在实现时有以下两个重要机制:
  1. PID(Producer ID),用来标识每个 producer client
  2. sequence numbers,client 发送的每条消息都会带相应的 sequence number,Server 端就是根据这个值来判断数据是否重复
同时producer 在设置幂等性时,要求 MAX_IN_FLIGHT_REQUESTS_PER_CONNECTION 小于等于 5, 因为 server 端只会缓存最近 5 个 batch。如果想要保证多个partition,则需要事务

mysql索引优化要注意哪些点?

先从mysql B+树结构(页)说起,然后讲讲注意点。比如
  1. 不要超过三张表join
  2. join的时候小表驱动大表
  3. 尽量走主键索引,避免回表
  4. 为区分度大的列建立索引
  5. 最左匹配原则,like 'xx%'
  6. 查询需要的列,而不是所有列,不要使用计算,函数等
  7. explain ..............

Synchronized和ReentrantLock有什么不一样

先说原理,再比较异同点。Synchronized从偏向锁 ---> 轻量级锁 ---> 重量级锁  ---> CLH队列  ---> pthreadReentrantLock ---> 用法  ---> 原理(AQS)  ---> UnSafe.park ---> pthread还可以引申下AQS下的其他并发工具类感兴趣的可以去看下我写的并发编程系列。

SpringBean如何解决循环依赖?

我知道你要说三级缓存,说之前最好看下源码形成自己的思想,光背是背不住的。然后面试官会问你只要两级行不行?如果你说不行,那面试到这里就结束了。如果你说行,就好好想想问什么需要三级呢?(代理)

项目

  1. qps多少?

  2. 线上遇到过让你觉得最有难度的问题?

  3. 如果你负责的项目流量陡增10倍怎么办?

  4. 你这个项目的亮点在哪里?

文字越少,问题越大。说实话这些开放性问题问得比重是远比八股文大的,因为八股文网上一大堆,但是这些项目上相关的,每个人都是独一无二的。所以平常的时候要多思考这类问题,多总结。以上就是常常被问最有代表性的问题,希望对大家有帮助。

回答不上来怎么办?

你觉得躺平怎么样?有些问题回答不上来很正常,大家理解可能不一样,而且就算回答上来了,说不定也不是面试官想要的。遇到不清楚意思的,多问问。实在不会的就回答不会好了,或者跟面试官讲讲你的思路也行,把这场面试当成一场技术交流,心态会好很多。面试之前最好把一些常问的,做到心中有数。

要自信呀

只要够自信,面试就成功了50%。最后,看到这儿了,我的自信值得你点个赞吗?(手动狗头)
全部评论
楼主强,感觉这种面试节奏的把握和把知识连成串的无线拓展是最舒服的
1 回复 分享
发布于 2021-11-04 22:11
去哪儿了?
点赞 回复 分享
发布于 2021-11-04 16:59
这个深度不得阿里巴巴啊
点赞 回复 分享
发布于 2021-11-09 19:25

相关推荐

牛客410815733号:这是什么电影查看图片
点赞 评论 收藏
分享
10-07 20:48
门头沟学院 Java
不敢追175女神:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
评论
18
67
分享
正在热议
# 25届秋招总结 #
439972次浏览 4484人参与
# 春招别灰心,我们一人来一句鼓励 #
41352次浏览 523人参与
# 阿里云管培生offer #
119610次浏览 2219人参与
# 地方国企笔面经互助 #
7908次浏览 18人参与
# 虾皮求职进展汇总 #
113497次浏览 880人参与
# 实习,投递多份简历没人回复怎么办 #
2453683次浏览 34846人参与
# 北方华创开奖 #
107228次浏览 598人参与
# 实习必须要去大厂吗? #
55552次浏览 959人参与
# 同bg的你秋招战况如何? #
75178次浏览 548人参与
# 提前批简历挂麻了怎么办 #
149763次浏览 1976人参与
# 投递实习岗位前的准备 #
1195578次浏览 18546人参与
# 你投递的公司有几家约面了? #
33165次浏览 188人参与
# 双非本科求职如何逆袭 #
661770次浏览 7394人参与
# 机械人春招想让哪家公司来捞你? #
157585次浏览 2267人参与
# 如果公司给你放一天假,你会怎么度过? #
4714次浏览 53人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11214次浏览 253人参与
# 发工资后,你做的第一件事是什么 #
12359次浏览 61人参与
# 工作中,努力重要还是选择重要? #
35521次浏览 384人参与
# 参加完秋招的机械人,还参加春招吗? #
20068次浏览 240人参与
# 实习想申请秋招offer,能不能argue薪资 #
39205次浏览 314人参与
# 我的上岸简历长这样 #
451863次浏览 8087人参与
# 非技术岗是怎么找实习的 #
155831次浏览 2120人参与
牛客网
牛客企业服务