分享
首先分享一份学习大纲,内容较多,涵盖了互联网行业所有的流行以及核心技术,以截图形式分享:
(亿级流量性能调优实战+一线大厂分布式实战+架构师筑基必备技能+设计思想开源框架解读+性能直线提升架构技术+高效存储让项目性能起飞+分布式扩展到微服务架构…实在是太多了)
其次分享一些技术知识,以截图形式分享一部分:
Tomcat架构解析:
算法训练+高分宝典:
Spring Cloud+Docker微服务实战:
最后分享一波面试资料:
切莫死记硬背,小心面试官直接让你出门右拐
1000道互联网Java面试题:
Java高级架构面试知识整理:
10、TCP粘包怎么解决。
11、设计线程池。
12、Golang defer语句调用顺序。
13、TIME_WAIT状态有啥用。
14、画出四次挥手原理图。
15、define和inline区别。
16、定义常量指针和指针常量。
17、accept是在三次握手哪一次。
18、backlog作用。
腾讯第四面
拿着手机看我的博客里有一篇介绍memcpy的标准库函数,让我优化。当时觉得,标准库里的函数咋优化,能优化标准库自己不就优化了,哪轮到我优化???但人家让优化,肯定有优化空间,硬着头皮上。对,就是下面这个函数,看了将近一分钟,咋看都觉得这个函数很完美。觉得一个一个复制已经很好了,还能咋办。问了下,能否给点提示,答曰,不急,慢慢来。又想了一会儿,还是没啥思路,这时候,总监来了一句,“你不觉得一个一个复制有点慢吗”。
到了这时候,还是没啥反应,不过既然嫌弃一个一个慢,那两个两个复制可以么?问了下两个两个复制算不算优化,答曰:算。于是想到使用一个short类型复制。后来总监看我有点思路,就提示我说,从汇编角度来优化,包括寄存器大小等等。
然后,我使用long long类型来复制,即每次8个。手写了实现,然后总监问我,如果地址不对齐咋办?到这一步,当时没想到地址对齐这个问题,没有答上来,后来想了下,即使没对齐,可以先一个一个复制等对齐了再每次复制8个。
当时对齐问题没啥思路就pass了。感觉面试官水平很高,这道问题的水准也很高。关于优化以及编译的问题,事后查了相关资料,这里推荐两本书:《深入理解计算机系统》、《程序员的自我修养—链接、装载与库》。对于优化的原理、编译器原理讲解的非常好。
void *memmove (void *dest, const void *src, size_t len)
{
char *d = dest;
const char *s = src;
if (d < s)
while (len–)
*d++ = *s++;
else
{
char *lasts = s + (len-1);
char *lastd = d + (len-1);
while (len–)
*lastd-- = *lasts–;
}
return dest;
}
继续做题。
N个M长度数组求交集,求最优解并给出时间复杂度和空间复杂度。我给出的方案是归并、去重、全排序。然后问了下为啥用归并排序,于是介绍快排、归并、堆排各自优缺点和使用场景。然后问有没有更好的解法。想了下,给出了优化方案,仍然是归并,去重,然后hash。然后过。
第三题,c++手写单例模式,《剑指offer》第二题。
因为简历上有些会shell开发,然后给出第四题:
给定一个日志文件,每行包括日期,IP地址,错误码。然后让我使用shell搜索指定日期,指定IP,指定错误的日志出现次数。简单题,grep -rns “date + IP + error” | wc -l
看我的答案之后,在这个题目加了下扩展,除了前述三个内容,还有第四列content,每一行都不一样。马上给了答案:
awk -F"|" “print112 $3” | grep -rns “date + IP + error” | wc -l
应该是考察我awk的使用。这里提醒各位同学,自称会shell开发一定要掌握awk和sed的使用。基本上,面试官看到自称会shell必考。
整个面试流程持续四个小时。出门已是18点
腾讯第五面
距离三面和四面隔了7天,期间没有任何消息,以为凉了。结果来了电话,约复试。
复试的内容没有特殊之处,依旧是基础。内容如下:
1、介绍前公司产品的功能、市场竞争力、自己负责的部分、产品的软件架构
简要介绍下前公司的产品、功能、市场竞争力,虽然咱是搞技术的,但是关于产品市场的事情,平常工作中还是多多少少有所关注。此外,就是介绍产品的软件架构图,以及自己负责的模块等等。很多同学遇到类似的问题,会说,自己只负责一个部分,不知道产品的整体架构。这样回答,往往给人的感觉就是很水,搞技术的,不会可以,但是不会可以学啊,虽然,整体架构没涉及过,但是,没吃过猪肉不能没见过猪跑。做了那么久,产品啥架构还不了解,这就有点说不过去了。所以,建议各位同学平常工作过程中,有空的话也从整体的角度思考下产品,万一哪天需要自己搞呢。
2、路由NAT如何实现
这一块没有接触过。画了一个映射图,大概描述了一下。
3、考察结构体字节对齐问题
4、概率题,两个红球一个白球,三个盒子。问第二个盒子至少一个红球的概率
考察概率论。刚开始拿到题,以为需要算法。想了一会儿没啥好方法,略显尴尬的说,使用枚举吧。所谓暴力法。画了一个多叉树的图,一目了然。事后想来,枚举才是最简单的方法。
5、编程题,字符串去空格
6、进程、线程区别。为什么有了多线程还是用多进程
基本的操作系统原理题。后面的问题只说了进程地址空间有限,不能创建任意多的线程。回来想了下,更好的回答应该是,进程是一个程序实体,多个程序需要多个进程。此外,进程地址空间相互隔离,安全。
7、平时如何定位问题,core dump怎么产生的
通常线上问题先复现、再定位。core dump怎么产生不知道。后来查了下,当程序有未处理的信号时,内核会自动生成core dump。能否生成core dump还有ulimit -c的限制。
8、构造函数调用虚函数可不可以
不可以。说了下虚函数的作用以及构造函数的调用顺序。后面又问,如果调用会出现啥情况。因为不确定所以说不知道。回来测试了下,是调用被调对象的自己的版本。
9、算法题:给定电话号码加区号,如何快速查找对应地区
区号占4位。给了长度10000的数组做hash,O(1)。问有没有办法提高空间利用率,没想到。想到的同学告诉我。然后给了红黑树存储,时间复杂度O(logN)太高。
10、常用的IDE
C语言使用source insight,Golang使用liteide。
11、线程调度问题
这里解释了下两种调度类以及它们的调度策略,然后是底层的实现原理,后来问调度过程的具体步骤,我记得内核的调度函数是schedule(),具体的操作没有分析过,这里只说了大概,保存寄存器、上下文,然后加载被调进程的上下文、寄存器等等。
12、不同编译器编译的库能否混用
没用过,不知道。后来查了下,不同版本的编译器编译出来库不能混用,不过网上的回答也没有解释清楚。觉得可能在问extern "C"问题。
13、离职原因,离职这么久都干嘛去了
14、阅读源码有啥好处?对以前的项目有没有啥改进之处?
15、有什么问题想问的
问了下直播业务涉及的终端以及后台开发过程中使用到哪些中间件技术。然后,问了下腾讯的服务器内核啥样子,回答说是定制的T-Linux内核。
整体感觉面试愉快,面试官也在考察知识深度,不会的也没关系。
腾讯第六面
距离复试三天时间,中午电话。
1、为什么学些德语
2、第一份工作学习到啥
3、对腾讯怎么看
4、期望薪资以及依据
5、当前薪资、福利
6、以前是通信的,对互联网怎么看
7、部门业务量很多,可能需要加班,你怎么看
8、有什么问题想问的
两天后,给了offer。腾讯的面试流程大体这样,技术面考察的都是基础,要有深度,不能停留在表面。自己前前后后准备了四个月,从第一次的惨败到后期的从容面对,一步步走下来,收获满满,最终得到想要的结果
阿里后台面试
======
阿里一面(电话面试一小时)
首先做一个简单的自我介绍,主要包括学校经历和工作经历。我工作经历只有一年,大部分时间都是在做产品设计和UI/UX Design,因此隔着电话都能感受到面试官的shock。
-
Java基础。自动拆装箱如何实现,String,StringBuffer,StringBuilder的异同以及各自的实现。
-
JVM基础。JVM的内存模型,常见的垃圾回收算法。
-
事务ACID,编程时如何保证事务,分布式情况下如何保证事务。
-
由于分布式相关场景我没有接触过,因此面试官一直诱导我去设计实现一个分布式事务。
-
数据库乐观锁和悲观锁。如何实现一个乐观锁。
-
消息队列使用场景,Kafka的架构以及原理。
-
什么是restful api,和rpc调用有什么区别。
-
单例的几种写法。volatile关键字有什么作用。
以上就是电话面试的大体问题,面试完之后,又发给我三道算法题目,要求我一小时内完成,下面是三道算法题:
-
翻转一个long类型数字。例如输入123456L,输出654321L。- Leetcode翻转integer的变种。考察能否正确处理溢出的情况。
-
输入一个double,要求返回与它最接近的.49或.99的数字。例如12.77返回12.99,11.02返回10.99,12.61返回12.49。
-
有三个线程ABC分别向一个数组中写入a,l,i,要求最终的写入结果形如alialiali…写入次数由A线程决定。
这三道题目做的还比较顺利,第二天面试官又联系我阐述一下第一题和第三题的思路,然后通知我可以参加下一轮了。
二面(电话面试一小时)
二面主要考察了一些开放式的问题。
-
首先还是自我介绍。主要是工作后的经历。介绍一下工作一年所在team的产品,我承担了什么职责。
-
开放式问题。如何设计一个rpc框架。
-
开放式问题。如何设计一个服务注册中心。
-
集合类源码。HashMap是如何实现的,扩容的过程,为什么要扩容为2倍。HashMap中的链表替换为数组可以吗?时间复杂度相同吗?
-
集合类源码。线程安全的HashMap是什么?(HashTable和ConcurrentHashMap)ConcurrentHashMap是如何实现的?(Java7分段锁和Java8的CAS+Lock)和HashTable相比有什么优势?
-
红黑树的结构,时间复杂度是多少,如何计算的
-
什么是CAS操作,如何实现一个自定义锁
-
数据库设计。有一张很大的order表,如何设计能够提升查询效率(同时满足根据买家id和卖家id查询)?
二面也同样是一小时左右,面试过程还算顺利。只是当时我在厦门鼓浪屿的一家小餐馆吃晚饭,周围的嘈杂和闷热使我很烦躁,感觉面试官态度有些傲慢……ps.一面二面结束后面试官都各种暗示我要疯狂加班能不能接受blabla……
三面(电话面试一个半小时)
二面结束后的第三天,就收到了现场三面的通知。然而我还在厦门旅行,因此改为了电话面试。
三面是一个大Boss,因此面试的问题都更考察一些分析问题的能力。
-
介绍一下你工作一年学习到什么?所在项目的架构是什么样的?UI/UX设计有哪些规范(由于我说我学到了一些UI/UX设计方法,因此面试官就问了)?
-
数据隔离级别,脏读幻读。
-
线程池原理。
-
Synchronized的实现,锁的升级过程。
-
K8s的作用,K8s的底层架构。
-
对我业余时间做的一些项目做了介绍。
-
你觉得加入阿里你能给阿里带来什么?
-
进入阿里你需要忍受很多困难,需要迎难而上,如果绩效考评拿到差评,你会怎么办?
三面总的来说也还算顺利,面试官也算和蔼。
总结
–
整个流程从一面到三面结束大约持续了10天左右。总的来说,问题都是预期范围内的,虽然面试过程中问到了一些分布式相关问题,我都没有任何经验,这时候不要放弃,主动说出你的思路,然后在面试官的诱导下,相信你能说出属于的答案。
滴滴java研发
========
滴滴一面
1、自我介绍
2、为什么离职当前平台发展有限,项目进入稳定期,新需求不多,维护为主,对个人发展不利
3、说一下HashMap的数据结构,复杂度这里可以以put方法作为切入点,把put方法分析出来,数据结构和复杂度就自然出来了
4、有没有多线程的使用经历,如何进行的优化讲了项目中的一个多producer多consumer的一个实现,用到了juc包中的countdownlunch,原子类,BlockingQueue等
5、MySQL用过么?讲一下索引的数据结构,怎么分析查询效率讲了innodb复合索引的b+tree模型,最左匹配原则,查询效率的explain分析
6、redis用过么?redis怎么保证查询速度纯内存操作;单线程多路复用模型;HashMap的数据结构
7、用过什么消息队列?为什么用RabbitMQ?应用场景有什么?有没有和其他mq作比较用过RabbitMQ;场景:削峰填谷 异步调用 解耦 扩展性;没用过其他mq
8、遇到过什么线上问题?怎么做排查先看日志报错,死锁的话看dump,jstat分析gc状况,服务器可连接的话可以用visualvm
9、你有什么要问我的问了团队组成,业务方向,我要做什么
最后留了一个算法题::LeetCode 236. 二叉树的最近公共祖先
手撕了一遍,middle难度
滴滴二面
二面面试官先看了下上一轮的代码,简单对了下逻辑,然后开始面试
10、介绍一下项目
11、项目中负责什么
12、项目中做了什么优化讲了下项目中RabbitMQ实现了at least once,包括mq反馈provider,消息持久化,consumer主动反馈mq,线程池消费防止消息积压等
13、讲一下springmvc的原理我没用过springmvc,之前用的ssh,后来就直接SpringCloud加springboot了。这里凭印象答了一下,注册dispatcherServlet,将request按照url分发给不同的controller处理,controller调用service+dao等处理业务,之后response返回
14、看过什么源码?简单说一下看过spring源码,简单说了下spring如何处理循环引用,其实答ioc和aop更好些
15、问了两个java基础,记不清细节了
16、你简历里还写blog?看了下我的blog~
17、有什么要问我的?问了还会不会有下一面,哈哈,面试官也乐了,说会有下一面~
主管面
18、介绍下自己的经历,以及每一次跳槽选择的原因
19、说一下java的几种锁这里我把几种锁的原理,用法和应用场景对比都说了,包括volatile
20、说一下项目中遇到的最大的困难,你是怎么解决的
21、你坚持最久的事情是什么?坚持了多久
22、你的朋友怎么评价你?讲真这个真的毫无准备,完全临场说了一通
主管面的确比较偏向价值观,方法论等等,给人的感觉就是通过几个问题就能摸出来你的性格,技能等等…
hr面
23、为什么想离职?
24、手上有没有其他offer,哪儿?
25、期望,现在的职级
一二面各持续了一个小时左右,主管电面半个小时,hr聊了十几分钟。
整个面试过程就这样~
以上详细面试细节我整理了一篇文档,需要的可以扫码免费领取
这套面试手册的组成内容有以下3大主题,5个主要模块,35个小板块:
互联网一线大厂面试题库(2021年版)
-
BD篇
-
JD篇
-
TX篇
-
TT篇
-
MT篇
-
HW篇
Java核心架构进阶知识点
面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的
内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补
互联网一线大厂面试题库(2021年版)
-
BD篇
-
JD篇
-
TX篇
-
TT篇
-
MT篇
-
HW篇
Java核心架构进阶知识点
面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的
[外链图片转存中…(img-AD96qgKQ-1715119569037)]
[外链图片转存中…(img-JQrq1mQv-1715119569038)]
[外链图片转存中…(img-VbiMUfYu-1715119569038)]
内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补