由于小孩去北京看病,所以想在北京面试找个工作可以陪在家人身边,从五一结束后总的面试了有一个多星期20左右家企业吧,现在整理一下面经:
2021年5月北京电话面试
bean生命周期:https://blog.csdn.net/wangxiang1292/article/details/102162890
1、实例化一个Bean
2、按照Spring上下文对实例化的Bean进行配置,也就是IOC注入
3、如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String)方法,传递的参数就是Spring配置文件中Bean的id值
4、如果这个Bean已经实现了BeanFactoryAware接口,会调用它实现的setBeanFactory(BeanFactory),传递的是Spring工厂自身
5、如果这个Bean已经实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文
6、如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,
BeanPostProcessor经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用那个的方法,也可以被应用于内存或缓存技术;
7、如果Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法。
8、如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法
9、当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用那个其实现的destroy()方法;
10、最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。
499状态码是干嘛的?# 499状态码
知道异或么?
为什么规则不用决策引擎做
策略模式和模板模式的区别
全局唯一ID怎么做
spring拓展,mybatis流程
什么是GC Root
什么是泄露内存,怎么排查解决
JavaCPU100%怎么排查?
jvm卡表原理,老年代引用新生代怎么办?
什么样的对象进入老年代?
1.根据对象年龄
JVM会给对象增加一个年龄(age)的计数器,对象每“熬过”一次GC,年龄就要+1,待对象到达设置的阈值(默认为15岁为什么是这个值?)就会被移移动到老年代,可通过-XX:MaxTenuringThreshold调整这个阈值。
2.动态年龄判断
根据对象年龄有另外一个策略也会让对象进入老年代,不用等待15次GC之后进入老年代,他的大致规则就是,假如当前放对象的Survivor,一批对象的总大小大于这块Survivor内存的50%,那么大于这批对象年龄的对象,就可以直接进入老年代了。
3.大对象直接进入老年代
如果设置了-XX:PretenureSizeThreshold这个参数(默认多少,为什么?),那么如果你要创建的对象大于这个参数的值,比如分配一个超大的字节数组,此时就直接把这个大对象放入到老年代,不会经过新生代。
这么做就可以避免大对象在新生代,屡次躲过GC,还得把他们来复制来复制去的,最后才进入老年代,这么大的对象来回复制,是很耗费时间的。
jvm垃圾回收器G1与CMS区别
JVM 默认Xss大小
jdk8-13新特性
Redis的rehash
Redis有哪几种数据类型
Redis集群节点间怎么交互
介绍一下哨兵模式
缓存击穿怎么应对
介绍一下netty的reactor线程模型
spring三级缓存解决循环引用
Java匿名内部类单例与双重校验锁的区别
mysql为什么能实现行级锁
如何避免死锁
MySQL MVCC底层原理
MySQL的事务隔离级别,怎么实现的可重复读
es实现模糊搜索的原理(Mapping怎么做)
es,MongoDB和MySQL索引的区别
UML、面向表结构编程与领域驱动设计的区别
fengin的底层实现
设计电梯控制器(设计模式,架构)
docker exec与touch命令
kafka架构
Synchronized底层优化(偏向锁、轻量级锁)
线程池提交任务与执行任务的流程
跨境电商女装cider
tcp三次握手
第一次握手
客户主动(active open)去connect服务器,并且发送SYN 假设序列号为J,
服务器是被动打开(passive open)
第二次握手
服务器在收到SYN后,它会发送一个SYN以及一个ACK(应答)给客户,
ACK的序列号是 J+1表示是给SYN J的应答,新发送的SYN K 序列号是K
第三次握手
客户在收到新SYN K, ACK J+1 后,也回应ACK K+1 以表示收到了,
然后两边就可以开始数据发送数据了
netty
MySQL的数据结构
redolog和udolog区别
b+数和红黑树有什么区别,为什么不用红黑树
mybatis如何管理数据库连接
分布式事务怎么做
如何实现事务注解
事务怎么传播(怎么从A到B)
同一个事务怎么管理两个数据库连接
Zuul和Gateway对比:https://blog.csdn.net/lizz861109/article/details/103575186
旷世
联合索引
分布式锁Redis实现:
加锁实际上就是在redis中,给Key键设置一个值,为避免死锁,并给定一个过期时间。
SET lock_key random_value NX PX 5000
值得注意的是:
random_value 是客户端生成的唯一的字符串。
NX 代表只在键不存在时,才对键进行设置操作。
PX 5000 设置键的过期时间为5000毫秒。
Mongodb与Redis对比
RocketMQ与Kafka对比:https://blog.csdn.net/damacheng/article/details/42846549
线程池创建的四种方法:
newCachedThreadPool创建可缓存线程池、newFixedThreadPool创建定长线程池、newScheduledThreadPool创建定时线程池、newSingleThreadExecutor创建单线程化线程池
线程池参数怎么设置
Java线程安全的集合
一、早期线程安全的集合
几乎所有public方法都加上了synchronized关键字(因为性能原因被弃用):Vector、HashTable(HashTable的K,V都不能是null,但HashMap可以)
二、Collections包装方法
Vector和HashTable被弃用后,它们被ArrayList和HashMap代替,但它们不是线程安全的,所以Collections工具类中提供了相应的包装方法把它们包装成线程安全的集合
List<E> synArrayList = Collections.synchronizedList(new ArrayList<E>());
Set<E> synHashSet = Collections.synchronizedSet(new HashSet<E>());
Map<K,V> synHashMap = Collections.synchronizedMap(new HashMap<K,V>());
Collections针对每种集合都声明了一个线程安全的包装类,在原集合的基础上添加了锁对象,集合中的每个方法都通过这个锁对象实现同步
三、java.util.concurrent包中的集合
1.ConcurrentHashMap
ConcurrentHashMap和HashTable都是线程安全的集合,它们的不同主要是加锁粒度上的不同。HashTable的加锁方法是给每个方法加上synchronized关键字,这样锁住的是整个Table对象。而ConcurrentHashMap是更细粒度的加锁
在JDK1.8之前,ConcurrentHashMap加的是分段锁,也就是Segment锁,每个Segment含有整个table的一部分,这样不同分段之间的并发操作就互不影响
JDK1.8对此做了进一步的改进,它取消了Segment字段,直接在table元素上加锁,实现对每一行进行加锁,进一步减小了并发冲突的概率
2.CopyOnWriteArrayList和CopyOnWriteArraySet
它们是加了写锁的ArrayList和ArraySet,锁住的是整个对象,但读操作可以并发执行
3.除此之外还有ConcurrentSkipListMap、ConcurrentSkipListSet、ConcurrentLinkedQueue、ConcurrentLinkedDeque等,至于为什么没有ConcurrentArrayList,原因是无法设计一个通用的而且可以规避ArrayList的并发瓶颈的线程安全的集合类,只能锁住整个list,这用Collections里的包装类就能办到
hashMap和TreeMap的适用场景
字符串去重
对字符串“ABBCADDDAC“进行逐步去重,过程如下
ACAAC —> ACC —> A,最后得到A:(只到ACAAC这步)
public static void main(String args[]){
String str = "ABBCADDDAC";
System.out.println(matcher(str));
}
public static String matcher(String input){
List list = new ArrayList();
Pattern pat = Pattern.compile("(.)\\1*");
Matcher matcher = pat.matcher(input);
while(matcher.find()){
list.add(matcher.group());
}
String[] strings =(String[]) list.toArray(new String[0]);
for(int i=0;i<=strings.length-1;i++){
if(strings[i].length()>1){
input = input.replace(strings[i],"");
}
}
return input;
}
2021.5.10
字节跳动
shell awk ,调用排名前十个的IP
b树和b+树的区别
漏桶和令牌桶的区别
编程题
1,4,5
输出组成数字n所需要的最小硬币数
我的答案:
private int minCornNum(int n,List<int> corns){
int minNum = 0;
//排序
corns.sort().reven();
while(n>0){
for(int corn:corns){
if(n>corn){
n-=corn;
minNum++;
continue;
}
}
}
return minNum;
}
spring事务
zookeeper原理
2021.5.11 58学车(驾校一点通)
字节前后四位交换,一个字节有多少位(8比特)
位移运算...去看MSDN...
`byte` `b = 123;`
`byte` `r = (``byte``)((``byte``)(b >> 4) + (``byte``)(b << 4));`
`b = (``byte``)((``byte``)(r >> 4) + (``byte``)(r << 4));`
aop-->jdk与cglib代理的区别
数据库优化
狮桥
用MySQL实现自定义字段
手写单例模式
volatile原理
jvm内存模型(主内存-工作内存)
单向链表不定长,01空间复杂度,取倒数第n位
雪花算法有什么问题
AQS与可重入锁
探马crm
epoll与poll netty
kafka如何保证顺序消费 时间轮(为什么快)
MySQL查询缓存,并发修改同一条记录
synchronized锁升级的过程
jvm老年代用什么算法
上传下载服务器怎么配置
如何实现企业微信聊天时超时告警
顺丰笔试:
小鹏面试其他人的面评
os:虚拟内存,通过页面置换算法实现比实际内存大的,地址连续的空间,通过时间和空间局部性原因-空间延续性,时间上好像当前程序段时间,记不清楚。进程调度策略有哪些:短线程优先,高享用比,时间片轮转,固定时间片,多队列优先级,链表结构。
数据结构:储存图,二维数据,其次临接矩阵,通过链表存储(图,点和边,点链表头节点,怎么保证所有的点以惬当的方式存储起来么?没听懂。每个节点,维护一个链表)
线程同步策略:Java,互斥量(同一时间,只一个访问),信号量(信号量的值,多个同时访问),锁synchronized,lock对象,设计背后思考逻辑:这个。。。不清楚。
网络URL过程:分层表述。URL解析,主机域名,委托系统dns,IP地址,http,tcp协议层,http协议层,三次握手,传输层,网络层封装网络包原和目标IP地址,数据链路层,mac地址 arp协议(缩写,平常没有看全称),数据链路层物理层传输,最后到达目标服务器80端口,后续服务器接受响应。
对互联网后台,理解,对于前端获取信息,从数据库获取,很粗糙。
Java:按单词反序。中间空格,分割split,代码读出来,string数组,倒置,栈先进后出,字符串拼接,stringbuffer与简单加号,string不可变,对于内存的开销。
offer情况:六月中旬,六月八号答辩,论文还在写,图像处理方面(通过GPU并行加速,跟直接opencv对比/CPU,CPU,cuda,图片哪些处理,边缘计算算子矩阵,放大,双边滤波-介绍不出来,去噪,对边缘进行平滑)
嗯,来到顺丰做了几天面试官,把自己当面试官的一些常提的问题罗列一下吧(大部分也是来自与上面的自己回答不出来的面试题,还有部分另外一个大牛同事的问题):
说一下405,499状态码
ES的评分机制
TCP/UDP的区别
加密算法ISA,对称加密和非对称加密的区别,怎么用ISA做签名
雪花算法中机器ID怎么设置,时针回拨误差
长连接、短连接和轮询的区别
附近的人功能怎么设计
电梯算法怎么设计
消息队列(kafka)的分区与消费者的关系
如何控制MQ消费速度
HTTPS认证与交互流程
HTTP协议的格式,跨域(产生原因),HTTP接口安全措施
说一下401,405,502,504,499状态码
拦截器、过滤器和AOP的区别和共性
说说TCP拆包和沾包
100万数量发送短信给用户怎么设计
统计APP日活怎么设计
每日签到功能设计
接口调用次数计算器怎么实现
TPS1400/15-20万单量的下单接口怎么做
异或--考察专业知识是否扎实,算法基础是否牢固
算法题:一个数组中有一种数,出现奇数次,其他的数全出现偶数次,问:如何找到这个与众不同的奇数次的数
JVM卡表--考察jvm是否学习深入
mysql刷脏页的过程--考察mysql是否学习深入