java工程师基础知识面试

来源:互联网 发布:android系统源码架构 编辑:程序博客网 时间:2024/05/22 17:42

最近思考到的初(中)级java开发工程师基础知识可以考察的点,理论,实践都有涉及。个人理解并不是要这些点都掌握才算合格的java工程师,面试的时候也不是要全问一通,抽取一些组合提问都合理。只是列出这些点,暂时没有准备问题的答案

java语言基础知识

  • 1个char类型数据占几个字节
  • jdk1.8以前,单线程环境下字符串拼接用什么合适,StringBuilder,为什么
  • hashCode方法的作用,重写hashCode方法注意什么点
  • equal方法的作用,重写equal方法注意什么点
  • java对象引用的理解,对象深/浅拷贝

并发知识考察

  • 单个java程序中,多线程之间实现一个 等待/通知模型,使用
  • Lock/condition可以,使用synchronized-wait/notify也可以。 线程池的简单使用,参数设置
  • violate的作用,解决什么问题,基本原理;提及一个常用场景,提示 AtomicInteger内部的实现,线程启动停止位
  • ThreadLocal的作用,有什么好处,基本原理;提及一个常用场景
  • 简述currentHashMap的结构,认识

JVM基础知识

  • 简述JVM中的内存空间布局,新生代,老年代,新创建的一个对象的生命周期
  • gc的作用,触发gc的时机,副作用
  • java的线程模型,用户级线程还是内核级线程,什么比例关系,线程栈中保存什么,和公共堆中数据的交互
  • 查看JVM运行状态的几个常用命令,jstat, jstack, jmap, 简单说说了解

java进阶问题

  • 简述java泛型,是怎么个实现方式,和object类型比有什么优势
  • 简述java动态代理是怎么实现的
  • 简述java类加载器,双亲代理,这样的好处

基础数据结构&基础算法

  • 二分查找,实现,时间复杂度
  • 快速排序,实现,时间复杂度
  • 二叉树,二叉树中序遍历,实现,时间复杂度
  • 数组的循环队列,实现
  • 优先队列(大顶堆),简述低层数据结构,插入删除逻辑,时间复杂度
  • 两个数组求并较差,最初级的两层循环,学会使用set降低时间复杂度
  • 简易的bitmap
  • hashmap的简单实现原理,填装因子,基于链表的碰撞检测,扩容,rehash

数据库(Mysql在InnoDB下)

  • 创建选课系统相关表(tb_student, tb_course, tb_student_course, tb_student_score)
  • 查询某个课程所有选课的学生
  • 插叙某个课程所有几个的学生
  • 查询一个学生的所有课程的分数
  • 建立索引有什么需要注意的点
  • 索引怎么和数据库中的数据结构对应起来
  • 什么时候垂直分表,什么时候水平分表
  • 数据库集群环境下,写后读,如果不在是事务中,会有什么影响

Linux常用命令

  • grep
  • wc
  • tail
  • sort uniq
  • sed awk
  • top
  • ps
  • less vim cat
  • access.log日志中,查询某个ip的请求次数;请求次数最多的10个ip,找出请求最多的一个小时

网络原理

  • tcp建立链接和断开链接
  • 服务端建立socket(tcp)链接写法,客户端建立socket(tcp)链接写法
  • udp和tcp的区别
  • 说说http协议和tcp协议之间的关系

常用设计模式

  • 生产者-消费者
  • 观察者
  • 状态机
  • 装饰模式