面试笔记:面经-瓜子


一、自我介绍

个人背景、项目经历、实习经历。


二、简历相关

2.1 React Native

2.2 印象最深的项目


三、Java后台

3.1 线程创建

  • 继承Thread类并重写该类的run()方法。
  • 实现Runnable接口创建线程重写run()方法。
  • 创建Callable接口的实现类并实现call()方法,然后创建该实现类的实例(从java8开始可以直接使用Lambda表达式创建Callable对象)。

3.2 Java异步实现方式

  • JDK1.8之前的Future
    JDK并发包里的Future代表了未来的某个结果,向线程池中提交任务的时候会返回该对象,可以通过future获得执行的结果,但是JDK1.8之前的Future有点鸡肋,并不能实现真正的异步,需要阻塞的获取结果,或者不断的轮询。
  • JDK1.8之后的Future
    JDK1.8中提供了lambda表达式,使得Java向函数式语言又靠近了一步。借助JDK原生的CompletableFuture可以实现异步的操作,同时结合lambda表达式大大简化了代码量。
  • Spring的异步方法
    先把longTimeMethod封装到Spring的异步方法中,这个异步方法的返回值是Future的实例。这个方法一定要写在Spring管理的类中,注意注解@Async

3.3 JVM内存

JVM内存区域主要分为:

  • 线程私有区域:程序计数器、虚拟机栈、本地方法区。
  • 线程共享区域:JAVA堆、方法区。
  • 直接内存

3.4 Java GC

  • 如何确定垃圾
    (1)引用计数法:通过引用计数来判断一个对象是否可以回收。即一个对象如果没有任何与之关联的引用, 即他们的引用计数都不为0,则说明对象不太可能再被用到,那么这个对象就是可回收对象。
    (2)可达性分析:为了解决引用计数法的循环引用问题,Java使用了可达性分析的方法。通过一系列的GC roots对象作为起点搜索。如果在GC roots和一个对象之间没有可达路径,则称该对象是不可达的。不可达对象经过两次标记为可回收对象,则将面临回收。
  • 垃圾收集算法
    (1)标记清除算法:分为两个阶段,标记阶段标记需要回收的对象,清除阶段回收对象占用的空间。
    (2)复制算法:按内存容量将内存划分为等大小的两块。每次只使用其中一块,当这一块内存满后将尚存活的对象复制到另一块上去,把已使用的内存清掉。
    (3)标记整理算法:标记阶段和标记清除算法相同,标记后不是清理对象,而是将存活对象移向内存的一端。然后清除端边界外的对象。
    (4)分代收集算法:新生代采用复制算法,老年代采用标记复制算法

3.5 TCP和UDP

  • TCP提供面向连接的、可靠的数据流传输;
    UDP提供的是非面向连接的、不可靠的数据流传输。
  • TCP传输单位称为TCP报文段
    UDP传输单位称为用户数据报
  • TCP注重数据安全性
    UDP数据传输快,因为不需要连接等待,少了许多操作,但是其安全性一般

四、代码题

4.1 反转链表

public static class Node {
    public int data;
    public Node next;

    public Node(int data) {
        this.data = data;
    }
}

public static Node reverseList(Node node) {
    Node pre = null, next = null;
    while (node != null) {
        next = node.next;
        node.next = pre;
        pre = node;
        node = next;
    }
    return pre;
}
发布了90 篇原创文章 · 获赞 10 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/Fan0628/article/details/100593487