Java后端开发
头条
一面:
1、RPC
远程过程调用(应用层的协议,基于TCP)
发起请求->将参数和方法名序列化->网络传输->反序列化->服务端调用相应的方法
服务端序列化->网络传输->反序列化->客户端获取结果
2、Http1.0、Http1.1、Https、Http2.0
Http1.0:超文本协议1.0没啥特点
Http1.1:支持长连接,默认Connecttion方式为KeepLive
Http2.0:支持多路复用,头部压缩、二进制帧
Https:非对称加密+对称加密
3、Http在IOS5层中的过程
1)通过DNS进行域名解析。应用层协议,基于UDP。
2)获取目的主机Ip后,三次握手建立TCP连接。
3)发送Http请求,在传输层被分割成报文段
4)在网络层将段分割成IP数据包。
5)在数据链路层分割成帧
5)两层路由或者三层转发
6)服务端接受到
4、G1回收的原理
G1是一个分代的,增量的,并行与并发的标记-复制垃圾回收器。统计
分块:分成一个一个region,以region作为内存回收的基本单位。
分代
年轻代:复制
Remember Set的写屏障
写屏障是指,在改变特定内存的值(实际上也就是写入内存)的时候额外执行的一些动作
5、页的调度算法
6、Redis、Spark(没了解过)
7、实现两个有序数组的合并
二面:
1、线程和进程的区别
2、同一个进程中,线程哪些资源是共享的
3、TCP四次挥手,以及对应的状态
4、对1-m个数字字典序排序(String排序),求第n小的数。
菜鸟驿站:
1、spring容器的初始化过程
2、bean的初始化过程
3、为什么要有并发
4、了解哪些锁(Sychonized、ReentrantLock)
5、可重入锁,原理
6、实现同步的集合
7、ConcurrentHashMap的原理
8、了解分布式吗,redis的基本数据底层实现
9、分布式锁的实现
10、类的加载机制
11、为什么要用双亲委派
腾讯
一面
1、自我介绍
2、项目介绍
3、JVM虚拟机的GC机制
4、你的项目中用到的垃圾回收器
5、G1回收器的工作原理
6、知道哪些并发集合
ConcurrentHashMap、CopyOnWriteArrayList、ConcurrentLinkedQueue
7、若需要开发一个高并发的项目,你会怎么做
8、spring和springboot的区别
springboot是在spring框架上搭建的,简化了在Web开发上对spring的复杂的配置,由springboot帮你把所有的依赖和相应的版本关联好。
spring钢筋水泥土搭好的地基,springboot相当于帮你建好房屋结构,只需要对房子进行装修就行。
9、用到了哪些dao层框架 hibernate mybaties
dao层框架的优点:解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试.
mybaties轻量级的dao层框架,封装了JDBC实现查询分析;将实现了对应Mapper接口的类,从XML中用工厂模式生成。
mybaties的原理,反射。
10、如何进行消息推送,异步队列
消费者生产者
11、arp协议
地址解析协议,在一个子网内,
12、ip数据包如何在两个子网间传递。
13、有什么想问的问题吗
腾讯二面
1、项目及项目中遇到的问题
2、如果是高并发项目,有哪些地方可以作优化(我只答出了Redis,从数据库层面;搭建多台服务器,实现读写分离)
3、Redis和Mysql的区别
4、Redis和Mysql的底层数据模型
5、Redis和Mysql的优缺点。
6、什么专业
7、Springboot的是用来干什么的
8、springboot的原理
9、对于从事的方向有什么考虑的(后台开发、分布式)
10、分布式是怎么理解的
阿里 CBU一面
1、自我介绍、项目介绍
2、是否有用到消息队列
3、项目中遇到的困难
4、如何解决多台服务器下Session同步?
一、Session Replication 方式管理 (即session复制)
简介:将一台机器上的Session数据广播复制到集群中其余机器上
使用场景:机器较少,网络流量较小
优点:实现简单、配置较少、当网络中有机器Down掉时不影响用户访问
缺点:广播式复制到其余机器有一定廷时,带来一定网络开销
二、Session Sticky 方式管理
简介:即粘性Session、当用户访问集群中某台机器后,强制指定后续所有请求均落到此机器上
使用场景:机器数适中、对稳定性要求不是非常苛刻
优点:实现简单、配置方便、没有额外网络开销
缺点:网络中有机器Down掉时、用户Session会丢失、容易造成单点故障
三、缓存集中式管理
简介:将Session存入分布式缓存集群中的某台机器上,当用户访问不同节点时先从缓存中拿Session信息
使用场景:集群中机器数多、网络环境复杂
优点:可靠性好
缺点:实现复杂、稳定性依赖于缓存的稳定性、Session信息放入缓存时要有合理的策略写入
5、线程池的原理
为什么要用线程池?
1、为了减少创建和销毁线程的次数,让每个线程可以多次使用
2、可根据系统情况调整执行的线程数量,防止消耗过多内存
原理:
corePoolSize:核心池的大小;当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中;
maximumPoolSize:线程池最大线程数;它表示在线程池中最多能创建多少个线程;
keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止。默认情况下,只有当线程池中的线程数大于corePoolSize时,keepAliveTime才会起作用,直到线程池中的线程数不大于corePoolSize,即当线程池中的线程数大于corePoolSize时,如果一个线程空闲的时间达到keepAliveTime,则会终止,直到线程池中的线程数不超过corePoolSize。但是如果调用了allowCoreThreadTimeOut(boolean)方法,在线程池中的线程数不大于corePoolSize时,keepAliveTime参数也会起作用,直到线程池中的线程数为0;
unit:参数keepAliveTime的时间单位
workQueue:一个阻塞队列,用来存储等待执行的任务,这个参数的选择也很重要,会对线程池的运行过程产生重大影响,一般来说,这里的阻塞队列有以下几种选择:
threadFactory:线程工厂,主要用来创建线程;
handler:表示当拒绝处理任务时的策略
6、同步的方式
Sychronized、Lock、volatile、ThreadLocal
7、sychronized和Lock的区别
8、怎么写一个线程
通过继承Thread子类,重写其run方法;
实现Runnable接口,实现run方法,作为Thread的参数传入。
实现Callable接口,实现call方法;作为Future构造函数参数传入,通过Future(阻塞)来接收传入的参数。
9、Callable和Runnable有什么区别
10、迪杰斯特拉
腾讯三面:
1、项目、项目遇到的问题
2、一个报文到网卡是怎么封装的
网卡接收数据包
正常情况:
- 网线上的物理帧首先被网卡芯片获取,网卡芯片会检查物理帧的CRC,保证完整性。
- 其次,网卡芯片将物理帧头去掉,得到MAC包。
- 网卡芯片检查MAC包内的目的MAC地址信息,和本网卡的MAC地址是否一致?不一致,抛弃。
- 网卡芯片将MAC帧拷贝到网卡内部的缓冲区,触发中断。
- 驱动程序通过中断,将MAC包拷贝到系统中,构建sk_buff。告诉上层。
- 上层去掉MAC包头,得到需要的IP包。
3、hash表的实现
4、ARP 二层z转发 路由三层转发
http://blog.chinaunix.net/uid-26226893-id-2482301.html
https://blog.csdn.net/yushengjian/article/details/50625825?utm_source=blogkpcl1
5、PCIE
6、软中断、硬中断
7、具体问的啥我也记不到了。大概就是计算器的缓存
8、迪杰斯特拉
七牛云:
一面:
1、项目简介
2、Http协议有哪一些方法
get、post、put、delete、header、options
3、get和post请求的区别
get | post |
---|---|
将请求参数放在url中 | 将请求参数放在request body中 |
由于部分浏览器对url长度有限,所有参数的个数有限 | 参数个数无限制 |
url会被缓存在浏览器中,不安全 | 较为安全 |
4、http方法的过程
1)DNS域名解析
2)三次握手建立TCP连接
3)客户端发起Http请求
4)服务器响应,返回Response
5)浏览器解析html
6)加载html中的资源,显示
7)断开Http、Tcp连接
5、http头部的格式
Request:
方法 资源路径 http协议版本号
Host:
用户代理:
Content type:
Connect:
6、http的状态码
2XX:成功
3XX:重定向
4XX:客户端错误
404:not found
403:forbiden
400:语法错误
5XX:服务端错误
7、项目中如何保存用户状态
使用Token
8、Token如何生成
用户密码+salt(随机生成) 进行sha256加密,防止彩虹表。
9、Token和user的数据库的结构
10、写一句token查询user的sql语句
11、[5,6,7,1,2,3,4]对于该种数组的二分搜索
七牛云二面:
1、自我介绍
2、选择排序和插入排序的比较
3、当一个数组为随机的时候,选择哪一种排序方式
4、当一个数组为逆序的时候,选用哪一种排序方式
5、写选择排序的伪代码
6、一群小朋友需要Ni大小的糖块n块,有Mj大小的糖块m块,尽可能的满足小朋友的需求(使得Ni<=Mj),该如何设计。
7、有N(数量极大)个字符串,有M(数量极大)个关键字,需要找到字符串中的所有关键字,并且替换成"*"。
时间复杂度:O(Sum(length(Ni)) *Sum(length(Mi)) ) 优化成 O(Sum(length(Ni))+Sum(length(Mi)) )
8、还有优化方式吗?
腾讯正式批 一面
1、CurrentHashMap和HashMap的区别
2、CurrentHashMap的原理
3、找到数组中数量超过1/2的数,1/n的数
4、输入一个数组,输出一个数组,是输出的数组为输入数组的随机排列。