有情怀,有干货,微信搜索【三太子敖丙】关注这个有一点点东西的程序员。
上周午休我刷手机的时候看到26群在那疯狂刷恭喜,我以为发生了什么,原来是晨曦进了B站,我也刷了一句恭喜,然后就跟他私聊了。
怎么说呢,细节我就不说了,现在结局是好的,也希望他能接着鲜衣怒马,不负韶华,后面就分享一下他的面经吧,希望大家都能有所收获。
2021.5.27二面(技术) : (一周后通知三面)1、设计表结构的时候要考虑哪些问题
答:我们目前用的数据库是MongoDB
(1)设计表的时候首先要关注表字段的可扩展性,例如性别这个字段,正常可以用bool类型,true为男,false为女,但是如果是未知呢,所以尽量避免用bool类型,可以用int类型或者枚举类型代替;
(2)其次需要考虑表的可维护性及可读性,例如主表里有奖品信息的字段,如果奖品有多种类型呢,甚至对应多个奖品的情况,我这边选择独立一张表出来通过字段关联存放奖品信息而不选择放在主表字段里
2、关系型数据库和非关系型数据库有什么区别,你们现在用的是哪个数据库,为什么
答:关系型数据库包括SqlServe、MySql、Oracle;非关系型数据库有MongoDB、Redis
(1)nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型
(2)nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库
(3)关系型数据库可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询
(4)关系型数据库支持事务,安全性高
我们存储的会员数据量比较大,且每个月都产品过亿的订单及日志数据,所以选择非关系型数据库MongoDB
3、数据库查询优化了解吗,说说怎么优化(索引相关)
答:可以先在查询分析器中查看执行语句的时间,分析语句是否用到了索引,索引是否生效
(1)尽量避免select*,需要哪些字段就查询哪些字段
(2)一些公用的数据可以先拿到内存里,后面要用直接拿,而不是每次用到的时候重新去数据库取,主要是减少数据库交互,提供性能
4、说说索引(聚集索引、非聚集索引,联合索引、最左匹配原则、非聚集索引要回表查询)
答:索引分为聚集索引和非聚集索引,用非聚集索引查询一般需要再次回表查询,因为非聚集索引存储的是主键ID,聚集索引查询就好似书的目录,用索引可以快速定位某一块区域数据,如果不用索引就需要全表扫描;还有多个字段组成联合索引,一般要符合最左匹配原则;
in or 关键字就不走索引,like模糊匹配,前通配不走索引,后通配走索引
5、如果用非聚集索引怎样可以不用回表呢(select id from a where name=”111″)
答:如果只查询ID,用非聚集索引就不用回表,因为非聚集索引上就存的是ID
6、为什么使用索引后查询效率高呢
答:这个就涉及到索引和数据的结构了,类比书籍的目录页,索引通过B+树的结构存放数据,横向数据越多,纵向的高低越低,和磁盘的交互就越少,查询得速度就越快
7、有用过redis吗,你项目中使用场景是什么说你对redis的理解
答:我们项目中用到的redis场景不多,一般用于存储计算的数据,我们有些通过BI统计计算的数据,每次计算耗时比较长,这些数据可以存放到redis中,设置一天有效期;后面访问的时候就比较快了
redis的类型有string类型,hsah,可以用于购物车的场景,List,朋友圈展示,set,共同好友,zset 排名;
redis因为数据都在内容中所以查询起来非常快,但是它会通过RDB和AOF持久化数据到磁盘里去
RDB是在指定的时间间隔内生成数据集的时间点快照,它保存了 Redis 在某个时间点上的数据集
AOF 文件是一个只进行追加操作的日志文件
一般当redis挂了数据恢复时会组合来用,先用RDB恢复某个时间节点的数据,后面一部分丢失的数据再用AOF数据去恢复
8、java项目做过了多久时间,能自己独立搭一个java项目吗
答:目前刚接触java相关项目,用了2个月左右,参考其他项目,框架由架构师搭好,我们主要还是写的业务代码,目前还不能自己独立搭一个java项目,但是我相亲给与一定的时候学习,是可以独立完成项目的搭建的。
9、你有什么想问的吗(问了开发语言、项目概况)
答:1、我想了解下咱们的项目大概是做什么的(内部的一些库存盘点等系统)
2、咱们用的开发语言是什么(主要用java、也会有一些go语言相关的)
2021.6.16四面(部门主管):(一周后通知HR面)
1、说说你们公司的人员结构和你的位置及承担的角色
答:见3面1
2、项目中遇到的难点,如何解决,以后怎么避免
答:在去年疫情刚开始的时候刚来上海的前两个星期在家办公,我做的客户经理项目要上线,当时测试环境测得差不多了,发到线上测试的时候发现数据只能读不能写,因为测试环境数据库是单台的,线上是主从多台的,因为是新项目、4.6以上版本才支持MongoDB视图,MongoDB的驱动升级到了最新, 上资料也很少,查阅了相关资料和问同事最后阅读了相关源码后发现需要加一个参数才可以写到主库里,中间时间大概花了3天左右,但是上线一个星期后另外一个部门的领导告诉我们MongoDB官 又升级了驱动,现在直接可以用了,不用加那个参数了,我可以认为刚好那几天我们升级的最新驱动是官 发布的有问题的驱动,一周后他们解决后又发布了最新驱动;这是我遇到比较坑的一个难点吧。
后续想要避免这样的问题,我们得把现在稳定运行的驱动打成自己的Nuget包,并将此次问题上传公共文档(wiki),后续有其他部门同事也需要使用MongDB驱动的时候可以用我们内部打的驱动避免不可预知的意外,同时,我们测试环境的生产环境尽量保持一致,避免某些问题上线后才能发现
3、在项目中如何对接(对接前端,第三方,其他后端应用)
答:(1)大部分项目已经做了前后端分离,我们作为后端开发写完接口提供swagger文档给前端开发,里面有具体的接口地址,入参,出参,其他不清楚的地方在单独沟通下
(2)对接第三方我们提供对外统一的文档地址,里面提供了接口地址、加密方式demo、客户端dll、调用示例(java .net、python等),入参,出参等
(3)对内调用其他后台接口,一般对方提供Nuget客户,客户端里有入参,返回值,如果没有客户端需要自己这边根据对方提供的入参,返回值调用接口
4、平时怎么跟同事沟通交流
答:我觉得工作中,除了责任心,工作能力之外最重要的就是沟通能力,这取决于人的性格、更取决于沟通的技巧
(1)不要抱着有事我找你,没事我都不认识你的态度去交流,平时需求对接正常沟通交流,人家有事找你,即使不是你负责的在不耽误其他事的情况下帮忙解答一下,早上上班的见面了打个招呼,吃饭的时候聊聊天,或者经常跟自己组的人或者关系比较好的人一起吃饭聊天,遇到不熟的也可以聊聊,这样你后面沟通的时候很轻松,而且作为程序员人脉也很重要,以后不在一个公司了,技术问题可以相互交流,后面想跳槽也可以相互内推
(2)多分享分享,可以是工作中的经验,也可以是掌握的技术知识点,当然人际关系更多的是物质的分享,作为程序员工资也不低,不在乎那几十块钱吧,平时买点零食、水果之类的啊,边上的人发一发,俗话说拿人手短,不管怎么样人家心里觉得你这个人不错;前段时间我第一次做java要接消息队列,没弄过,不会弄,我找java架构师,他比较忙,总是敷衍一下,或者发些链接资料让我看,我还是搞不定啊,等下班晚上看他在吃外卖的时候,我买了瓶饮料过去:“春哥,喝瓶饮料,顺势说我接的队列的还有问题,有时间了帮我看下呗”,果然第二天写了个demo给我,到我电脑前帮我运行起来了,搞定。
5、以后的规划
答:我想1-2年内在掌握现有业务技术的前提下学习更多更新的技术;后面有机会的话也是希望做开发管理岗位;俗话说不想当将军的小兵不是好小兵,后面如果有机会也会去独立带团队。
6、离职的原因
答:(1)目前用的技术并不新,且在公司呆了3年左右,现在大部分都是业务代码,重复的增删改成,现在想去换个环境接触下不同的技术及业务,学习更多的东西
(2)目前的同事在公司的年限比较久,稳定性也比较高,目前我想做开发管理岗在现公司的几率也不大,也希望在新公司掌握现有业务后如果有机会也是向上升吧;
7、现在的薪资多少
答: N*14
8、你有什么想问的
答:咱们的主要开发语言是java吗,因为我是做.net的,中间有过度学习期吗
我是敖丙,你知道的越多,你不知道的越多,感谢各位人才的:点赞、收藏和评论,我们下期见!
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91628 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!