找工作时的一些面试题和手写代码题

找工作的过程中,记录了一些答得不太好的问题。

 

1. m.sunyur.com采购网络SaaS平台(老板+技术负责人)

redis分布式锁,3种实现方式,set命令(2.8之后提供),setnx和expired。

setnx+setex(自动过期),手动过期(setnx,get,getset,del key,当前时间<超时时间,删除)setnx成功和过期时间,2种方式上锁成功。

 

2. 瓜子二手车(一面)

二分查找,非完全有序。13579531找最大。13-15-6,负数右,正数左,相对位置不变,存

储空间有限

springcloud 组件,redis原理

 

3. 必要商城

spring整合的点(ioc,aop),mq和kafaka区别,重构的点(依赖-代码减半,配置,工具类-),redis哪些业务数据缓存,dubbo和mybatis实现,围绕简历,redis数据结构,用到哪些

 

mq原理(点对点,发布订阅-被所有消费者消费,能够重复消费),注册中心-推拉模式(push更有时效,push坏处-消费方处理不及时,可以设置个数限制。提供方,压力,消费端消费压力),

zk,客户端在zk订阅消息,有变化时,收到通知,一次性拉去最新的列表(推拉结合)

zk和provider心跳检查,检查机制(长连接,定时任务)

 

solr,es区别。es实时搜索,建立索引。solr更新索引慢。solr支持的数据格式更多,jsonxml等,es,json.solrcloud支持分布式。

solr分词(ik,默认搜索,排序结果不满意)。(价格)。首页改版(效果,数据,分析,UI美观),分布式锁,lock和sync区别,1-2-3-8-6-2--,复杂度on,空间map实现,java安全机制(类加载器和字节码文件检查,没有指针,不能直接操作内存,java安全api),性能问题。栅栏,线程countdownlatch。

反射为什么慢(查找加载,装箱,捕捉异常,unsafe jni代码无法优化)

volaite为啥不是线程安全的(i++非原子操作,1个线程。多个线程修改,非互斥。锁,互斥和可见性)

 

静态代理和动态代理区别

静态:编译时,接口,实现,代理类。重复代码。。动态:运行时反射机制实现,灵活性扩展性。灵活选择多个接口的实现,随意切换。

 

4. 饿了么

订单编号,物流用户,查询都很快。订单编号的生成算法。

36匹马,4个赛道,最多几次找出前四

二叉树遍历,非递归算法

主要负责的模块。(商品模块soa改造,统一的商品缓存,redis,增量mq+定时任务,对外接口。3个内部调用方,外部调用方(移动客户端,pc客户端,im客户端,类目、商品、公告、推荐广告位),soa,soa改造,isv,man优化重构)

mysql mmvm,redis持久化机制,redis缓存失效机制

mysql隔离机制

mysql为什么采用b+树

 

5. 每日优鲜

公司的产品要下单体验一下

最复杂的项目,难点,技术业务

每天多长时间写代码:4:2:2

自我介绍,项目经验(主要做的),重构做的工作,怎么带人。

gc算法的名字,dubbo rpc过程,算法技术和业务的选择(业务更有成就感,能感受到好坏),熟悉的语言,看过技术书的名字

用到分库分表(没用到),单量太小

一主七从(1联表查询-可以分解,4业务方使用自己的机器分组,rpc分组,数据库从库),2统计报表(接手的项目,订单量等统计语句。接京东大数据,订单量汇总。3部分实时性-目前是实时的),(项目的演变过程,用es肯定是遇到了问题)jmq和kafaka的区别。redis实现有限制哪些命令?

 

springboot 启动过程,原理

 

内存泄露(流程,jstack,jhat,jmap。本地代码,经常发布-看不出内存泄露,人工)

jprofile,google-purftools

 

 

 

常见gc算法名称(不是实现机制),默认回收器(新生代使用的是:Parallel Scavenge收集器

老年代使用的是:Serial Old收集器),new class一个类,内存回收时机(内存不够了,jvm空闲时。system.gc不行)。

 

堆栈外的内存?(bytebuffer,unsafe。提高效率,降低对gc的影响)

full gc并且相关堆内存能回收并且一个参数disable gc。

unsafe完全自行管理

 

gc影响代码执行多久(普通gc影响不大,full gc1秒以上)

重构从哪些方面(根据简历,复用和代码减半,无效代码。重复代码-工具类。配置简化。单一职责。业务。太老了-有新需求的时候-重写-测试.查询替换,mysql联表)

技术有点老,es,redis等技术都比较常见,没啥特别难的

 

读过了哪些书,技术方面的(京东技术解密、大型网站技术架构-核心原理,看文章)

 

nio?netty

 

node.js好处,坏处

 

大公司获得的提升,

视野(组织结构,知识库,人、技术(rpc)、业务,知道了很多,震撼)

全面的信息化:移动app,考勤审批人力资源,行政采购,健身娱乐,单独一个二级部门,几十人

自带应用场景:无人超市,人脸识别,无人车

技术自研能力:上线自动化,监控,机器,redis,mq,压测机器人,红绿灯监控。

技术(模块化,尽可能复用。合作方式mq,rpc。内部合作方式,梳理代码)。京米支付组建,订单中台。跨平台小程序研发)

业务:京东很多业务和产品,协同

部门组织的协作:小组,运营,测试,产品(测试住场,给出独立意见)

个人提升:软件开发全流程,工作耐心(开会多,文化较为复杂),es,redis,mq系统性能毫无压力,技术的使用场景

从0到1:公司从无到有,逐步发展的过程,创京东,京东技术解密。技术的演化过程。

 

6. 百信

redis最多少个key(25亿个),key和value最大512M

 

重载,intlong返回值,持久化机制,怎么同步

thread线程状态,wait是否有锁,释放锁。并发包

栅栏和闭锁区别

高性能,高可用

mq与其他区别,能否重复消费

hashmap和con

list arraylist区别,crud多种场景

jvm内存模型

string

(向上沟通,脉脉网友)

springcloud的注册中心

 

多线程 Executors的参数

线程实现方式(run,thread,callable)

 

 

数据库表 设计,注意事项

索引失效

 

高可用:请求-负债均衡,RPC,数据库,Redis

数据库:连接池有限,业务分组,多表连接-统计数据(京东大数据)

 

MySQL主要提供2种方式的索引:B-Tree索引,Hash索引

  B树索引具有范围查找和前缀查找的能力,对于有N节点的B树,检索一条记录的复杂度为O(LogN)。相当于二分查找。

  哈希索引只能做等于查找,但是无论多大的Hash表,查找复杂度都是O(1)。

  显然,如果值的差异性大,并且以等值查找(=、 <、>、in)为主,Hash索引是更高效的选择,它有O(1)的查找复杂度。

  如果值的差异性相对较差,并且以范围查找为主,B树是更好的选择,它支持范围查找。

 

 

>=索引失效,组合索引失效

组合+like失效?

 

数据库表,注意事项

 

7. 网商银行

读过的书,在哪学习新技术。下单流程,都是常见问题。

订单支付,非实时?京东金融,mq。返回商户。如果失败怎么办,商户投诉。定时任务,下单5分钟对账。(订单主动对账。确保支付成功,怎么保障)

 

经验:事故-只有1次-质量,评价-性能

阅读源码。

 

8. 百xxx

sleep()可以将一个线程睡眠,参数可以指定一个时间.

而wait()可以将一个线程挂起,直到超时或者该线程被唤醒.

wait有两种形式wait()和wait(milliseconds).

sleep和wait的区别有:

1,这两个方法来自不同的类分别是Thread和Object

2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法.

3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在

任何地方使用

 

2019年

襄阳雷哥

 

你可能感兴趣的:(新人毕业-老人跳槽,工作问题)