找工作的过程中,记录了一些答得不太好的问题。
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年
襄阳雷哥