6. GC,垃圾回收机制的几种算法
7.二叉树、平衡二叉树、B树、B+树、红黑树
8. 多线程、并发、锁、锁升级流程
9. 事务、隔离级别等
如果需要,请点击这里查看我准备的一线大公司面试资料和简历模板,里面还有大公司面试的完整考点,欢迎来到Star。
上周午休时间,我刷手机,看到26群疯狂发恭喜,还以为出事了,结果发现晨曦入坑了哔哩哔哩,我也发了恭喜,然后私聊了他。
我对他的印象非常深刻,因为他对我的视频给了我很多建议(虽然我已经很久没有录制采访视频了),而且他非常细心。
他一直对自己的工作还算满意,后来发现身边的朋友毕业都20多岁了,然后就跳槽了,一下子就30+了,他很是惊讶,大公司和非大公司的差距这么大,他一直以为自己还算比较优秀,所以我也知道他准备跳槽很久了。
怎么说呢,我就不细说了,现在结局也不错,希望他能继续不负青春,后面会分享他的面试经历,希望大家能有所收获。
2021.5.20 第一次面试:(第二次面试将在几个小时后通知)
1.自我介绍(工作现状、项目概况、使用技术、职责、专长、优势)
答:领导您好。我叫**,2016年毕业于****大学,毕业后就职于合肥卫宁,一家医疗软件公司,负责前后端,数据库,项目部署,是一名全栈开发人员。2018年来到上海,加入京东至今,一直从事线下商城的后端和界面开发。老项目还是MVC,新项目已经把前后端分开了,前端用H5,小程序,VUE,后端用.Net4.5,4.6,Java,数据库用,,,,中间件用消息队列。我在公司里是一名核心开发人员,负责老项目的维护和二次开发。相比于其他开发人员,我的优势在于沟通能力强,责任心和学习能力也比较强。 如果有幸加入哔哩哔哩,我相信自己能很快融入团队,快速掌握公司的相关技术。谢谢。
2. 介绍你参与过的项目以及在工作中的职位
答:我负责一些老项目的维护,比如商城及商家后台、内容管理、广告、推荐后台、游戏后台及接口;对外开发平台接口等;新项目包括应用插件、勋章等项目;我是老项目的主力开发人员,一般是新项目的项目负责人,负责项目的表结构设计、任务的调度与分配、部门间的协作与调度。
3. 离职原因
答:1、工作5年了,遇到了技术瓶颈,在现在的公司做的大多数工作都是重复的增删改查,希望换个环境,拓宽自己的技术和视野,也希望学习到更多、更新的技术。
2、虽然职级有提升,但是升职难度比较大,因为公司领导都是6、7年经验的老员工,也希望能做管理发展岗位。
基于以上两个原因,我想换一个平台。
4. 你未来的计划是什么?
答:1-2年内,我会用半年左右的时间熟悉公司的技术栈和业务,然后用一年以上的时间积累经验,深入学习所用到的技术并时刻注意学习新技术;2年之后,如果有机会,我希望从事开发管理的岗位,带领自己的团队。
5. 您结婚了吗?您住在哪里?您现在的公司在哪里?
答:我已婚,定居上海,现在的公司在上海北外滩。
2021.5.27第二次面试(技术):(第三次面试将在一周内公布)
1.设计表结构时需要考虑哪些问题
答:我们目前使用的数据库是
(1)设计表时,首先要注意表字段的可扩展性。比如性别字段,一般可以使用bool类型,true表示男,表示女。但是如果不知道性别怎么办?所以尽量避免使用bool类型,可以使用int类型或者枚举类型。
(2)其次,我们需要考虑表的可维护性和可读性。比如主表中有一个奖品信息的字段,但如果奖品类型多,甚至有多个奖品怎么办?我选择通过字段关联的方式单独建立一个表来存储奖品信息,而不是放在主表字段中。
2. 关系型数据库和非关系型数据库有什么区别?你现在使用哪种数据库?为什么?
答:关系数据库包括,,;非关系数据库包括,
(1)存储格式为key、、等,因此可以存储基本类型和对象或者集合,而数据库只支持基本类型。
(2)数据库是把数据存在缓存中,而关系型数据库是把数据存在硬盘中,自然查询速度就比数据库慢很多。
(3)关系数据库可以使用SQL语句轻松地在一个表内或者多个表之间进行非常复杂的数据查询。
(4)关系数据库支持事务,安全性高
我们存储了大量的会员数据,每个月产生上亿的订单和日志数据,所以选择了非关系型数据库。
3. 你知道数据库查询优化吗?告诉我如何优化它(索引相关)
A:可以先在查询分析器中查看该语句的执行时间,分析该语句是否使用了索引,以及索引是否有效。
(1)尽量避免使用*,只查询自己需要的字段。
(2)一些公共数据可以先存放在内存中,需要的时候直接取出来,而不是每次需要的时候都去数据库里取,这主要是为了减少数据库交互,提高性能。
4.说说索引(聚集索引、非聚集索引、联合索引、最左匹配原则、非聚集索引背表查询)
答:索引分为聚集索引和非聚集索引,使用非聚集索引查询时,通常需要重新回表查询,因为非聚集索引存储的是主键ID。聚集索引查询就像一本书的目录,有了索引可以快速定位到某一区域的数据,如果不使用索引,则需要扫描全表。还有多个字段组成联合索引,一般符合最左匹配原则。
或关键字不使用索引,像模糊匹配一样,前面通配符不使用索引,后面通配符使用索引
5.如果我使用非聚集索引(id from a),如何避免返回表?
解答:如果只想查询ID,使用非聚集索引的话就不需要返回表,因为非聚集索引存储的是ID。
6.为什么使用索引后查询效率高?
答:这个涉及到索引和数据的结构,类似书的目录页,索引通过B+树结构来存储数据,水平方向的数据越多,垂直方向的高度越低,跟磁盘的交互就越少,查询就越快。
7.你用过吗?在你的项目中的使用场景是什么?告诉我们你的理解
答:我们项目中用的场景不多,一般用来存储计算后的数据,我们有一些BI统计计算出来的数据,每次计算耗时比较长,这些数据可以存进去,设置有效期为一天,后续访问会比较快。
类型包括type、hsah(可用于购物车场景)、List、朋友圈展示、set、普通好友、zset排序;
因为数据在内容里,所以查询很快,但是会通过RDB、AOF将数据持久化到磁盘
RDB是在指定的时间间隔内生成的数据集的时间点快照,它将数据集保存在某个时间点。
AOF 文件是仅追加日志文件。
一般在崩溃后恢复数据的时候都是结合使用,先用RDB恢复某个时间节点的数据,再用AOF数据恢复丢失的数据。
8. 您从事 Java 项目多久了?您能独立建立一个 Java 项目吗?
答:我刚刚开始做 Java 相关的项目,大概用了 2 个月左右的时间,参考其他项目,都是由架构师搭建框架,我们主要写业务代码。目前我还不能独立搭建 Java 项目,但我觉得如果给自己一点时间学习,我可以独立完成这个项目。
9.你还有什么疑问吗?(开发语言、项目概述)
回答:1.我想知道我们的项目是什么(一些内部库存盘点系统等)
2.我们使用什么开发语言(主要是Java,也有一些Go语言相关)
2021.6.7第三次面试(项目):(第四次面试三天后通知)
1、介绍一下你现在的研发团队情况(产品、运维、前端开发、后端开发、测试)
答案:大约 8 个产品、3 个操作、1 个数据库、10 个前端、大约 25 个后端和大约 10 个测试
2. 目前这家公司是做什么业务的?主要负责哪些项目?
A:我正在做一个网络商城系统,用户端主要是H5和小程序,会为商城提供一些功能,包括商家活动,优惠,团购等;还提供发优惠券,问卷,以及一些游戏等功能;我主要负责的项目有后端商城商家的维护和二次开发,内容管理,插件集成,后端售卖,游戏后端,以及对外开放平台接口等;
3. 谈谈你从零开始做的一个项目。你在项目中扮演了什么角色?
答:前段时间做的徽章项目,功能是:会员消费一定金额并完成任务后,点亮相应徽章并发放奖励。客户端使用小程序,后台页面使用VUE,后台接口使用Java。我是项目负责人。
(1)根据产品需求及UE,设计项目表结构
(2)根据需要将任务分配到具体负责人,控制整体项目周期(一个半月左右)
(3)提供基础控制数据;开发核心业务逻辑、Vue页面的demo页面、Java界面
(4)跨部门协调及项目部署
4. 如果再次让你做你提到的项目,你希望改进哪些方面?
A:我有一个客户经理的项目需要跨表查询,当时领导给的解决方案是建一个视图,但是只有 .6 以上版本才支持视图,查询效率比较慢。如果再做一次,我觉得还是换成关系型数据库吧,因为关系型数据库可以查询多表。
前端用的是框架,本项目前端用的是html+原生js,这里的动态查询写了几百行DOM元素操作,费时费力。
5. 如果要求你找出数组中最大的数字,你会怎么做?
答:为了减少空间,可以用冒泡排序;为了减少时间,可以用二分查找或者切分的方法,在每个块中找到最大的块然后继续查找。
6、如果现在我们要建立一个库存盘点系统,那么表结构应该如何设计,需要设计哪些表?
答:库存表中的字段包括物品类别、名称、编号、初始数量、剩余数量等信息。
分配表中的字段有人员信息,包括手机号,微信号,姓名等,物品类型,物品名称,编号。
还有一些调配记录表和日志表,用于记录调配、修改信息,方便后期的盘点和统计。
7、公司采购了一批电脑,新员工收到电脑后,扫码确认收货,这个扫码如何实现(后台设置收货人信息,扫微信确认,获取微信相关信息与后台设置的人员信息比对,一致则确认该人已收货)
A:可以和微信小程序结合,员工入职时分配电脑,相关人员录入后台,相关人员拿到电脑后扫码确认领导的电脑,扫码后进行微信授权,获取相关人员信息,与后台录入的信息(姓名、手机号、微信号等)比对;一致则修改后台确认字段参数,不一致则提示并通知相关人员
8. 你有什么问题吗?(询问团队成员)
A:我们目前团队有多少人?计划再招多少人?内部项目上线了吗?
2021.6.16 第四次面试(部门经理):(一周后HR会通知)
1、谈谈贵公司的人员结构及您所担任的职务、作用。
答案:请参阅第 3 页。
2. 项目中遇到的困难,如何解决,以及以后如何避免
答:去年疫情刚开始的时候,我来上海后的前两周都是在家办公,手头做的客户经理项目马上就要上线了,当时测试环境也差不多准备好了,等到发到线上测试的时候发现只能读不能写,因为测试环境数据库是单机的,线上系统是主从的。因为是新项目,所以视图要到4.6以上版本才支持。驱动升级到最新,网上资料很少。查阅相关资料,询问同事,最后阅读相关源码,发现需要增加一个参数才可以写入主库。中间大概花了3天时间。但是上线一个星期后,另一个部门的领导告诉我们,官网又升级了驱动,现在不用加那个参数就可以直接用了。我能想到那几天我们升级的最新驱动就是官网发布的那个有问题的驱动。 一周后,他们解决了这个问题并再次发布了最新的驱动。这是我遇到的一个棘手的点。
为了避免以后再出现此类问题,我们只好把目前稳定的驱动打包成我们自己的包,并将问题上传到公开文档(wiki),等以后其他部门的同事需要使用该驱动时,就使用我们内部的驱动,避免不可预知的意外发生。同时我们尽量保持生产环境和测试环境一致,避免一些问题上线后才发现。
3.如何在项目中连接(连接前端、第三方、其他后端应用)
答:(1)大部分项目已经前后端分离,我们作为后端开发人员,编写接口,并提供文档给前端开发人员,文档里有具体的接口地址,输入参数,输出参数,其他不清楚的地方,请另行沟通。
(2)对于第三方连接,我们对外提供了统一的文档地址,里面提供了接口地址、加密方法demo、客户端dll、调用示例(等)、输入参数、输出参数等。
(3)内部调用其他后端接口。一般对方提供客户端,客户端有输入参数和返回值。如果没有客户端,则需要根据对方提供的输入参数和返回值来调用接口。
4. 你如何与同事沟通?
A:我觉得除了责任心和工作能力之外,最重要的是沟通能力,这取决于一个人的性格和沟通能力。
(1)不要抱着有事找你,没事不认识你的态度去交流。见人正常交流,如果有人找你有什么事,帮他们解答一下,不要耽误其他事情,哪怕不是你的职责所在。早上上班遇到就打个招呼,边吃饭边聊天,或者经常跟团队里的人或者关系好的人一起吃饭聊天,不太熟的人也可以聊聊天,这样以后交流起来就方便了。作为程序员,人脉关系也很重要,以后不在一个公司的话,可以互相交流技术问题,以后要跳槽也可以互相推荐。
(2)多分享。分享可以是工作经验,也可以是技术知识。当然人际关系更多的是物质上的分享。作为一个程序员,你不会在意几十块钱,可以买点零食、水果等送给身边的人。俗话说,知己知彼,百战不殆。不管怎么样,别人都会觉得你是个好人。前段时间,我第一次用Java需要连接一个消息队列,之前没做过,不知道怎么做。找了Java架构师,他很忙,总是敷衍了事的回答或者发一些链接让我看看,我还是搞不定。晚上下班看到他在吃外卖,我给他买了瓶饮料,说:“春哥,喝点。他还说我连接的队列有问题,有空能帮我看一下吗?”果然,第二天他给我写了一个demo,在我电脑上跑了一下,就搞定了。
5. 未来规划
答:我希望在掌握现有业务技术的同时,1-2年内能学习更多更新的技术。如果以后有机会,我也希望从事开发管理的工作。俗话说,不想当将军的士兵不是好士兵。如果以后有机会,我会独立领导一个团队。
6. 离职原因
回答:(1)我现在用的技术不算新,在公司工作大概3年了,现在用的代码大部分都是业务代码,有反复的增删改查,想换个环境,接触不同的技术和业务,多学习一些。
(2)现在的同事在公司工作时间比较长,稳定性比较高,我觉得在现在的公司能升到开发管理的几率不大,在新公司熟练掌握现有业务后,如果有机会也希望能升职。
7. 您现在的工资是多少?
答案:N*14
8. 您还有什么问题吗?
答:Java 是我们的主要开发语言吗?因为我从事 .net 工作,所以中间是否有过渡期?
2021.6.25HR面试:(上午面试发薪,下午5点最后谈薪)
1. 谈谈你最关注的项目,场景是什么,周期是多长
A:我正在做的徽章项目,会员消费一定金额后,部分徽章会亮起,部分徽章亮起的进度可以在徽章墙上看到。比如我今天逛完街准备回家,看到我的徽章墙上有一个徽章显示990/1000,我再花10元就可以获得这个徽章,这样就可以买价值10元的东西,这样可以促进会员消费;
这个项目的背景是销售团队已经把这个项目做了一个PPT卖给了几家公司,他们已经跟公司签了合同,所以需要紧急开发,周期大概一个半月,我是项目负责人。
2. 下一步的计划是什么?
答案:看到所有四个面 5
3. 你和那些晋升很快的人有什么区别(学习能力不同,但努力可以弥补不足)
答:我觉得我们大多数人的智商和学习能力都差不多,但总有那些了不起的人,学历高,学得快,能力强,升职快。我和他们之间肯定是有差距的,但我觉得这些肯定是你的资产,但我们的学历和能力也不错,再加上愿意学习,我们也能成为某个方向或者某项技术的天花板。最近流行一个词“躺平”,我不太认同。我觉得现在的人,特别是我们程序员,即使不能成为某项技术或者某个时代的引领者,也要成为这些最新技术的学习者,跟上时代的步伐,不断学习,这样才能提升自己的价值。
4. 你期望的薪资是多少?请发给我你过去一年的薪资报表。
答案:期望薪资:28K
5. 以前都是远程开会,今天过来主要是看看工作环境,熟悉一下路线,希望能负责任的和大家见面,请加我微信。
历时一个多月,终于在2021年6月28日拿到了B站版本;
虽然工资被卡了,没有达到我的预期,但因为去年年底升职加薪,所以也还可以接受。他们说我只涨了半年的工资,以前是14块钱,现在是15块钱,总涨幅大概是30%。试用期6个月,每天15块钱的餐费补贴,8点半以后还有加班餐。
转正后每月额外获1000元补贴
文章持续更新,需要的可以点这里看我整理的一线大公司面试资料和简历模板,里面还包含大公司面试完整考点,欢迎Star。