前言
仅记录个人学习过程
记录一下
今天6月2号,从周一开始在boss上投简历,主要投的是杭州和深圳,到现在面了大概10多次?(记不清了,这两天一直在面,晚上还有。。),沟通的估计有100+hr,其中很大一部分是外包的,对于这种我了解也不多,不过看网上都是深恶痛绝,说能不去就别去,学不到东西啊、老板不把你看人看啊等等。。我个人认为主要是没有归属感以及加班过于严重吧,不过工资高还是值得考虑的一个点。(不过我暂时不太想去)
到现在让我印象最深的一次,还是一个做美国道富银行项目的公司面试,问的和其他的公司都不一样,每一个问题都是结合业务场景的提出的,针对你写代码的质量,抛异常的标准等等,之后项目这一块结束后,让我自己去讲一个技术点,理解比较深的。面完之后就感觉自己还是很多不足,项目这一块比较弱势吧。(二面问的也很多没答上来,不过聊的挺好。。)
涉及到的技术
- 索引!!这个被问到的次数很多( 索引的类型,为什么加索引,怎么避免索引失效,怎么看是不是失效了,建立索引的标准是什么等等)
- spring(bean的几种类型啊,加载bean的步骤,怎么解决循环依赖的,AOP,@component和@controller的区别,各种注解的使用场景和注意点。)
- springMVC(前后台交互的那段过程,springmvc的作用,常用的注解)
- 线程池(类型,项目中怎么用的,任务进来的过程,拒绝策略、主要参数等)
- jvm(面道富我就说的这个:几块区域,为什么会oom,垃圾收集的几种算法,引用的几种类型,判断对象存活的方式,垃圾回收器等)
- mq(项目用mq做了什么,消息丢失怎么解决的,消息重复消费了怎么办,rocketmq的调用流程)
- dubbo+zk(dubbo负载均衡的几种策略!!这个被问到3次以上!,zk崩了,还可以调用dubbo的服务吗,dubbo每一次都是从zk里面调用服务的吗【意思是调了一次就会缓存在本地,下次直接去本地调了,不走zk了】)
- 事务(事务隔离级别,ACID,mysql的默认隔离级别,项目用的是默认的隔离级别能接受幻读吗?)
- redis(项目中用redis来做什么,redis和数据库数据不一致怎么解决,redis的几种数据类型,雪崩、击穿、穿透是什么,怎么解决这些问题的;都是结合项目场景问的,不会直接问)
- 分布式项目中怎么保证调取接口的顺序性(利用内存队列) ,需要插入的数据怎么保证幂等性。
- arraylist(底层的实现,初始容量,扩容,线程安全的方式)
- concurrentHashMap的实现原理
- 继承Thread和实现runnable接口的底层实现(不同点)
- 算法题:给定一个数组,返回两个节点使3部分的和相等(如【1,1,2,2,1,1,1】,返回【2,4】,15min完成,思路对了就好写,不对就gg。)
- 类加载时碰见两个类全限定名完全一致的怎么加载(不同的类加载器加载的类会被判定为不同的类)
- 分库分表的原则、分法。分了之后怎么查(主要是项目里面用了没,怎么分的)
- 对A,B,C3个字段建立索引,查询B,C会走索引吗(最左前缀原则)
- 笔试:二叉树的层级遍历输出+写一个线程安全的单例+输出一个表中第n多的工资(sql语句)
- 为什么要重写hashcode()和equals()。推荐一个博客去看
- mysql(隔离级别,不同的隔离级别分别解决了什么问题,mvcc多版本控制,select for update的作用,共享锁,排他锁等)可以看看这个博客: mysql面试题.
- mybatis(一对一,一对多的实现,延迟加载的实现,怎么在mybatis里面实现批量操作的)
- .dubbo序列化和非序列化怎么实现的(T^T),dubbo的调用关系(就是提供者注册到注册中心这一套流程)
- treeset和hashset的区别,数组和arraylist的区别
- 集合类(有什么,在哪用,用的时候需要注意什么)
- 怎么找出执行慢的sql语句(慢sql日志),怎么看是不是走了索引(explain 执行计划)
- A,B两个表数据量都很大,现在需要连表查,怎么做?
- 一些分布式项目的问题, 这个博客
- redis 里面set的并交查集怎么操作的(没有用过就玩完)
- 项目中限流怎么做的 (mq只是削峰填谷,问的是令牌桶,漏斗那种。。)
- 连表查询和子查询区别
- zset怎么实现实时排行榜的(关键实时怎么实现的)
- cms垃圾回收器会stop the world 几次(我说了两次,面试官说至少两次,问我还有一次是什么时候。。)
- 线上jvm部署在docker 还是服务端?(好像是这么问的。。)怎么部署的?
- 为什么不建议使用Excutors来创建线程池,而是要使用ThreadPoolExecutor的方式来创建线程(阿里巴巴员工手册)(是因为Excutors在创建线程池时没有限制任务队列的长度,容易导致OOM异常。)
- hashmap查找删除的时间复杂度
- rocketmq的设计原理,怎么设计的?(???)(这个博客附带mq的事务)
- rocketmq的事务和mysql的事务说一说。。
- spring和jdk里面的注解怎么实现的(??)
- 为什么需要dubbo,dubbo的设计流程。。
- 自己新建的类,需要做hashmap的key,怎么做(重写hashcode()和equals(),看19)
- 连接jdbc的几个参数,连接池怎么用的,有什么好处,mybatis怎么去连接db的。
- update一条数据加的是什么锁?两个事务同时插入会造成死锁吗,举一个mysql死锁的场景,解决方案
- 行锁是对数据加锁,还是对索引加锁?
- MySQL的repeatable和read_committed的区别,通过什么方式怎么解决不可重复读问题的。
- mysql-innodb加载一个SQL的步骤(buffer pool,redo log,undo log,redo log等)
- 怎么把1百万数据利用20个线程快速导出
- 假设你是spring开发者,怎么同时加载100个bean,里面包含了有依赖关系bean,和没有依赖关系的bean(??)
- 什么是full gc,full gc触发条件,举一个oom的例子
- 加索引(a,b,c)和索引(a,b) 查询条件为ab字段走哪个(全走?)
- 为什么redis6.0的要用多线程,有什么好处;redis之前的单线程为什么这么快?(上下文切换)(可以看看这个)
- java和其他语言的对比优势,java是值传递还是引用传递。(可以想想str改变值的时候原对象是不是变化了)
- 了解跳表吗?(。。Redis里面的SortedSet)
- http的请求头都包含哪些信息
- spring的状态机了解吗
- RetrantLock中条件绑定怎么绑定的,使用的场景。
- sql语句where条件后面为什么不能接聚合函数(sql执行顺序)
- 待补充,大概率呆在杭州了。
总结
6月9号: 经过大概7-8天的面试吧,大部分都是线上面的,虽然主动来找你的很多都是外包的。。但是还是前后面了大概20多次吧,面多了就能很明显的发现大点的公司和小公司问问题的方式以及问题和项目的结合度都不一样,公司的福利制度以及工作环境也是很不一样。 现在都还没拿到具体的offer(crying),任重而道远。希望我的一点经验能帮助到大家,要注重学习的深度!6月17号:应该算是拿到了5个offer,4个杭州的,一个深圳的,个人认为还是杭州好找点,机会多点,待遇相对来说也比深圳高(感觉深圳的都压了工资(非大厂)),应该呆在杭州啦~