java 面试

面试感触

最近在换工作,面了不少公司,拿到了满意的offer,谈一下作为java开发人员应该具备的技术点

个人背景

  • 学校:**大学
  • 专业: 软件工程
  • 学历:本科
  • 毕业时间:2017年

工作一年应该具备的能力

我认为如果你一个工作经验为1-3年的开发人员,使用开发语言为java,这个时候需要具备以下能力
基础篇:

  • 异常体系
  • 集合体系
  • 线程体系
  • IO 体系

提升篇:

  • jvm
  • 数据库优化
  • 性能优化
  • Spring

项目相关

  • 架构清晰
  • 难点、亮点
  • 你的看法(设计缺陷、后期发展)

检验能力

看到上面所提及到的知识点,你可能在想这不是随便一个开发人员都会的吗?现实情况并非如此。可以来检验一下,看看你掌握的程度。
基础篇

  • 异常体系
    • throw throws 区别
    • try 和 finally 内都有return的情况
    • 检查异常和非检查异常
    • 项目中针对异常的处理方案(错误状态码、全局异常处理、日志记录等)
  • 集合体系
    • ArrayList 和 LinkedList
    • HashMap、HashTable、CurrentHashMap 的实现原理、区别、使用场景
    • 集合中Set 如何实现的
    • LinkedHashMap 作用、以及如何利用他实现缓存的LRU
  • 线程体系

    • 创建、启动线程方式
    • 线程的几种状态
    • 线程池的类型、内部结构(阻塞队列、工作线程集…)、初始化参数
    • 线程之间的几种通讯方式
    • 线程的中断机制
    • 锁:synchronize 和 juc中的锁区别
    • 如何解决死锁问题
    • ThreadLocal
  • IO体系

    • BIO、NIO、AIO区别以及对应java实现
    • IO流等
    • 序列化、反序列化、自定义序列化等

提升篇

  • jvm
    • jvm 运行时数据区
    • JMM
    • 什么样的对象可以是GC Roots?
    • 垃圾回收算法、垃圾回收器
    • jstack 、jmap分析栈和堆方法
    • 类加载机制
  • 数据库优化
    • 数据库的存储引擎
    • 索引的实现原理、使用技巧
    • 分析工具explain
    • join 操作的优化方式
  • 性能优化
    • CPU (top+jstack 去排查)
    • mem (top+jmap+内存分析工具排查)
    • IO
    • NET
  • Spring
    • AOP: jdk动态代理和CGlib 代理实现方式区别
    • ICO如何管理Bean
    • Bean 作用域、加载方式(lazy-init、nonlazy-init)

以上只是列举了部分经常问的问题,但是万变不离其中,从结构体系到实现原理掌握清楚了问题怎么变,都不会难到你的。

这边我想特别说一下性能优化这一块,因为这个是问得比较多的,但是我们开发确实很少接触的。这个时候回答出主要思路即可。

  1. 优化点分为四个CPU、IO、MEM、NET
  2. 如何定位问题:top、iostat等命令查看使用率
  3. jstack 、jmap等工具进一步定位具体问题
  4. 通过jvm 参数调整来进行优化

总结

对于搞技术的人来说,能力永远是你和人家谈判的筹码,唯有不断学习,不断总结才能让你在这个森林里有一席之地。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值