快手Java开发 一二面面经(转载)1

答案我自己看着写的,未必一定对,希望有个offer吧,不想去某个坑逼辣鸡公司。

 二面部分还没写完,差不多了吧。。。

作者:GuiStarLee
链接:https://www.nowcoder.com/discuss/417783?type=post&order=time&pos=&page=1&channel=
来源:牛客网

一面    一个小时

1:自我介绍
2:Spring IOC
  

 

 
3: Spring AOP
 

 

 

4:jvm内存结构

 java内存通常被划分为5个区域:程序计数器(Program Count Register,指向当前线程要执行的下一段指令代码)、本地方法栈(Native Stack,为 JVM 使用到的 Native 方法服务。也就是直接和底层交互的代码)、方法区(Methon Area,静态变量+常量+类信息(版本、方法、字段等)+运行时常量池存在方法区中。)、栈(Stack,为 JVM 执行 Java 方法服务)、堆(Heap,堆是Java虚拟机所管理的内存中最大的一块存储区域。堆内存被所有线程共享。主要存放使用new关键字创建的对象。所有对象实例以及数组都要在堆上分配。

 https://github.com/CyC2018/CS-Notes/blob/master/notes/Java%20%E8%99%9A%E6%8B%9F%E6%9C%BA.md#%E4%B8%80%E8%BF%90%E8%A1%8C%E6%97%B6%E6%95%B0%E6%8D%AE%E5%8C%BA%E5%9F%9F

 

 

 

 

 
 
 
 
 
 
5:重载与重写
 
(面试官还写了例子让我判断是不是重载)
6:Excutors、 线程池的参数含义以及线程池的工作原理

 

 
7:什么时候用到线程池的拒绝策略

 

 
8:拦截器与过滤器
 
9:创建线程的方式以及区别
  

1)继承Thread类创建线程  编写简单,直接使用this即可获得当前线程。

2)实现Runnable接口创建线程  编程复杂,如果要访问当前线程,则必须使用Thread.currentThread()方法。线程类只是实现了Runnable接口或Callable接口,还可以继承其他类,

3)使用Callable和Future创建线程

 
10:算法
1):求二叉树的深度   (递归,根节点为null,返回0,;左右子树为空,返回1,否则就找左,右子树的深度,找大的那个加一)
2):给定一个数组 求某个位置上的元素 满足左边的全小于它,右边的全大于它(新建俩数组,找每个元素左侧最大值,和右侧最小值。之后再遍历一遍就行)

作者:GuiStarLee
链接:https://www.nowcoder.com/discuss/417783?type=post&order=time&pos=&page=1&channel=
来源:牛客网

二面  一个小时

1:自我介绍
2:项目
3:序列化有哪些方式
  将数据对象转换为二进制流的过程称为对象的序列化(Serialization)。反之,将二进制流恢复为数据对象的过程称为反序列化(Deserialization)。
  (1)

   (2)

   (3) 

 
4:java多线程的内存模型(JMM?)
5:并发包、ConcurrentHashMap等
6:算法
1):两个栈实现队列

方法:一个栈存储元素,一个栈辅助
维护两个栈,第一个栈存储元素,第二个栈用于辅助操作。

根据栈的特性,第一个栈的底部元素是最后插入的元素,第一个栈的顶部元素是下一个被删除的元素。为了维护队列的特性,每次插入的元素应该在第一个栈的底部。因此每次插入元素时,若第一个栈内已经有元素,应将已有的全部元素依次弹出并压入第二个栈,然后将新元素压入第一个栈,最后将第二个栈内的全部元素依次弹出并压入第一个栈。经过上述操作,新插入的元素在第一个栈的底部,第一个栈内的其余元素的顺序和插入元素之前保持一致。

删除元素时,若第一个栈非空,则直接从第一个栈内弹出一个元素并返回,若第一个栈为空,则返回 -1。

另外维护队列的元素个数,用于判断队列是否为空。初始元素个数为 0。每次插入元素,元素个数加 1。每次删除元素,元素个数减 1。

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/solution/mian-shi-ti-09-yong-liang-ge-zhan-shi-xian-dui-l-3/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

class CQueue {
    Stack<Integer> stack1;
    Stack<Integer> stack2;
    int size;

    public CQueue() {
        stack1 = new Stack<Integer>();
        stack2 = new Stack<Integer>();
        size = 0;
    }
    
    public void appendTail(int value) {
        while (!stack1.isEmpty()) {
            stack2.push(stack1.pop());
        }
        stack1.push(value);
        while (!stack2.isEmpty()) {
            stack1.push(stack2.pop());
        }
        size++;
    }
    
    public int deleteHead() {
        if (size == 0) {
            return -1;
        }
        size--;
        return stack1.pop();
    }
}

/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue obj = new CQueue();
 * obj.appendTail(value);
 * int param_2 = obj.deleteHead();
 */

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/solution/mian-shi-ti-09-yong-liang-ge-zhan-shi-xian-dui-l-3/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  

2:):一个全英文题,意思是给定整数N  求1~N中 出现1的次数
原文地址:https://www.cnblogs.com/lzh1043060917/p/12834962.html