简历
新人奖要写进去?
简历声明单身?单身可以搬砖更卖力(狗头)
尽量重新换张好看点的清晰照片
工作项目经验
公司项目和Kiwi词典主要应用了Spring Cloud Netflix
技能树
Spring Cloud
了解JVM
数据结构
基础算法
要把王道考研的其他基础算法学完
不要只是一下子罗列出所有技术栈的名字,要附带对应熟悉的技术栈深入的技术分支
技术类
Java
多线程高并发
马士兵50道面试多线程题
JVM
故障排查/性能分析
分析JVM堆转储快照文件(hprof文件)
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/export/Domains/rcsv-fm.wd.local/server1/logs
Eclipse Memory Analyzer 分析hprof文件
77道JVM系列面试题总结
底层原理
64位虚拟机的指针压缩是什么?为什么要指针压缩?
对齐填充(Padding)
-XX:+UseCompressedOops
基础
静态变量final和不final的区别?
有final修饰的情况下,其对象值必须在声明的时候初始化且不可在编译期或运行期被修改
在类加载阶段,读取或设置一个类型的静态字段(没被final修饰)需要先触发其初始化阶段,如果是已经被final修饰的对象,其类加载初始化阶段是在虚拟机加载final字段所在类的时候出发
使用final关键字修饰变量就可以保证它是不可变的
微服务
Ribbon或者Nacos负载均衡有多少种实现机制?
轮询调用
架构
垂直拆分和微服务分布式拆分的区别?
最重要的区别是垂直式拆分的各个子系统之间没有交互,都是直接与数据库交互,而微服务分布式的各个子系统时刻错终复杂地进行各种业务交互,解耦和扩展相对来说都比较便捷和清晰明了
注册中心
注册中心的作用是什么?
Eureka VS Nacos
eureka对要新注册进来的微服务感知比较慢,一个服务启动完有可能要等上几十秒才能被发现。
注册中心的实现机制
Spring
Spring系列面试题129道
Baeldung的Spring系列文章
Springboot
SpringBoot自动装配原理
官方文档大概一遍
Springcloud
Springcloud用来做什么的?
Mysql
我自己总结的博文
Mysql系列之基础知识
Mysql系列之性能优化与问题定位
存储引擎
MyISAM
不支持事务,但是每次查询都是原子性的,适合做报表,或者一些只有查询操作的数据库
InnoDB
Mysql默认
锁机制
表级锁
行级锁
页面锁
Redis
Redis的11道面试题
Netty
消息队列
生产者
消费者
Elasticsearch
研究完明博的es代码套路
Flowable
研究下邹耀天流程的代码
设计模式
网络基础
协议
TCP
三次握手
UDP
HTTP
短链接
无状态
应用层协议,基于传输层的TCP协议
Socket
长链接
基于对TCP/IP的封装
Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开
HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
算法
IO/NIO(Input/Output)(New IO)
内存
操作系统内核(Kernel)
GDT
保护模式
Syscall(系统调用)
暴露一系列接口操作硬件
中断
软中断(用户程序的调用)
硬中断(鼠标、键盘操作的调用)
用户程序
QQ、WeChat等
Tomcat、Java等
内核内存空间,可以与硬件直接交互
用户程序内存空间,不可与硬件直接交互
CPU
指令集
Range0~3(级别)
内核是作用在指令集Range0级别上面的
用户程序间接使用的指令集是在Range3级别
命令
strace(跟踪系统调用)
-ff 抓取所有的线程
如果某个Java程序占用资源异常的多,也可以使用该命令快速简易地查看是否发生过多线程的创建
跟踪过程
jps
cd /proc/xxxx
task目录
列出xxxx的jdk进程里面的所有的线程
fd目录
任何一个程序至少有三个IO
标准输入0
标准输出1
错误输出2
同样可以用来跟踪Nginx、Redis等
BIO
早期的IO方式,阻塞IO
弊端
每个客户端请求发生一系列系统调用
创建的线程太多,每个线程都要通过系统调用clone,系统调用太多,资源消耗太多
CPU在进程或线程之间来回切换时间成本抬高
O(n)复杂度
NIO
相较BIO的改进之处
所有请求进来的客户端只汇总发生一遍系统调用
弊端
每次要传递给n个请求的所有数据给内核,内核在其内部要一下子去循环处理n个”数据包“,数据太多
内核要主动遍历拿到所有IO请求的返回结果,再交给用户程序去同步读取
弊端的改进方法
内核开闭一个空间,用来接收传递的请求数据,减少每次传递的过程
基于网卡到内存的事件驱动,准备一个内存空间,专门存放可读可写的IO返回结果供程序统一获取去同步读写
epoll更充分发挥硬件资源,尽量不浪费CPU资源
O(m)复杂度
select(fds)
Combos
COW(写时复制/Copy-on-write)
遇到问题一般都是怎么解决的?
询问做过的系统中的QTS、TPS能达到多少的问题
可以拿我自己用Apache的Jmeter服务压力请求测试
平常经常看哪些编程的资讯、技术学习的渠道
v2ex
Spring官网
spring.io
Spring的blog
leetcode
Java
How2J
Baeldung
Spring官网
spring.io
Spring的blog
v2ex
Algorithm
leetcode-cn
tool
alfred
web search
runoob
dockerhub
gh
jce
mvn
sof
baeldung
软件测试
服务请求压力测试
使用Apache的Jmeter开了多个现场循环多次去调用查单词的接口
全栈开发
前端技术
Vue以及其生态
各种UI组件、图标库、请求组件和前端好用便捷的组件
非技术类问题
为什么要做Kiwi词典?
最开始是想可以收藏单个没有记住的让人容易忽略的释义
后来萌生了用语音复习的idea,这样子可以最大限度利用每天的时间
再后来考虑到遗忘曲线的问题,功能采用多重复习来设计
也考虑到市面上各种汉英模式的单词查询失真问题
可以有一个新技术肆无忌惮应用练习的开发环境和业务场景
上一家公司为什么要辞职?
怎么看待自己的学历?
如果出现多个面试都在等待结果,其中较差的一个给了offer,较好的还需要等待此时要怎么办?
两段自我介绍,中文和英文都要
问个人爱好怎么回答?
与工作相关的
与生活相关的
自我介绍
模板
中文
英文
要注意的地方
对镜子练习20遍以上(录音之后自己反复听,矫正不足的地方)
可以适当表现出热情的态度
简历内容一定和你口头表达一致
避坑
一定要诚实、说妥当的内心话,不可信口雌黄
技术面试、IT公司选择要注意的误区
怎么分辨岗位是不是外包的?
其他
先有相对来说简单的小公司预热一下
面试前可以把Kiwi的自动复习模式准备好,可以当场快速演示
面试期间回答问题的口头禅
”大概是这样子、这样子“
用这个来结束自我介绍、面试官或HR的问题,以告知对方问题我已经回答完毕了,该你发言了
遇到完全不懂的就不要不懂装懂,直接了当告知面试官不清楚,暗示他可以下一个问题了
”这个我不清楚,这一点以前没有研究过“
”这个我不清楚,这一点以前没有遇到过“