转载

你去面试,需要准备什么知识点?

概述

年中或者年底绩效出来后,总是几家欢乐几家愁。绩效好的机会多的老板信任的,会更加有干劲。绩效不好的,老板不看好的,可能就会有离职的冲动。

如果你有离职的想法,那么还是需要花一些时间准备一下,毕竟现在外面好的互联网公司对程序员的要求还是蛮高的,需要你有各种能耐。

这篇文章主要是介绍一下我自己从毕业到现在碰到的一些面试题。部分题目给出了答案,部分试题则没有。

JAVA 基础

  • int 占用几个字节

    答案:

    4个

  • 不用第三个变量,如何交换两个变量的值

    public class TestSwitchVar {
      public static void main(String[] args) {
          int a = 1;
          int b = 2;
          a = a + b;
          b = a - b;
          a = a - b;
          System.out.println(a);
          System.out.println(b);
      }
    }
  • JAVA动态代理使用什么技术实现的

    答案:

    反射

  • JAVA类加载器的原理

    答案:

    学习JAVA类加载器

集合类

  • HashSet的add方法是如何实现的,如何去重的;

    答案:

    HashSet的底层是使用HashMap来实现的,调用add方法的时候,底层也是用HashMap的put方法来实现的。HashSet之所以具备去重的能力,也是因为HashMap的put方法中,如果发现key已经存在了,会覆盖key对应的值,但是对于HashSet来说,还是原来那个key。也就是说Key set并没有任何变动。

  • HashMap的实现原理;

    答案:

    看我之前写的 HashMap的put和get方法原理 和 HashMap扩容 以及 HashMap多线程下发生死循环的原因 这几篇博文即可。

  • JDK 1.7 ConcurrentHashMap的实现原理

    答案:

    ConcurrentHashMap学习
  • ConcurrentHashMap在JDK 1.8的实现跟JDK7有什么不同;
  • ArrayList是线程安全的吗

    答案:

    线程不安全的ArrayList
  • CopyOnWriteArrayList是如何实现线程安全的;

    答案:

    CopyOnWriteArrayList的使用场景貌似很少很少

NIO

描述JAVA NIO的工作原理,相比JAVA IO有什么优势

答案:

学习NIO

线程和并发

  • sleep方法和wait方法有什么区别

    答案:

    1、wait方法释放锁,sleep方法不释放锁

    2、wait方法必须在同步代码块里,比如synchronize关键里,但是sleep方法没有这限制

  • wait()方法调用后,到底发生了什么事情

    答案:

    Object wait方法
  • 除了使用synchronized关键字之外,还有其他同步的做法吗

    答案:

    volatile关键字

    lock()和unlock()

  • 什么是daemon 线程
  • 如果有多个线程要并发操作一个文件,如何做到线程安全,请写出伪代码
  • 什么是线程安全
  • volatile关键字有什么用

    答案:

    浅析volatile关键字
  • 悲观锁和乐观锁的区别

  • 有哪些并发模型,用过哪些并发模型,选择这些模型有什么依据(比如说Master-Worker模式)
  • 用过ThreadLocal吗?什么场景下用过
  • 线程有哪几种状态
  • CAS的原理

    答案:

    学习一下CAS
  • 写一个发生死锁的JAVA代码,并描述一下如何避免死锁?
  • 线程要进入阻塞状态,操作系统是如何操作的(涉及到用户态和内核态)
  • 谈谈如何进行"锁"的优化
  • 什么叫可重入锁

JVM

  • 垃圾回收算法有哪几种?各种有什么特点

    答案:

    JVM专栏
  • 什么时候触发young gc,什么时候触发full gc

    答案:

    新生代中的Eden满了就就行young gc,老年代满了,就进行full gc。

  • 如果JAVA进程突然挂掉了,怎么查看挂掉的原因

    答案:

    java进程挂掉后,会产生core dump 文件,可以使用jstack 命令输出线程堆栈信息。

  • JVM是怎么调优的

    答案

    JVM调优-学习篇
  • JVM监控工具有哪些,各有什么用途,简单介绍一下用法
  • 描述一下JVM的内存模型
  • 怎么知道是哪行代码导致系统CPU高

mysql

  • 使用什么关键字来分析SQL的性能
  • 建立索引有什么注意点

    答案:

    Mysql 索引知识点

什么是覆盖索引

答案:

Mysql 索引知识点
  • 什么情况下,需要建立复合索引

    答案:

    Mysql 索引知识点
  • 索引原理是什么,底层用什么数据结构

    答案:

    Mysql B+树学习
  • 应用的数据库是如何做容灾的

  • 如何做到动态增加业务字段,而代码无需改动
  • 行锁和表锁的区别,innodb引擎用的是哪种锁
  • innodb myisam的区别

    答案:

    Mysql 索引知识点
  • mysql批量插入数据的时候,怎么优化

  • 你参与的项目,有做分库处理吗,路由到分库的规则是什么?

nosql

用过哪些NoSQL数据库,简单介绍一下

缓存

  • memcache的原理
  • memcache和redis的区别
  • 系统有用本地缓存吗?是如何做命中率的统计的
  • 选择堆外缓存和堆内缓存的依据是什么
  • 从堆外缓存获取数据需要反序列化,有办法避免吗?说一下思路即可

算法

  • 一致性hash算法的原理
  • 使用JAVA实现快速排序
  • 使用JAVA实现二分查找
  • 使用JAVA进行二叉树的遍历(前序/中序/后序,写一种即可)
  • 红黑树的原理

HTTP

如何用JAVA代码解析一个HTTP请求,描述一下实现的思路

HTTP 1.0 HTTP1.1 HTTP 2.0的区别

答案:

HTTP1.0 HTTP 1.1 HTTP 2.0主要区别

架构设计

  • 系统是如何容灾的
  • 系统的缓存设计是怎么做的
  • 如何做防雪崩
  • 描述一下限流的具体方案或者算法

linux

  • shell用什么命令查看硬盘和内存的使用情况
  • shell脚本用什么变量来接收参数

Spring

  • Spring IOC 的原理
  • Spring 加载bean生命周期

    答案:

    Spring中的bean的生命周期,如果从细节上来讲,是非常复杂的,从粗粒度上来讲就是:

    1、调用构造方法创建对象;

    2、调用对象的set方法设置属性值;

    3、可以使用Spring提供的一些接口,可以在bean set方法调用完后,做些处理工作或者注入一些自定义的代码实现;

    4、整个bean初始完后,所有的依赖对象注入后,如果想做一些初始化工作,可以利用@PostConstruct等一些注解

    5、销毁bean之前做一些处理工作

    6、销毁bean

  • Spring AOP的实现原理

  • Spring使用了哪些设计模式
  • cglib和动态代理有什么区别
  • cglib和动态代理哪个效率高
  • spring bean 的scope有哪几种

设计模式

请写出一个高性能线程安全的单例出来

public class Singleton
{
    private static Singleton singleton = null;
    private Singleton()  {    }
    public static Singleton getInstance()   {
        if (singleton != null)  {
           return singleton;
        }

        synchronized (Singleton.class) {
                if (singleton== null)  {
                    singleton= new Singleton();
                }
        }
    }
}

描述一下模板设计模式

微服务

  • 什么是微服务
  • 描述一下你用过的微服务框架的原理
  • 微服务使用什么技术进行数据序列化和反序列化的
  • 了解thift吗?请解释一下thift的原理
  • 微服务的服务治理是怎么做的
  • 微服务有什么优缺点

MQ

  • rabbitMQ和kafka的区别
  • rabbitMQ的实现机制
  • 如何保证消息有序
  • 如何防止消息丢失

网络

  • TCP/IP 三次握手的过程
  • Netty(关于netty,请参看Netty专栏)

其他

  • 系统遇到过什么难题,怎么解决的
  • 最有成就感的一件事情是什么

原文链接

你去面试,需要准备什么知识点?

原文  https://juejin.im/post/59bf60a2f265da0672283374
正文到此结束
Loading...