面试刷题10-28-1

 

  • 8.14 阿里巴巴一面(新零售供应链,凉了,这是我的第一场面试),大概30分钟
    HashMap和HashTable区别

HashMap 线程不安全, HashTable线程安全

  • HashMap实现原理(put、resize)

put 像HashMap中添加一个元素的过程。

  • StringBuffer和StringBuilder区别

前者线程安全,后者线程不安全。

  • 数据库事务隔离级别
    如何避免幻读
    数据库引擎(Innodb)的事务支持粒度
    如何实现乐观锁
    Synchronized实现原理
    tcp三次握手,四次挥手
    osi7层模型
    最后问了两个智力题:
    两个粗细不均匀、长短不一的的绳子,燃烧一根分别需要60分钟,如何利用两根绳子,测量出15分钟?
    一个篮球可以装多个乒乓球?

  • 8.21有赞一面(凉了)20分钟
    HashMap和ArrayList默认容量分别是多少?
    HashMap和HashTable区别
    HashMap什么时候扩容,几倍?
    ArrayList什么时候扩容,几倍?
    讲讲Java内存模型
    讲讲gc算法
    01背包问题,我说了dp的方案,但面试官说使用贪心算法(性价比最高优先,我当时屈服了),但是后来发现,贪心不行。

 

  • 8.26 美团二面(估计凉了,但还没收到拒信)

    一面:(25号晚上做了美团笔试,很差,3道算法题,只过了30%)

    上来先吐槽我算法很烂,然后要考察我基础。
    进程调度方式
    进程与线程区别
    多线程优点
    进程同步有哪些方式
    osi七层模型,以及对应都有什么协议
    tcp三次握手和四次挥手
    udp和tcp区别
    http报文都有什么
    客户端发起http到服务端返回的详细过程
    编程实现求二叉数深度
     

    二面:

    二面主要考察场景题,让我从自己的项目出发,如果项目需要上线了,需要考虑什么问题。
    看过那些架构的设计。
    平时的学习方法。

  • 8.27阿里国际(深圳)一面(凉了)
    GC算法都知道哪些?分别讲讲(serial pal new、parelle scavge、serial old、parelle old、CMS)主要讲了下cms
    JVM内存模型。
    Zookeeper原理,当有3台服务器,一个挂了,怎么保证服务的正常使用?
    Spring 怎么接受web请求(应该是Spring MVC)流程是怎样的。
    AOP原理
    Spring Boot启动加载过程。

  • 9.3 葡萄城(一面+机试+二面,凉了)(C#做控件开发)
    一面,两个面试官,问了计算机网络,还是那些常问的问题,我就不列出来了。
    问java有什么优缺点,我说单继承,接口可以多实现,就问为什么?多承继为什么不好?(自己给自己挖了个坑)
    还喜欢什么?集合。
    都有哪些集合?balabala……
    HashMap是怎么实现的?baabala
    HashMap可以解决什么问题?我说字符频率统计。
    怎么做的?比较hashcode,然后比较equals
    如果字符串是变量怎么办,“abc abc”,两个abc的地址不同?暗示hashcode不同,没答出来…
    git常用操作都有哪些,查看日志用啥?
    如果不小心把一个很大的文件2gb,push了上去,然后发现后在远端删除了,之后别人执行git clone,会把所有的历史信息给clone下来,如何解决这个问题?

    重点提的是,让我讲述项目难点的时候,我提到了跨域问题,我当时对项目还没有完全熟悉(2年前做的),一直在那讨论为什么会出现跨域(这也导致我回去之后,把项目仔细看了下,发现是我当时对项目不够书序,导致描述错误)
    二面,机试:用#画直方图?,输入一组数据:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    [

    {value:2,label:”a”},

    {value:5,label:“b”},

    {value:3,label:”c”}

    ]

    输出:用空格分割每列

        #

        #

        #   #

    #   #   #

    #   #   #

    ———-------

    a   b   c

    做出来了之后,让支持value是复数,即在虚线下方画#,比较简单。
    三面,还是2个人,比较有映像的是:
    让我简单描述如何实现电梯调度算法,字符串压缩算法。(这个回答的不是很好,回家之后才想起来电梯调度算法和进程调度算法差不多)

 

面试官:看过你的博客(简历上写了),看你了解Hadoop,负载均衡,负载均衡都有哪些策略?

我:轮询、加权轮询、hash、最小负载

面试官:简历上写了“了解”linux和git,你使用linux的发行版本是什么?安装软件的命令?如何安装一个源里面没有的软件?如何创建指定权限的文件?

面试官:你如何学习的Java?我:先从JavaSE开始,然后做项目实践、再通过看视频学习JavaEE。

面试官:平时都看什么书?我:深入理解JVM、Effective Java、Java并发编程、Spring实战等。

面试官:Effective Java能看懂吗? 我:里面写的是Java规范、我的层次并没有达到这个境界,没看懂。

面试官:这是四大圣经之一,看不懂也正常。我:惊讶的表情(内心OS:竟然还有4个圣经,不是只有Thinking in Java吗)

面试官:交换机在哪层?我:我觉得交换机是物理设备,果断说在物理层(其实是链路层,我和集线器搞混了)

面试官:露出微笑,那路由器在哪层?我:路由器是网络设备,在网络层。

面试官:那链路层有啥设备?我:思考中:透明传输、封装成帧、插座检测。。。。然后说了不知道。。。我看面试官还在笑,我就反问,交换机是在链路层吗?面试官说是的。

面试官:那我们来聊聊Java吧,重写和重载的区别是什么?我:重写是发生在子类和父类之间,子类重写父类的方法要求方法名、参数都一样,而且访问修饰符要大于等于父类的。

面试官:那如果子类要去重写父类的一个方法,如果子类把返回值的类型给改了,那还是重写吗?我:思考了一会,说应该不是。

面试官:又笑着问:Thread类都有哪些方法?我:我能说我常用的一些吗?有sleep,yeild,join,stop,isInterrupted(),我竟然忘了说start和run?.

面试官:sleep和yeild有啥区别?我:前者是抱着锁睡眠,可以传入时间参数,后者是线程让步,可以让当前线程让出执行权,然后重新竞争执行权。

面试官:笑着问,还有吗?我:。。。。。

面试官:Object和Class有啥区别?我:。。。。Class类是Object类的父类(我竟然说这么逆天的话,说出来我自己都不信)。

面试官:一脸惊讶,笑着问我,不是说Object类是一切类的父类吗?我:我好像看到过有个继承关系(被jdk doc给坑了) 就是这张图的第一个红框浮现到我的脑海中,然后我就认为Class是Object的父类。。。。

面试官:现在有这么2个方法:是不是重载?我:想了会,一看参数不同,方法名相同,说是重载。

//1
public void m(String a, String b) {}
//2
public void m(String a, String ...b){}

面试官:还有三个调用,分别会出现什么情况?我:蒙了一会,面试官说有点难,你好好想。我说第一个调用应该是执行第一个m方法,第三个应该会报错(实际上第三个是调用第二个m方法,面试官也说会报错。。。),我感觉第二个调用执行两个m都可以。

//1.
m("A", "B");
//2.
m("A", null);
//3.
m("A");

面试官:嗯。。。。你分析的有道理,所以第二个调用会报错。

面试官:(看了下我的简历)问Spring MVC和Spring Boot有什么区别?我:前者是实现MVC架构,或者将Controller使用RequestMapping给映射为http接口的,后者是属于微服务的范畴,我用后者去继承ssm框架。

面试官:那一个请求到了SpringMVC的流程是怎样的,能不能画一下?我:我知道是先被DispatcherServlet被接受,后面就不知道了(其实平时我还能扯一些出来,这实在是被虐的不行了)。。。。

面试官:看来你也只是使用,没有深入去了解它的原理。我:尴尬。。。。

面试官:那今天就到这里,你还有什么想问的吗?我:我觉得您给我的感觉和其他面试官不一样。

面试官:哪里不一样?我:其他面试官问的问题,我看一些面经什么的,基本上都差不多,您问的问题非常独到,是基础,但是也是我的盲点。

面试官:前些年,面试基本上都问HashMap什么的,这些估计你们都把源码都看完了,没什么好问的,这几年喜欢问高并发、ClassLoader、双亲委派,你们都能把他讲得很清楚,这个连我身边一些技术比较牛的同时都做不到。。所以我就很奇怪,然后后来就开始不问这些经常被问的问题了。

我:那您是比较看重基础?

面试官:不,我看重的是一个人的学习能力,潜力,就算你刷了多久多久的题,再牛,在我这里过不了,也不行,只要你在我这里过了,别人说你不行,你也行。我:哇,,,,,,真的是膜拜啊。

面试官:市面上的Java技术书我几乎都看过,大概300多本。我:哇。。。。。。

面试官:我对你简历非常感兴趣,我们组是全栈,我看你写了安卓,我还准备和你聊聊安卓,结果你说你安卓是别的同学做的。。。。我:尬笑。。。

面试官:我非常想你来我们组,和你一起合作,你在学校担任过职务,这对你的沟通能力也有帮助,但就是你的基础有点薄弱,这个非常可惜。我:尬笑。。。。并谢谢他给我机会。。。

完...

 

å¾ç说æ

 

å¾ç说æ



10.21 字节跳动(等Offer)
三轮技术面,一面写了2到算法题,二面写了一道,三面写了三道。
最有意思的是第三面,压力面,第一次经历,整个过程让我很紧张,勉强发挥。
自我介绍完,就让我写算法,然后不断问我各种原理,在我回答过程中,不停打断我,让我很紧张,然后继续写算法题,一共来了三次。
第一题,遍历list,并删除指定元素,(想考我for each的坑,但是我没接招,使用迭代器完成)
第二题,按照奇偶行,奇数行正序,偶数行逆序的方式打印二叉树。
第三题,写生产者消费者代码。

 

  • 计算机网络:osi7层模式,对应协议有什么,都是干嘛的,建议把谢希仁的《计算机网络》传输层那一章好好看看,比如tcp的三次握手,四次挥手,流量控制,拥塞控制,看的时候,不能硬背,要自己理解,才不会忘记,而且在题目有变动的时候,也能应答如流。

  • 操作系统:内存管理,进程调度,进程通信,linux常用命令。

  • 数据库:事务(ACID)、三级范式(举例)、关联(join)、聚集函数、group by、order by、索引(b+树)、innodb与其他的区别(锁的粒度)

  • 数据结构:(重头戏),除了广义表不需要重点看之外。《数据结构》严蔚敏
    线性表,尤其是链表(头插法、尾插法、删除、双链表、带头结点与不带、循环链表等)、栈、队列。
    哈弗曼树、二叉树、二叉排序树(删除、增加)、b树、b-树、b+树、b*树、红黑树、字典树、树的三种遍历(代码实现,递归与非递归)。

    图的遍历(dfs、bfs、递归与非递归)、拓扑排序、最小生成树(Dijkstra、Foyd、Prim、kruskal)。
    查找:常用的就二分查找了。

    排序:冒泡、插入(常用)、选择(常用)、快速(常用)、堆(常用)、归并(常用),希尔(不常用)、基数(不常用)
    口诀:不稳定:快选希堆,其他则是稳定算法。
    补充:
    KMP算法及改进BM算法
    并查集,用于求朋友的朋友问题(最小生成树个数
    三路快速排序(快排优化)
    刷题:leetcode(top like100)

  • Java
    Java基础倒是很少问,一般问源码层面问题,注意1.7和1.8的区别
    1、《深入理解Java虚拟机》,最重要的是JMM(Java Memory Model),我自己的建议就是从JMM为中心,开始向四周扩展,构建知识网。
    从JMM -> GC算法,GC Root的确定,线程逃逸问题,Java对象头(Synchronized实现原理),栈的原理,类加载机制问题,三级cache结构、内存屏障,即volatile关键字原理,线程调度等,全部可以从jmm发散,或者从某个点切入,也能讲到JMM。
    2、集合:HashMap、HashTable、ConcurrentHashmap、LinkedHashmap、TreeMap、TreeSet、ArrayList、LinkedList、PriorityLinkedList源码等等
    3、锁:乐观锁(版本号(mysql通过多版本号来解决幻读问题),cas),悲观锁(AQS,AbstractOwnableSynchronizer是重点)、ReentrantLock、CountDownLatch、CyclicBarrier、读写锁等等,与synchronized的原理对比等。
    4、多线程:线程几种实现方式,状态转换,ThreadPoolExecutor参数解析,执行流程。
    5、六大原则:
    单一职责原则(Single Responsibility Principle SRP)
    开闭原则(Open Close Principle OCP)
    里氏替换原则(Liskov Substitution Principle LSP)
    依赖倒转原则(Dependence Inversion Principle DIP)
    接口隔离原则(Interface Segregation Principle ISP)
    迪米特原则 (Least Knowledge Principle LKP)
    6、常用设计模式(手写单例模式):工厂模式(bean)、代理模式(aop)、观察者模式(消息发布订阅、dubbo),说的这样都是在spring中可以联系起来的
    Spring中常用的设计模式有哪些?
    7、如何用线程打印abab问题,传送门
    8、海量数据问题:归并排序思想,传送门

    9、Spring mvc作为后端,讲述从前端请求到后端返回的全部流程,从dns解析到tcp建立连接,再到arp解析,再到反向代理,再到DispatchServlet、HandlerAdapter(通过HandlerMapping找到对应的requestmapping方法)、ModelAndView等,这个问题足以将基础和框架全部联系起来。
    10、反向代理策略:轮询、随机、加权、最少连接、ip hash、dns最短等
    11、四层代理(lvs)和七层代理(nginx)
    12、分布式session问题
    13、洗牌算法
    14、zookeeper实现分布式锁,以及它的选举过程等
    15、Spring ioc的原理,aop的原理(jdk和cglib,与静态代理AspectJ的区别)
    16、Spring bean的是如何管理的?
    17、在maven中如何出现了循环依赖问题,spring中的bean是如何注入的?
    18、dubbo原理,架构图
    19、一些常见的rpc框架,rpc和http有何区别
    20、如何实现i++的原子操作,(加锁问题,volatile关键字(可见性(三级cache缓存失效,通过对比自身数据)、有序性(内存屏障)))
    21、布隆过滤器
    当然问题远远不止这么多,只是将一些我认为比较好的问题写了出来。

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值