阿里巴巴2018届校园招聘Java/c++内推面试题2017年





18届校招各大公司面试题


 <--------------------------------------------------------------------------->
阿里巴巴一面


/


自我介绍
     
IO多路复用


聊了一下关于编译器项目的东西,没具体问项目
 
n个无序的数,求第k大的数(partition, 堆,然后分析时间复杂度)
 
一个直角三角形,斜边是10,斜边上的高是6,问面积?
 
 
 
 
/


  一轮(90min) 
  1 首先自我介绍 
  2 介绍做过的项目之类的 
  3 你最近再看什么书 答 java编发编程艺术 
  4 说说java线程安全的实现方式  ThreadLocal 加锁 
  5 谈谈ThreadLocal 内置一个map key是当前线程 value是对应的值 实现线程变量私有化 
  6 谈谈java中的锁  synchronized reentrantlock 
  7对比两者区别 reentrantlock是jdk1.5推出来的 对比 synchronized 能够实现非阻塞是获取锁
  以及中断锁 配合Condition能更灵活实现并发编程 但是需要自己收到加锁以及释放锁 synchronized则是隐式释放锁 
  8 了解集合类吗  了解 
  9 谈谈hashmap 这个就不说 网上一大堆 主要问了hash冲突怎么解决
  hashmap使用什么hash函数尽量避免hash冲突 实现均匀散列 
  10 谈谈jvm 这个不说网上一大推 
  11 gc收集算法  标记清除 复制 标记整理 然后说了一下gc收集器 果然就问gc收集器了 
  12 谈谈gc收集器  说了常见的7种收集器 然后面试官 一个劲的怼 G1收集器 还好我之前好好看了 哈哈哈 
  13 了解 数据库的存储数据的数据结构吗  不是很懂 说不会 
  14 讲讲你熟悉的nosql数据库  讲了一下redis 感觉他不是很满意 
  15 操作系统如何读取文件 讲讲具体操作流程 这个就省略了 
  16 操作系统的内存管理 段页式 然后扩展一下对应的算法 
  17虚拟内存的作用 
  18 在c/s 体系中 c往s请求数据 如何高效实现断点传输 类似迅雷下载可以暂停  答
  多线程+请求数据的时候附件一个请求数据的偏移量offset 
  19 三次握手四次挥手 答。。。。。 
  20 topK问题  海量日志文件 找出前k个key  文件对16取模(为什么取16大家自己百度一下) 然后存入hashmap
  然后利用小顶堆的性质 
  21 了解java的classloader吗  
  --答了解 Bootstrap ClassLoader
   最顶层的加载类,主要加载核心类库,%JRE_HOME%\lib,
  Extention ClassLoader扩展的类加载器,加载目录%JRE_HOME%\lib\ext目录下的jar包和class文件。
  Appclass Loader也称为SystemAppClass
  加载当前应用的classpath的所有类。然后说了一下双亲委派原则。




 

1、你平时看什么书啊,我回答看think in java. 然后问我看到哪儿了?我回答泛型.你可以讲一讲泛型吗?解释一下概念和应用场景.面试官一直强调的是专业术语,不要打比方举例子,所以答的比较难受.你知道什么是反射吗?解释一下概念和应用场景。
2、基本数据类型,优先级,占的字节数。


3、你知道java有哪些数据结构吗?你说说队列都有哪些类型,数组的概念,说说链表和数组的性能比较,链表都有哪些类型,三向,双向,单向的应用场景; 


LinkedHashMap的Entry元素继承HashMap的Entry,提供了双向链表的功能LinkedHashMap是HashMap的一个子类,它保留插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用LinkedHashMap。LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。LinkedHashMap实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表(所以可以实现快速的正迭代或反迭代)。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。


4、如果有一组无序数,把它们存入链表使用哪种链表,得到的结果是有序的。


5、抽象类的概念和应用场景?他和接口的区别。


6、Spring框架的特征,IOC的概念控制反转,什么是控制反转,它的注入和单例模式有什么区别。







1、介绍项目和主要的工作,问了一下分布式下情况怎么处理,数据量很大的时候怎么考虑 
2、什么时候开始使用java的,问了java6和7的区别    


3、java的特性,继承和多态在什么情况下使用    


4、项目中使用过什么java并发包里面的类,


讲了concurrentHashMap和copyOnWriteArrayList,又问了concurrentHashMap中怎么put以及碰撞的解决方法(会对segment加锁,然后通过hash定位更新或插入到相应的位置处,碰撞解决使用的单链表,java8中用的红黑树)    


5、说一下并发的关键字


说了volatile和synchronized,问synchronized和lock的区别(我回答了显示锁可以进行可中断的、可超时的、费阻塞的方式获取锁,面试官说你这说的不是区别,不知道要怎么回答,当时有点蒙,我又说显示锁要自己进行加锁和释放锁,可以用来避免死锁,面试官惊问使用显示锁就不会发生死锁了,,感觉都没回答点上,后来想了想难道是要说synchronzied是jvm层面实现的,是重量锁,jvm对他进行了优化,显示锁是AQS实现的轻量锁?)    6、死锁是怎么发生的(举了一个例子总结就是多个线程循环请求别的线程已占有的资源)    7、java的内存区域,堆中的分类,FullGC的过程(讲了线程共享的有堆和方法区,线程私有的有虚拟机栈、本地方法栈和程序计数器;堆中分新生代和老年代,新生代又有Eden和Survivor;FullGC是对老年代的内存回收,使用的标记整理算法,,但是这里脑袋秀逗了,算法的过程竟然没有马上说出来,想了一下,结果面试官就问下一题了)




8、项目中用到的设计模式(单例、工厂),单例模式的实现的方式,分别用于什么情况(我讲了双重检验锁、饿汉式、静态内部类和枚举,然后说了饿汉式如果是对象的创建需要配置文件就不适用,静态内部类的方法如果涉及到序列化就不适用,最好的方法是利用枚举)    


9、泛型擦除    




10、数据库的实现原理(还有一个问题记不清了)    




11、线程的状态    









1.IO和NIO
2.并发编程,synchronized和Lock的区别
3.notify wait join相关,为什么notify在Object里定义
4.自己设计一个hash Map
5.JVM
6.垃圾回收
7.索引





2.请说一下进程与线程的区别:    


进程是资源管理的基本单位,而线程是进程的基本单位。进程与线程都是抽象概念,其中进程包括地址空间,打开的文件,账户信息,预告的报警,子进程。而线程包括堆栈,程序计数器(主要在程序编译成汇编之后用来计数程序运行),状态信息(就绪,运行,阻塞)……    


3.哪些对象存储在堆栈中:    


new对象存储在堆中,变量赋值存储在栈中。我和同事商量,你的答案不对,再给你一分钟的时间考虑。嗯……在我的印象中就是这么存储的,我有看地址空间的习惯,所以我觉得是这样的(最后告诉我你回答是对的,只是考验你是否自信)    


4.你在说一下什么是线程调度,上下文切换。    


答:我进行举例说明,最常见的就是生产者消费者模型,开辟一段空间如list,在生产者线程中,对该对象进行“填充”,当有数值时,会通知消费者,也就是signal,当为满或者空的时候,就等待也就是wait,这也就是用户级别的线程调度,还有一种就是当一个线程进行io操作的时候,会空闲cpu,因为io读取是cpu的几十倍,因此其他线程会对该cpu进行利用,也就是内核级别的线程调度   


5.请你说一下,udp与tcp 的区别?    


最大的区别就是udp无需链接,而tcp在建立连接之后才可以传输数据,还有头部信息的不同。在什么情况下使用udp,什么情况下使用tcp?传输大文件的情况下,例如视频的传输。为什么?因为传输之前都要对文件进行分组,而大文件的传输分组过多,tcp建立连接花费时间过多,因此使用udp,还有其他原因吗?因为约定俗成,所以更具体没有了解,而且对于视频广播也是默认用的udp协议。请你说一下,网络传输的确认机制,即头部的ack与sqe。ack是确认网络的连接,而sqe是对数据发送前的分组序号,因为他的作用就是对接收的数据进行确认,并对数据进行排序整合。    


6.编译原理中ll1你说一下。       




7.你说一下hashmap的原理。    hashmap继承了map类,拥有map的特性,因此是一种散列表的数据结构,键值对的存储,而同时键值是hash值的容器,其排列顺序是根据hash值进行排列。    




7.你了解hbase ,你说一下为什么hbase会“快”?    


(1).hbase 是分块存储,把一个文件分成固定的块进行存储,当进行读取的时候,会先通过zookeeper找到master,master 中存储了元数据,也就是找到root表,接下来就可以找到meta表,最后定位到服务器的块,因为这里的块对于mysql肯定小,所以读取速度快。
(2).因为hbase采用乐观锁,这样相对于来说会直接检查版本获取数据,减少等待时间。
(3).支持高并发,多台服务器多个副本同时工作,也会提高效率。


  <--------------------------------------------------------------------------->
 
 <--------------------------------------------------------------------------->
 


  
   <--------------------------------------------------------------------------->
  阿里巴巴二轮




二轮 (42min) 阿里事业搜索部  二面很短




  1 面试官自我介绍 




  2 说说项目中用到了lucene (ps 个人博客用的)




  3 对比一下为什么用lucene 而不是直接数据库查询




  4 你的博客用lucene性能有提升吗?




  5 了解solar吗




  6 知道lucene的中文分词器吗 为什么用中文分词器




  7 算法 有序重复数值 找出等于或者超过一半的数字
  
  





  面试过程,问我为什么要投java岗,而不去做机器学习。
1、基本类型和引用类型的区别,Integer和int,有int类型了,为什么还要设计Integer对象。


2、不用Integer.ParaseInt()方法,如何将字符串转换成数字类型。


3、Map的KEY的要求,以及hashMap的原理,如果将hashcode方法都放回1,如何设计不会出现对象堆积。


4、如何设计一个算法,使得CPU呈现出余弦的形式(是编程之美的第一题可惜我不会。)
总之,问的问题一个都没有答好。感觉都是我没有看过的。









1.前二十分钟主要是一些自我介绍以及一些研究生期间的研究情况;    


2.问我最近在读哪些书。然后我说关于Java并发和JVM的书,然后他就问道Synchronized和Lock的区别;公平锁和非公平锁的区别?    


3.场景题:现在有一个特别大的文件,大概1T,现在要从服务端拖拽到客户端,有什么思路?    




4.刚才你说到I/O,你了解java的NIO吗?和Linux的epoll在模式上有什么区别?    


5.场景题:现在有一个特别长的文件,大概有10万个英文单词的文章,如何以最快的速度找到大小写敏感的出现频次最高的6个英文单词,有什么思路?    




6.场景题:现在有一个不知道位数的int型数字,如何实现将其转换成二进制(不用API),说说思路?    




7.做过哪些项目,使用过那些框架?对SpringBoot了解多少。





2、数据包是怎么从客户端到服务器端的,然后问了TCP和UDP,报文格式三次握手等等(怎么建立起连接,出错了怎么办)    


3、Tomcat工作原理   


4、DB索引怎么实现


5、其他中间还问了hashmap的实现,怎么查找value,Linux怎么关掉进程(关不掉怎么办)、Linux文件权限(具体含义)    





1.i++是不是原子操作   


2.mysql的索引,实现原理,事务性,主键索引和普通索引的区别    


3.对称和非对称加密算法的区别    




4.https和http的区别    




5.智能指针实现    




6.TCP的包可以被篡改吗   




7.fopen是不是系统调用   


8.内存分页的大小,为什么这样分    


9.快排和归并的区别    


10.分治法和动态规划区别
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值