认识自己

去年7月入职,就互联网行业来说,公司较为普通,不过也算是大厂了,坐标南京。
进来转眼大半年了,发现方向不对头,不像自己毕业时想的那样,虽然同是开发,但更多的是流程化的编程,杂事很多,语言也不是Java,此时萌生了跳槽的想法。

准备阶段

基础很薄弱,还是校招的基础,只会SSM框架和SpringBoot框架,其他的知识基本忘完了,于是开始复习:
1、Java基础
(1)一些基础知识,数据类型、面向对象、对象创建过程、类加载顺序等一系列非常非常基础的知识;
(2)Java集合,主要有set、list、map;

  • set:分hashset和treeset,这块问的不多,但是还是要知道hashset底层是基于hashmap,由于涉及到不重复的元素,不重复又会引出对象的equals方法和hashCode方法,重写二者的区别;
  • list:分ArrayList和LinkedList,二者区别,增删查的快慢,线程不安全,这里会引出CopyOnWriteArrayList,它是线程安全的,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略。
  • map:很重要,面试基本必问,首先聊hashmap,底层原理在JDK1.7和JDK1.8的区别(数组+链表,1.8后链表转变为红黑树),什么时候开始扩容(加载因子0.75),为什么扩容,扩容在JDK1.7和1.8有什么区别,
    JDK1.8链表会转变成红黑树,什么时候转(链表长度超过8),为什么是8而不是7、6,这里涉及到泊松分布了,简单聊聊即可。hashmap的线程不安全性体现在哪,那么线程安全的集合你知道有哪些?hashtable和concurrenthashmap,
    分别介绍介绍,hashtable简单介绍,主要介绍concurrenthashmap,JDK1.7和JDK1.8的区别(锁粒度,1.7主要是segment,多个桶上锁,1.8是针对key,采用CAS+synchronized方式,为什么不能都用CAS?主要是因为链表元素的添加采用CAS的方式在性能上不如synchronized)

(3)Java多线程

  • 多线程的实现方式:三种,继承Thread,实现Runnable,实现Callable,区别说一下;
  • 线程池:核心参数、阻塞队列的区别、拒绝策略、执行过程,理解了执行过程,可以看一遍源码加深印象,线程池的最大线程数和核心线程数设置(1.先看下机器的CPU核数;2.分析下线程池处理的程序是CPU密集型,还是IO密集型)
  • 锁:synchronized和lock的区别,二者都是可重入锁,底层原理上有啥区别:
    • synchronized:应用于三个地方,普通方法、静态方法、同步代码块,区别是就是类锁和对象锁,通过javap指令分析字节码文件,可以发现底层依赖于monitor对象,同时,synchronized在JDK1.6后还引入了锁优化的机制,
      其实在JDK1.4就已经引入,不过默认是关闭状态,锁优化说白了就是设置了不同级别的锁提高效率(无锁——>偏向锁——>轻量级锁——>重要级锁);还有一些优化:如自旋锁(用户态和内核态的来回切换对于CPU来说代价很大,引入自旋锁),自适应自旋锁(自旋得次数由上一次获取锁的自旋次数决定,次数稍微延长一点点),
      锁的消除(对于线程的私有变量,不存在并发问题,没有必要加锁,即使加锁编译后,也会去掉),锁粗化(当一个循环中存在加锁操作时,可以将加锁操作提到循环外面执行,一次加锁代替多次加锁,提升性能)。
    • lock:说到lock的话,必须要说AQS,AbstractQueuedSynchronizer,lock的底层总结起来就是CAS+AQS,AQS里有三个主要的变量,state(0标识没有线程获得锁),节点线程(当前获得锁的线程),CLH(FIFO队列),说一下过程吧:
      当线程1和线程2同时去获取锁,线程1获得了锁,采用CAS将state置为1,节点线程置为线程1,线程2进行队列,此时又有线程3来的话,发现队列里有线程2,它就会乖乖去排队,然后等线程1执行完成后,state置为0,一个一个陆续去执行,这就是公平锁的实现,
      非公平锁的话就是当线程1释放锁时,此时线程3来了,不管队列里有没有线程,都会去竞争锁。
  • 线程之间的通信方式:1、wait/notify模式,2、volatile,3、join,4、ThreadLocal方式
    这里几乎都会问的,但是主要就是volatile,如何保证可见性和禁止重排序;缓存一致性协议、JVM发送lock前缀指令、CPU的嗅探机制;重排序的话可以了解一些happens before原则;

(4)反射、IO:反射的理解,怎么用,解决什么问题;IO流,了解各个输入输出流,怎么使用即可。
(5)总结:我这属于半年的工作经验,学的还是不够深刻,再下一步继续将这些知识进行一个深度的挖掘!

一个字一个字敲的,还在更新!

半年经验Java面试准备相关推荐

  1. 三年工作经验java面试宝典(个人总结,现分享)

    数据库 1.mysql的隔离级别有哪些,解读下脏读幻读 ①Read Uncommitted(读未提交) 所有事务都可以看到其他未提交事务的执行结果.本隔离级别很少用于实际应用,因为它的性能也不比其他级 ...

  2. 面试Java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前的准备...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:hsm_computer 链接:https://www.cn ...

  3. 8年经验面试官详解 Java 面试秘诀

    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位 ...

  4. 推荐一个很牛逼的 Github 项目:本人历时半年完成的【Java 面试 + Java 后端技术学习指南】,已拿大厂offer

    今天给大家分享一份[Java 面试 + Java 后端技术学习指南]:一份通向理想互联网公司的面试指南,包括 Java,技术面试必备基础知识.Leetcode.计算机操作系统.计算机网络.系统设计.分 ...

  5. 面试阿里挂了却拿到网易、点我达offer,一个三年经验Java程序员的面试总结

    转载自  面试阿里挂了却拿到网易.点我达offer,一个三年经验Java程序员的面试总结 前言 15年毕业到现在有三年多了,最近去面试了阿里集团(菜鸟网络,蚂蚁金服).网易.滴滴.点我达,最终收到点我 ...

  6. 参加完阿里Java面试:一面+二面+三面+HR四面,后的复盘经验总结!

    阿里中间件团队一面: 第一步先自我介绍? 介绍自己的项目经验和个人的擅长点,面试官主要考察你的表达能力和语言精简能力. 第二步:项目中做了什么,难点在哪里? 主要是想了解参与过技术难度最大的项目难点, ...

  7. BAT Java面试完整汇总:面试准备(心态+简历)+面试题目+6条面试经验

    今天分享的BAT面试完整内容主要包含: 面试前的心态准备(3点建议) 技术硬实力包含的范围(50题目) 个人简历突出和优化(3点优化步骤) 个人软实力的提升(6点提升维度) BAT面试经验总结(1点总 ...

  8. 8 年经验面试官详解 Java 面试秘诀!

    日前,全球知名 TIOBE 编程语言社区最新发布 11 月的编程语言排行榜,根据最新的榜单显示,相比上个月编程语言 Top 5 并没有太大的变化,其中 Java 依旧稳坐榜首,随后分别是 C.Pyth ...

  9. 架构师面试题:2年工作经验java简历包装,面试为什么公司不通过

    1, 简历适度包装,不等同弄虚作假 2, 实事求是,才能让职场走得更顺 3, 诚信是用人的最基本底线. 对于java工程师的面试,绝大多数的公司不是去给你做两个题,考考你对于整个java系统知识的了解 ...

最新文章

  1. SQL Server查询备份日期和备份设备名
  2. 反转 鼠标_梦幻西游:剧情反转?挖图挖出环装,在晶清加持下3000W到手
  3. 剑指offer——变态跳台阶
  4. tkinter 笔记 checkbutton 勾选项 (莫烦python笔记)
  5. 函数或全局变量重复定义时会怎样?
  6. 请求接口时使用时间戳
  7. Ubuntu中安装FastDFS
  8. Ubuntu 18.04 安装中文输入法
  9. 实战快速恢复Exchange 2010误删除的邮箱
  10. 程序下载至开发板 芯片超时无应答,无法连接
  11. retainall的问题
  12. 斗智斗勇 -- 谷歌浏览器的主页被篡改
  13. Ubuntu 中文字体美化方案大全 (3): 使用Windows XP字体
  14. 阿里云申请免费SSL证书
  15. 运算重载符号(C++)
  16. C++程序设计:补齐函数求长方体体积
  17. 陆奇:奇绩创坛选项目不看赛道而是看人,本质上是一个创业者社区
  18. 在微信小程序里引入Vant Weapp组件库详细步骤
  19. 华为笔试题-素数伴侣
  20. 运营小技能:最有效的公众号运营技能详解(持续更新中)

热门文章

  1. 华为digix算法大赛2020机器学习赛道-ctr预估初赛/决赛rank1
  2. MySQL-5.7.18绿色版安装和配置
  3. 文献阅读:Stylized Neural Painting
  4. [CVPR2022]3D Photo Stylization: Learning to Generate Stylized Novel Views from a Single Image
  5. Spring Cloud Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(JMeter模拟测试)
  6. 基于FPGA的数据采集、通讯和存储系统设计(即FPGA+RTL8211千兆以太网+SD卡存储+RTC+Uart+AD7606数模转换+电流放大采集等硬件设计及程序验证)
  7. 【多传感器融合定位】【从零开始做自动驾驶定位_任佬】【所学到的东西汇总】
  8. 跌倒智能监测警报系统市场现状及未来发展趋势分析
  9. certbot申请通配符域名证书
  10. 三角形(triangle)