面经——2019求职修行记

目录

  • 一、求职是一种修行
  • 二、推荐阅读
  • 三、遭遇的面试题(不完全统计)
      • ①项目相关
      • ②算法相关
      • ③java相关
      • ④MySQL相关
      • ⑤Redis相关
      • ⑥其他
  • 四、一些建议


本人2017年985院校软件工程毕业后正式转型java后台开发,2018年4月跳槽一次。下面是2019年9月跳槽的经历。仅供参考。 很多题目没有给参考答案,后续补充。

一、求职是一种修行

  2018年入冬后,互联网行业发生了一系列降薪、裁员事件,初步感受到了一丝寒意。2019年互联网行业每况愈下。在脉脉上经常看到失业三四个月的脉友发牢骚,找工作难度相较于去年有很大的提升。不管行业环境如何恶化,我始终是保持一种乐观的心态:坚信自己即使离职,也能尽快找到下一份工作。

  七月上旬,向leader提出了离职申请,之后的一个多月里我对工作中的设计文档、技术分享文档、开发规范文档、模块代码、业务进行归纳整理;学习java8的新特性。感谢老大给我休息和学习的时间,真的不好意思再这么闲着不干活,所以在8月23号办理了离职手续。回到家后整理家务时恍然发现租的房子9月9号合同到期,房东几个月前就已明确声明不让续租。在离职前也没有刷面试题,半个月的时间用来复习、找工作、搬家确实太赶,压力顿时爆表。

  boss直聘上的猎头各种联系、要给我内推,自己确实也想在房子到期前找到工作,没控制好投简历的节奏,一下子收到很多面试邀约。最初我面了58集团和跟谁学,被刷了,其中58的二面官说我拿58练手(无辜脸)。后面安排的面试统统改约时间,先复习一下再说。早上6点就起床,晚上11点结束战斗,白天偶尔外出面试一下,提升面试经验和表达能力。面试遇到不会的知识点,事后都及时进行了针对性复习。好在9月初终于征得房东的同意,可以多住到9月底,可以完全投入复习了,感激业主的支持。

  中秋节给自己放了一天假。节后,头条、滴滴、美团的面试变得很顺利,我感觉到了offer在向我招手。后来从猎头哪里得知,头条和滴滴都挂了,业务方向不匹配、面试表现一般等因素。从美团HR电话面试到第一次谈薪酬,我等了一周,HR给的待遇和预期的值相差很大,我知道,还会有第二轮谈判,4天后,HR给了最终的结论。可以过一个愉快的国庆节了。
面经——2019求职修行记_第1张图片


二、推荐阅读

  推荐几本书,里面包含了很多面试题;另外谈薪酬是比较伤脑筋的一件事,需要有自己的底线和谈判技巧。

  1. 《高性能MySQL》,MySQL进阶读物,面试题都在这本书里。
  2. 《程序员代码面试指南-IT名企算法与数据结构题目最优解》 - 左程云著。这本书我看了2遍,看一遍记不住,根据自己的理解在电脑里又敲了一遍代码。看完这本书,能够解决大多数算法题,但LeetCode中的热门题目最好还是刷一刷,很惭愧现在才刷35个,哎
  3. 《深入理解Java虚拟机》面试官就想知道我们对java掌握的深度,有没有一些JVM的调优、内存泄露排查手段。
  4. 《Java高并发编程详解:多线程与架构设计》(汪文君 著) 和《Java并发编程的艺术》。高并发的知识面试必问,而这两本书讲解详细,一定看一遍。
  5. 面试时,如何向公司提问?
  6. 如何面试程序员?文末的评论区也不乏高论。
  7. 面试时如何谈薪酬?
  8. 面试中如何谈及薪资才能让自己不后悔?
  9. 跳槽如何谈薪资?这些套路你要知道
  10. 候选人觉得薪酬太低,HR该怎么进行谈判?
  11. HR最需要的20个薪酬谈判方法

三、遭遇的面试题(不完全统计)

①项目相关

1. 你们的秒杀是如何做的?如果让你自己设计一个秒杀,你如何做?(58)

  • 前端页面按钮置灰(避免用户重复请求):Js可控制在一段时间内只能触发一次。也可以让用户回答问题、填写验证码、移动图像等等,防止或者减少有机器人来恶意请求。
  • 动静分离:把一些静态资源,如图片等缓存在CDN,APP上也可以缓存一些资源。
  • 限频:通过userID限制访问频率,再比如在nginx层对同一个ip源的请求次数做限制,防止机器人来申请。
  • 服务把请求队列处理,分批放行;
  • 数据库(MySQL、Redis):读写分离,分库分表,数据库集群。(把热点数据分离,降低单库压力)
  • 用乐观锁CAS(check and set)修改库存。伪代码如下:
// 基于memcache
Item item = client.get(key);
Integer restNum = item.getNum();//获取库存
if( restNum < buys) {
		return false;
}
if(client.cas(key, restNum – buys, item.getCasunique())){
	return true;
}

//基于数据库
update table_name
set amount = amount - #{buys}
where code = #{code} and amount >= #{buys}

2. 你们系统里有哪些容灾策略(58)

  • 答:数据库主从;主备机房;各种手动开关;服务都是基于分布式的高可用服务;限流策略;降级策略。

3. 分库分表了解么(58)

  • 答:写过数据库跑批任务,数据库通过shading-jdbc分表。

4. 数据迁移过程,如何保证数据一致性(58)(阿里电面)
5. 你们限量是如何做的,如何防止超卖?(Opay)
6. 挑选一个你最熟悉的项目说一下。(不是自己做的最好别说)
7. 规则引擎相关(美团公交业务组、滴滴)
8. 充值业务也涉及到营销,怎么用你们的营销中台呀?(美团公交业务组)
9. 为什么用MongoDB而不是elasticsearch?(美团公交业务组、配送)

  • 考察技术选型问题。

②算法相关

  1. 有序数组,输出和为m的所有不重复的数对。

  2. 两个数组一样长,交替打印出来。(synchronized、wait、notify控制实现) (跟谁学)

  3. 一个String串,找出最长不含重复元素的字串。(跟谁学)

  4. Peeking Iterator顶端迭代器的实现。(小米一面,LeetCode 284)参考答案

  5. 动态规划障碍路径。(小米二面, leetcode 63)

  6. 经典3Sum问题。(探探,leetcode 15)

  7. 转圈打印矩阵。(探探)

  8. 在有序数组中搜索大于等于x的数的最大下标。(二分查找)(美团闪购)

  9. 2个有序单链表合并,不能创建新的链表,仅仅改节点的引用。(美团闪购)
    升级: 如何两个链表相交呢?
    再升级: 多个链表,每个链表都很长,内存都装不下,如何合并?

  10. 2个有序大数组,找出其中的交集. (Boss直聘)

public static int[] retainall( int[] array1, int[] array2)
  1. 给定的两个字符数组中,除了一个字符不同,其余字母的值和顺序都相同,假如第一个数组比第二个数组多一个字符,如何高效的找到这个字符。(Boss直聘)
public static char find(char[] chars1, char[] chars2)
  1. 写一段多线程的程序,要求产生死锁。(Boss直聘)
  • 用synchronized关键字实现了代码。问synchronized实现原理,答monitor锁,面试官说回答的太粗了。如何优化synchronized的性能?
  1. 蛇形打印二叉树。(今日头条1面)参考答案
  2. 数组不相邻元素之和的最大值。(今日头条1面)参考答案
  3. 在数组中,找左边都比其小右边都比其大的元素。(今日头条2面)
  4. KMP算法是否了解(58)
  5. 不含重复元素,先递增后递减的数组中找最大值(美团公交业务组)

③java相关

  1. Wait和sleep的区别(中信银行)——注意:wait只能在同步方法内用
  2. ThreadLocal(美团公交业务组)(美团火车票)——要考虑内存泄露的情况
  3. 线程池执行顺序(美团公交业务组)——复习线程池ThreadPoolExecutor
  4. Executors构造相关(美团公交业务组)
  5. 线程池队列有哪些,你们线上用的是哪种?为什么不用无界队列?拒绝策略有哪几种?
  6. ConcurrentHashMap底层是如何实现的 和HashMap的区别是什么? (今日头条)(美团火车票) 如果让你设计一个Map你会设计哪些方法?(滴滴打车)
  7. 为什么你选择使用java,而不是其他语言?java的优势是什么?(马蜂窝)
  8. Java8的新特性了解吧?答:lambda、流处理、还是时间类型。进一步问:为什么增加了对lambda语法的支持呢?(马蜂窝)
  9. Java中你最熟的知识点,介绍几个? 然后面试官会继续追问。
  10. JVM存储模型,垃圾回收算法,CMS和G1垃圾回收器比较。
  11. 高并发包中lock实现原理
  12. volatile关键字的作用。参考博文
  13. JVM内存如何调优
  14. 排查过内存溢出、内存泄露的问题么?

④MySQL相关

  看一遍《高性能MySQL》,就可以回答下面的问题。

  1. MySQL某表建了多个单索引,查询多个条件时如何走索引?(跟谁学)
  2. MySQL的行锁是如何实现的?(跟谁学)
  3. MySQL走索引的情况考察。(很多博客都太老了,MySQL版本升级后,原本不走索引的,现在可能走索引) (Opay)
  4. 数据库事务。事务特性ACID、隔离级别、事务并发问题小结
  5. 分布式事务相关。(Opay) 分布式事务一致性解决方案
  6. 考察B+树,如画一画B+树索引结构(探探)(58)
  7. mysql索引,底层存储结构,聚簇索引和非聚簇索引,B+树高度。(什么是索引、分类、B+Tree特点、面试题)
  8. 4MySQL中一个char类型占多大空间(Boss直聘)?
  9. char和varchar的区别,适用场景是什么?(Boss直聘)
  10. order by字句走索引,需要注意哪些事项?(Boss直聘)
  11. 考察select → \rightarrow from → \rightarrow where → \rightarrow group by → \rightarrow having → \rightarrow order by顺序。(Boss直聘)
  12. 查看数据库状态,排查数据库问题的命令有哪些?(中信银行)

⑤Redis相关

  1. redis key过期清除策略(探探)(美团)
    定期删除、惰性删除、定期删除。
  2. redis持久化方式(探探)
  3. Redis热数据、热key
  4. redis缓存穿透
  5. Redis分片和一致性哈希(美团公交业务组)
  6. Redis中zset如何实现的?(跟谁学)——跳表
  7. Redis为什么是单线程的?(58)
  8. LRU算法(58) ——考察内存不够用时,redis内存淘汰策略

⑥其他

  1. HTTP长连接为什么更高效,keep-alive(探探)。答案:《HTTP 协议入门》-阮一峰
  2. HTTP协议为什么是无状态的呀?(美团)
  3. Get、post请求的区别?为什么post请求更安全?(滴滴)
  4. http和dubbo比较,后端服务为什么选择用dubbo(美团公交业务组)
  5. 多层级关系的表设计(如文件系统,层级数未知,主子表肯定不行)(探探)
  6. 查看内存 、CPU占用率、网络的命令是什么?(Boss直聘)
  7. 系统负载是怎么算的,什么范围比较正常?(Boss直聘)
  8. 操作系统为什么需要文件系统?(马蜂窝)
  9. RocketMq相关(topic、tag、group、nameserver) (Opay)
  10. 遇到过什么dubbo错误,如何解决的。(Opay) 参考dubbo报错总结
  11. dubbo服务注册和发现、负载策略
  12. zookeeper选主的过程(美团)。 参考Zookeeper选主流程
  13. 离职、跳槽的原因
      这几乎是每个技术面试官和HR必问的问题,每个人都问我这个问题,怎么又是这个问题。。。简而言之,每日优鲜终究只是提升自我、打怪升级经过的一站。只要离开的原因不是情绪化、不稳定、不靠谱等不成熟因素就可以。
  14. 对下一份工作的规划
      这也几乎是每个技术面试官和HR必问的问题。未来无法预测,择业考虑的无外乎5个因素:平台、业务方向、工作氛围(决定了做事情的心情)、职级、薪酬待遇。我把它们按优先级排列如下。围绕这几个方面,说一下内心的想法即可。
  • 平台;
  • 工作氛围(包容的氛围)
  • 业务方向(跨度小些,降低学习业务的成本)
  • 职级
  • 薪酬待遇

四、一些建议

  1. 应聘者要么具备扎实的技术,最起码要表现出足够的潜力。一个人的潜力表现在几个方面:第一、是否有干劲、做事情的意愿是否强烈;第二、快速学习的能力、专研的能力、毅力等;第三、面对压力时的态度、做事格局等。关于潜力的文章,网上有很多,可以参考一下这篇。作为HR,我是如何评估一个员工的潜力的?
  2. 面试的二面官一般是今后入职的leader,所以面试时留一个好印象很重要。表现出优势、特质或潜力。
  3. 面试官更关注候选人在实际工作中遇到了什么问题,是如何思考的,如何解决的,如果再做一次的话可以在哪些方面做出优化和调整。经常做项目复盘的话,回答这种问题应该没什么问题。
  4. 回答问题时,最好采用总分结构,结论先行,结构化的回答问题,不需要太细,少说废话。

end

你可能感兴趣的:(个人杂记)