快手一面凉经

面试的时候断网两次,好惨啊。按照牛友的经验,快手都是连续面试的,而一面面试官却让我等消息。哎,估计凉了。不过面试官还是很好的,断网两次也没有介意,nice。

然后面试情况,前面表现还可以,但是,到了后面的时候,算法写的不好,一道跳台阶,我以为是变态跳台阶,就按照变态跳台阶说了。没想到,是最简单的跳台阶。。。。无语了。第一次视频面试写算法,这方面还是表现不好。下次注意了,视频面试最重要的还是认真听,然后再进行一个分析,再动手,而不是试图从脑海搜索题目,然后就开干。

那么,面经写上:

  1. 写一个单例模式
    答:一个类的构造函数私有化,然后在类中定义一个私有静态变量,通过一个静态函数get获得私有变量实例即可实现单例。如果想要懒加载,可以用上双重检验锁在get函数中。

    public class SingleObject {
    //创建 SingleObject 的一个对象
    private static SingleObject instance = new SingleObject();
    
    //让构造函数为 private,这样该类就不会被实例化
    private SingleObject(){}
    
    //获取唯一可用的对象
    public static SingleObject getInstance(){
       if(instance==null){
           syscronicsed(this){
               if(instance==null){
                     instance = new SingleObject();
                 }
             }
       }
       return instance;
    }
    
    public void showMessage(){
       System.out.println("Hello World!");
    }
    }
  2. 跳台阶算法,剑指的原题.只不过不用递归,用的是一个栈加循环实现。

  3. error和exception的区别。举例子
    答:error是错误,而exception是异常。
    error是jvm无法解决处理的错误,一旦发生,进程坏死,停止运行。常见的错误有:oom,NoClassDefFoundError,StackOverflowError。
    而exception是异常。有两个类别:运行期和非运行期:
    其中运行期是程序负责搞定的,即,不要catch的,而非运行期是编译器负责的,要显式的catch。
    运行期异常有:空指针,下标越界异常,数字格式异常
    而非运行期有:ClassNotFoundException和IO操作异常。(这两类是要显示捕获的,所以加载mysql驱动的时候,要catch。)

  4. 补充一个:ClassNotFoundException和NoClassDefFoundError的区别
    答:
    当应用程序运行的过程中尝试使用类加载器去加载Class文件的时候,如果没有在classpath中查找到指定的类,就会抛出ClassNotFoundException。
    当JVM在加载一个类的时候,如果这个类在编译时是可用的,但是在运行时找不到这个类的定义的时候,JVM就会抛出一个NoClassDefFoundError错误。比如当我们在new一个类的实例的时候,如果在运行是类找不到,则会抛出一个NoClassDefFoundError的错误。
    (这个情况是我们的class文件被删除了)
    总结:当动态加载Class的时候找不到类会抛出异常,当编译后找不到类的时候,会抛error

  5. 强应用和弱应用和软引用的区别。
    答:强引用,就是标记了引用,不会直接回收的;而弱引用是gc下一次回收会发现的。而软引用我忘了,回答不知道。
    回去好好查了一下后发现:
    强引用,在内存不足的时候,宁可报错:oom,也不会回收。而我们程序中有些对象其实没有这么重要,那些对象我们可以用引用级别标明。这样内存不足的时候,标记了软弱虚引用的对象会被回收。
    而软引用是:在gc后还内存不足的时候,才会去回收,平时不会回收;
    弱引用是:在GC的时候,不管内存空间足不足都会回收这个对象。
    虚引用:直接回收了,就像没有引用一样gcroot找不到一样。但是会有一个回调函数,比如打印一个日志:我被回收了之类的。

  6. hahsmap的扩容。
    答:就是新开一个2倍大小的空间,然后用头插法插入到新的位置;而1.8版本的话,是会用位运算求出节点的位置。

  7. spring的ioc和aop
    答:简单解释了一下,动态代理和代理的两个类别;还有就是反射机制实现了ioc加载bean。而aop是动态代理实现了扩招功能。

  8. 计算机网络的7层结构:
    答:物理层,链路层,网络层,传输层,应用层(应用层,展示层,通信层)

  9. tcp的三次握手,以及为什么要三次握手。
    答:防止消息在网络中延迟,导致建立无用的通道

  10. private那四个权限的限制
    答:一个是标记的变量只能自己使用,一个是标记的变量可以让父子都可以访问,一个是可以接收同一个包的其他类的引用,一个是所有的其他包都可以引用。

  11. http的状态码和每个状态码的含义
    答:我说出了5类状态码的含义,但是,每一类状态码中,具体每个类别有那些码,我还真不知道。这个问题,发现很多面试官喜欢问,要好好准备这个了。

  12. 网络中传输层的作用
    答:就是跨主机两个进程之间通信,比如接用tcp之类的,端口端口之间搭建通道,就是传输层解决的。让两个进程可以实现通常。屏蔽了网络,物理等底层。

  13. 还有一道题,是这样的:Number[] a=new Integer[]{0},问,编译是否通过?
    答:我说的是,编译不可以,赋值的时候,没有指定大小。结果是,不会有错误。。。因为后面赋值{0},就代表,这个数组的大小赋值为了1,而且初值为0。

  14. 还有一道题是countdownlatch的,看代码,判断输出是什么。
    答:我看了以后,发现没有保证原子性,所以i++输出的结果不会如预期。而后让我将他改为串行,我用了join,用了lock,用了sysc三个进行上锁。实现了一个同步。同时,为了保证可见性,还在共有变量上加上了一个volatile。

    总结

    面试常见的题目需要搞懂来,同时,面试的时候一定有题目是你没有遇到的,这个时候,不要慌,按照自己学习到的知识体系,进行一个良好的分析即可,相信自己。还有就是视频的笔试,需要认真听题目,不要没听完题目就开始做题。冷静是面试最基本的素质。虽说平时很优秀,但是不是每一个面试官都可以在面试过程中了解你平时的表现的。哪怕你简历写的很好,在面试中也要从容展示自我,才可以表现出自己的优点。

#快手##Java工程师##实习##面经#
全部评论
楼主已经很强了
点赞 回复 分享
发布于 2020-05-07 19:15
30号一面的,也是等消息,应该凉了
点赞 回复 分享
发布于 2020-05-07 19:31
应该没凉吧
点赞 回复 分享
发布于 2020-05-08 12:41
单例模式那里,定义成员变量的时候不用初始化吧
点赞 回复 分享
发布于 2020-05-08 12:46
是实习面试吗
点赞 回复 分享
发布于 2020-05-09 22:34
答主,你的回答就像上面写的这么简单吗
点赞 回复 分享
发布于 2020-05-10 13:58
😂偶遇校友,你找到实习了吗
点赞 回复 分享
发布于 2020-05-13 23:07

相关推荐

牛客410815733号:这是什么电影查看图片
点赞 评论 收藏
分享
牛客5655:其他公司的面试(事)吗
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:48
点赞 评论 收藏
分享
评论
5
21
分享
牛客网
牛客企业服务