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