快手一面凉经

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

相关推荐

04-02 22:40
已编辑
电子科技大学 后端
谢谢大家啦!!!
坚定的芭乐反对画饼_许愿Offer版:有鹅选鹅,没鹅延毕
点赞 评论 收藏
分享
会飞的猿:我看你想进大厂,我给你总结一下学习路线吧,java语言方面常规八股要熟,那些java的集合,重点背hashmap八股吧,jvm类加载机制,运行时分区,垃圾回收算法,垃圾回收器CMS、G1这些,各种乐观锁悲观锁,线程安全,threadlocal这些。在进阶一些的比如jvm参数,内存溢出泄漏排查,jvm调优。我这里说的只是冰山一角,详细八股可以去网上找,这不用去买,都免费资源。mysql、redis可以去看小林coding,我看你简历上写了,你一定要熟,什么底层b+树、索引结构、innodb、mvcc、undo log、redo log、行级锁表级锁,这些东西高频出现,如果面试官问我这些我都能笑出来。消息队列rabbitmq也好kafka也好,学一种就行,什么分区啊副本啊确认机制啊怎么保证不重复消费、怎么保证消息不丢失这些基本的一定要会,进阶一点的比如LEO、高水位线、kafka和rocketmq底层零拷贝的区别等等。计算机网络和操作系统既然你是科班应该理解起来问题不大,去看小林coding这两块吧,深度够了。spring boot的八股好好看看吧,一般字节腾讯不这么问,其他的java大厂挺爱问的,什么循环依赖啥的去网上看看。数据结构的话科班应该问题不大,多去力扣集中突击刷题吧。项目的话其实说白了还是结合八股来,想一想你写的这些技术会给你挖什么坑。除此之外,还有场景题、rpc、设计模式、linux命令、ddd等。不会的就别往简历上写了,虽然技术栈很多的话好看些,但背起来确实累。总结一下,多去实习吧,多跳槽,直到跳到一个不错的中厂做跳板,这是一条可行的进大厂的路线。另外,只想找个小厂的工作的话,没必要全都照这些准备,太累了,重点放在框架的使用和一些基础八股吧。大致路线就这样,没啥太多难度,就是量大,你能达到什么高度取决于你对自己多狠,祝好。
点赞 评论 收藏
分享
03-11 14:28
浙江大学 设计
牛客小黄鱼:代入一下,独居女生会觉得有点可怕
点赞 评论 收藏
分享
评论
5
21
分享

创作者周榜

更多
牛客网
牛客企业服务