前言:

BATJ等互联网公司的高薪和福利吸引了很多工程师的加入,面试难度也水涨船高。这不昨天有个同学找我说,上周去京东面试,一面就没过去被刷下来了,非常受打击。经过仔细交谈之后觉得他还是技术储备不够,对一些知识了解的不深,所以说他这次被刷的不亏,涨涨经验也是很好的。根据他的面试经过我整理一下题和答案,希望在金九银十能帮助大家。

TreeSet/HashSet 区别

顾名思义,首先是结构上的不同
1、TreeSet背后的结构是TreeMap,也就是红黑树,能够实现自动排序。它通过equals方法或者compareTo方法进行内容的比较。
2、HashSet背后是HashMap,key是无序的,只能做外部排序。既然是Hash,那么就要重写其中对象的hashCode和equals方法
另外,还有个细微的差别可以拿来装b:
1、HashSet可以接受null值,有且只有一个
2、TreeSet默认不可以接受null值,会直接抛出空指针异常 set里没有重复数据,TreeSet里连虚无都没有。

另外本人整理收藏了20年多家公司面试知识点整理 ,以及各种Java核心知识点免费分享给大家,下方只是部分截图 想要资料的话也可以点击795983544领取 暗号CSDN。

HashMap 如何解决冲突,扩容机制

烂大街的问题,问哪答哪吧。这样的东西就是靠背。
HashMap的内部结构其实是数组+链表(java8后如果长度大于8则转换为红黑树)。HashMap初始化时,默认有16个hash槽。
存入对象时,首先,通过对象的hashCode,定位到hash槽。如果多个对象同时落入同一个槽,那么就会使用链表解决本槽上的冲突。
HashMap在创建时,会有一个负载因子。每次put操作,都会检查当前容量是否会超出阈值(initailCapacity*loadFactor)。如果超出,则扩容为当前的两倍。扩容后,数据需要重新散列,也就是transfer方法。

经验:resize非常耗时,所以如果能够提前预估容量,可以把initailCapacity提前固定下来。

ConcurrentHashMap 如何做到高并发的

简单点说,使用了分段锁(分离锁)。每一把锁用于锁住容器中的一部分数据,减少线程间对锁的竞争。
这道题往深里问会死人的,篇幅有限,不啰嗦。

线程池平常怎么用

普通的场景,使用工厂类Executors创建就可以了。常用的有Single、Fixed、Cached三种。
更多时候,为了更精细的控制,会直接对ThreadPoolExecutor类进行定制。阿里的规范也要求这么搞(当然要舔一舔),我尤其关心其中的阻塞队列和饱和策略。
当然,你只有对阻塞队列和拒绝策略熟悉才能这么说。否则给自己挖坑就太不聪明了 他们很喜欢你提到阿里规范,这让我觉得jdk设计的很low。

多个线程等待到某一节点然后统一放行有几种实现方式?

最经典的就是CountDownLatch,主线程阻塞在await方法,每个线程调用countDown。可以解决一些经典的赛马问题。
还有一个变种就是CyclicBarrier。每个线程都阻塞在await方法,达到一定阈值集体放行。另外还可以使用一些较初级的api,比如Thread的join方法。Future的get方法等。复杂不推荐。 也可以答sleep啊。有什么问题么?我用while等待一个变量也是可以的,但我为什么要这么做?

数据库索引结构

B+ Tree,为了适应缓慢的磁盘而生的一种索引结构。必须保证按照索引的最左前缀查询。
Hash 和HashMap类似,处理冲突的方式是链表
pg的索引结构就多了去了。Mysql这么少怎么感觉怪怪的?难道要我回答存储引擎的区别?

select * from t where a=? and b>? order by c limit 0,100 如何加索引

知道这个就结论就行了=> 当order by 字段出现在where条件中时,才会利用索引而无需排序操作。其他情况,order by不会出现排序操作。
按照最左原则,我可以创建 (a,b) 的索引。
什么是聚簇索引和非聚簇索引
一个表只能有一个聚簇索引。主索引文件和数据文件为同一份文件,默认的InnoDB就支持聚簇索引,B+ Tree的叶子节点上的data就是数据本身。而MyISAM就不支持聚簇索引,它的叶子结点存放的不是数据本身,而是数据存放的地址。在文件结构上,会分为一个索引文件、一个数据文件。 对编程来说没什么鸟用。

解释下乐观锁悲观锁

悲观锁总是假设情况最坏,每次操作数据都认为别人会修改,就加锁来保证安全。后面的访问者只能等待。数据库中的行锁、表锁,java中的同步关键字等,都属于悲观锁。
乐观锁正好相反,总是假设最好的情况,不用对数据加锁,但多了一次额外的判断操作。比如concurrent包里大量的CAS操作、判断新旧版本号机制等。 悲观锁是老婆,有你独占;乐观锁是炮友,按预约规划…

动态代理的实现方式?CgLib 和 jdk 的代理有什么区别?

java中通过实现InvocationHandler接口来实现动态代理,然后使用Proxy将其初始化。
Cglib使用了ASM自己吗生成框架,可以代理普通类,但代理不了final类,而jdk的只能代理接口。 在spring里,cglib胜出。

分布式锁有哪些主流实现方式?redis 和 zk 锁有什么区别?

大体分为两类。
乐观锁: 基于版本号机制和CAS实现,与存放版本号的存储无关。
悲观锁:

  1. 基于数据库记录,进入时写数据,退出时删记录
  2. 数据库行锁,比如分布式quartz,它是一把排它锁
  3. 基于Redis的setnx函数(由于大多数会设置超时,所以推荐用带px的set原子函数)
  4. 基于zookeeper

区别:
redis获取锁是轮训机制。锁释放后会有多个调用者争抢,某些任务有可能饿死。
zk是监听机制,有变动会接到通知。除了非公平锁,也可以实现公平锁。
从优雅性来说,显然redis胜出

ThreadLocal 作用是什么?说下用法

ThreadLocal用来隔离数据。
ThreadLocal中存放的是与线程相关的数据,底层实际上是一个map,通过线程可以获取存储数据的map。
这种方式与Servlet中的Request类似。一些需要绑定到线程的数据,比如一些线程的统计数据,就可以放在这里。 据说这是一种线程同步方式,但它明显无锁啊。

设计秒杀系统要考虑哪些点?

  1. 数据预热 秒杀都是瞬时操作,不要等流量来了再加载数据。可以提前对数据进行预热,比如加载到缓存等。
  2. 缓存 包括CDN缓存和数据缓存。保证缓存系统的高可用,数据随后落地。
  3. 解决超卖 引入MQ,串行化操作库存,达到阈值后不再消费,并关闭购买功能。或者直接操作缓存。
  4. 流量削峰 通过引入MQ,将耗时业务进行削峰,平稳处理用户需求。
  5. 熔断限流 熔断,优先保证主要业务的进行。限流,识别异常流量,进行封锁;同时,允许部分请求失败。
  6. 弹性扩容 在判断系统负载达到极限时,可以通过增加服务器的途径抵抗峰值。需要打通运维环境,能够快速扩容。

总结:

互联网大厂比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

另外想要面试答案的小伙伴请点击795983544 暗号CSDN自行领取,本人还整理收藏了20年多家公司面试知识点以及各种技术点整理 下面有部分截图希望能对大家有所帮助。

Java2年去京东一面,卒,我与大厂程序员到底差在哪里?相关推荐

  1. 某程序员总结大厂程序员性格:阿里出来的是人精!百度出来的脾气好!美图出来的一根筋!头条出来的心高气傲!京东出来的满嘴是兄弟!...

    请点击上面 一键关注! 各个互联网大厂出来的员工性格有啥不同? 一个程序员在接触了一圈几个大厂出来的同学以后,得出了如下结论:阿里出来的大多是人精:腾讯出来的大多是傻白甜,打不得骂不得:百度出来的温文 ...

  2. go语言和java比_去过大场面试后,java程序员有没有必要转学Go语言?

    2019年去过字节跳动.鹅厂面试java技术岗,我就纳闷了,怎么都会问到我熟悉GO语言开发吗,难道你们招的不是java程序员,而是GO程序员吗. GO语言 Go语言是谷歌在 2009 年发布的一款编程 ...

  3. 大厂程序员跳槽去小公司当CTO,是一种怎样的体验?

    许多程序员在人到中年之后,会选择从技术岗位转到管理岗位.如果从大厂跳到小公司当CTO,是一种怎样的体验? 一个BAT的程序员接到某创业小公司的邀请后,发出了这样的疑问,不知自己如何选择. 网友回复:看 ...

  4. 漂洋过海去学习,一文读懂程序员如何从初级升级到高级

    微信搜索[程序员小跃],和大家一起奔跑 Slogan:当你的才华还无法撑起你的野心时,那应该静下心来好好学习 还记得前几天跃哥的这篇推文吗?<知道吗,你和高级工程师差距巨大>这篇和大家简单 ...

  5. 老程序员都去哪儿了?国内的大龄程序员都去哪了

    摆在老程序员们面前有三条路,一是转行,二是继续钻研成为技术大牛,三是转型为管理人员. 我最近采访了十五位30岁以上的老程序员们,在此我想发表下我的观点. 网络上总有这类观点-- 「如果所有的技术都想着 ...

  6. 老板让我去招聘几个能做事的程序员,引出了一场对职业规划的思考

    最近面试了几个工作三年,四年以及五六年的程序员.每次面试我都会问,你的职业规划是什么?他们基本上回答的都是,目前来说主要还是想着做技术方面,如果有管理的机会话也是可以的(其实大部分程序员应该都是这个想 ...

  7. 如何看待互联网大厂程序员因厌恶编程,辞去月薪2w+的工作去当司机?

    链接:https://www.zhihu.com/question/402933897/answer/1300776256 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 这是前段时间网上比较火 ...

  8. 金九银十征服、阿里、京东、字节跳动,的程序员和他们的公众号

    学习如逆水行舟,不进则退:今天给大家精心挑选的这几个超级牛逼的公众号,在行业深耕已久,这些号一般是由深耕技术多年的IT老兵.名校超级学霸运营! 表哥有话讲 国内最大的数据从业者分享平台.20W程序员聚 ...

  9. 我要去见最酷的硅谷华人程序员

    硅谷Start-up公司遍地开花,创业(Start-up)文化也深入每个硅谷人的性格和生活. Start up 是激情,是热爱 是敢梦,是拼搏 这些词造就了硅谷 也造就了"走起乐队" ...

最新文章

  1. android viewgroup 事件,android中viewgroup的事件传递分析
  2. RFID采用率迟迟不涨,原因何在?
  3. UA MATH564 概率论 样本均值的偏度与峰度
  4. SAP One Order redesign里的新CDS view
  5. php利用ajax文件上传,如何在PHP中利用AjaxForm实现一个文件上传功能
  6. 制作Slider组件
  7. mac怎么配置php开发环境变量,Mac M1安装mnmp(Mac+Nginx+MySQL+PHP)开发环境
  8. python dataframe 重命名列_Python-重命名pandas列
  9. java:线程的六种状态
  10. JavaWeb后端代码自动生成工具
  11. 【FinE】资本市场理论(1) CAPM模型
  12. 【今日CV 计算机视觉论文速览 第147期】Tue, 23 Jul 2019
  13. 付费?不存在的,20 行代码将电子书转换为有声小说
  14. ffplay控制音量方法
  15. Windows游戏开发感想一个完整的Windows窗口程序
  16. 域名过期了,但是备案信息还是我的,网站被人举报涉黄怎么办?
  17. python的cfg是什么模块_使用安装模块设置.py以及设置.cfg
  18. Android BitmapFactory.decodeResource()方法参数代表什么意思
  19. 基于Python+django的 天天生鲜超市网上购物商城-计算机毕业设计
  20. 第四章 函数的故事(1)超详!!!

热门文章

  1. 3DMAX2020安装卸载教程
  2. 网络学习——OSPF区域泛洪扩散
  3. 《人工智能及其应用》第2章书后题 | 西电《人工智能导论》作业
  4. 从“删库跑路”聊聊开启BinLog防止误删表数据、结构及数据库
  5. 龙族那些京岛你心里的桔子
  6. 抖音发布五一数据报告:重庆为最热门旅游城市
  7. 新疆哪个大学有计算机网络专业,新疆广播电视大学计算机网络技术专业_新疆报名_网络教育计算机网络技术专业教学计划_中国教育在线...
  8. 商业智能(BI,Business Intelligence)。
  9. phpstorm10.0.0破解(10.0.2已失效)
  10. Hbuilder app开发之app启动图片