A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

公司名称:西安古阳信息科技有限公司
公司地址:西安市雁塔区橙仕空间
公司规模:100-150
面试整体事项
.基础知识:
1)集合类:ListSet比较,各自的子类比较(ArrayListVectorLinkedListHashSetTreeSet);
2HashMap的底层实现,之后会问ConcurrentHashMap的底层实现;
3)如何实现HashMap顺序存储:可以参考LinkedHashMap的底层实现;
4HashTableConcurrentHashMap的区别;
相同点: Hashtable ConcurrentHashMap都是线程安全的,可以在多线程环境中运行; keyvalue都不能是null
区别: 两者主要是性能上的差异,Hashtable的所有操作都会锁住整个对象,虽然能够保证线程安全,但是性能较差; ConcurrentHashMap内部使用Segment数组,每个Segment类似于Hashtable,在“写”线程或者部分特殊的“读”线程中锁住的是某个Segment对象,其它的线程能够并发执行其它的Segment对象。

5String,StringBufferStringBuilder的区别;
1、在执行速度上:Stringbuilder->Stringbuffer->String
2String是字符串常量
      Stringbuffer是字符串变量线程安全
      Stringbuilder是字符串变量线程不安全
6Object的方法有哪些:比如有wait方法,为什么会有;
简单说:因为synchronized中的这把锁可以是任意对象,所以任意对象都可以调用wait()notify();所以waitnotify属于Object
专业说:因为这些方法在操作同步线程时,都必须要标识它们操作线程的锁,只有同一个锁上的被等待线程,可以被同一个锁上的notify唤醒,不可以对不同锁中的线程进行唤醒。
7waitsleep的区别,必须理解;
sleep()方法导致了程序暂停执行指定的时间,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。而且sleep()只能自己到点了醒来,不能被唤醒。
wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池,准备获取对象锁进入运行状态。
8JVM的内存结构,JVM的算法;
JVM内存结构主要有三大块:堆内存、方法区和栈。堆内存是JVM中最大的一块由年轻代和老年代组成,而年轻代内存又被分成三部分,Eden空间、From Survivor空间、To Survivor空间,默认情况下年轻代按照8:1:1的比例来分配;
方法区存储类信息、常量、静态变量等数据,是线程共享的区域,为与Java堆区分,方法区还有一个别名Non-Heap(非堆);栈又分为java虚拟机栈和本地方法栈主要用于方法的执行。

9)强引用,软引用和弱引用的区别;
10)数组在内存中如何分配;
Java中的数组是用来存储同一种数据类型的数据结构,一旦初始化完成,即所占的空间就已固定下来,初始化的过程就是分配对应内存空间的过程。即使某个元素被清空,但其所在空间仍然保留,因此数组长度将不能被改变。
11)用过哪些设计模式,手写一个(除单例);

12springmvc的核心是什么,请求的流程是怎么处理的,控制反转怎么实现的;
1 首先用户发送请求到前端控制器DispatcherServlet,也是springmvc的核心控制器,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;
     2 DispatcherServlet调用HandlerMappingHandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器对象,也就是Controller层,多个 HandlerInterceptor拦截器)返回给DispatcherServlet
     3 DispatcherServlet根据得到的Handler,调用合适的HandlerAdapterHandlerAdapter将会把处理器       Handler 包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处        理器。
     4 HandlerAdapter会根据适配的结果调用真正的处理器(Handler)完成请求处理,并向DispatcherServlet返回一个           ModelAndView对象。
     5 根据返回的ModelAndView选择一个适合的ViewResolver(视图解析器)返回给DispatcherServlet
     6 ViewResolver根据view model 渲染视图
     7 将渲染结果返回给客户端。

IOC控制反转的实现是基于springbean工厂,当你需要引用一个对象时,将本来应该由你控制的实例化对象的操作
交给配置好的xml来进行,然后再给你注入进去,从而降低代码间的耦合度


13spring里面的aop的原理是什么;
AOP的主要原理:动态代理
1.静态代理:
l 针对每个具体类分别编写代理类;
l 针对一个接口编写一个代理类;
2.动态代理:
针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类

14mybatis如何处理结果集:反射,建议看看源码;
到此,Mybatis是怎么利用ResultSet生成对象的过程已经分析完毕。分为简单映射和复杂映射。
简单映射就是不包含内映射的resultMap
复杂映射就是包含内映射的resultMap
复杂映射的过程比较复杂,源代码也没有一行注释,本人是写了个实例,再通过eclipse中的debuger一步步来分析的。

15java的多态表现在哪里;
父类引用指向子类对象
16)接口有什么用;
一是实现多重继承,因为java是单根语言。
二是便于实现各种框架,java 的各种框架中,都是拿接口调来调去。一旦你实现了这个接口,你的代码就嵌入了框架。
三是为了实现前面各位说的规范。

17)说说http,https协议;
https协议需要到ca申请证书,一般免费证书很少,需要交费。
http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
httphttps使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443
http的连接很简单,是无状态的。
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全。
18tcp/ip协议簇;
TCP/IP由四个层次组成:1、网络接口层:这是TCP/IP软件的最低层,负责接收IP数据报并通过网络发送之,或者从网络上接收物理帧,抽出IP数据报,交给IP层。 2、网间网层:负责相邻计算机之间的通信。其功能包括三方面。1是处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。2是处理输入数据报:首先检查其合法性,然后进行寻径--假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报。3是处理路径、流控、拥塞等问题。 3、传输层:提供应用程序间的通信。其功能包括:格式化信息流;提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送。 4、应用层:向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等。
19osi五层网络协议;
应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTPHTTPSNMPFTPSMTPDNSTelnet
表示层 数据格式化,代码转换,数据加密 没有协议
会话层 解除或建立与别的接点的联系 没有协议
传输层 提供端对端的接口 TCPUDP
网络层 为数据包选择路由 IPICMPRIPOSPFBGPIGMP
数据链路层 传输有地址的帧以及错误检测功能 SLIPCSLIPPPPARPRARPMTU
物理层 以二进制数据形式在物理媒体上传输数据 ISO2110IEEE802IEEE802.2
20tcpudp区别;
1、基于连接与无连接。
2TCP要求系统资源较多,UDP较少。
3UDP程序结构较简单。
4、流模式(TCP)与数据报模式(UDP)
5TCP保证数据正确性,UDP可能丢包。
6TCP保证数据顺序,UDP不保证。
7TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
8TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。

21)用过哪些加密算法:对称加密,非对称加密算法;


22)说说tcp三次握手,四次挥手;
23cookiesession的区别,分布式环境怎么保存用户状态;
1session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。   

  2session中保存的是对象,cookie中保存的是字符串。   

  3session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。

24gitsvn区别;
1. Git是分布式的,SVN是集中式的,好处是跟其他同事不会有太多的冲突,自己写的代码放在自己电脑上,一段时间后再提交、合并,也可以不用联网在本地提交;

25)请写一段栈溢出、堆溢出的代码;
public class Test {  

    public void testHeap(){  
        for(;;){  
              ArrayList list = new ArrayList (2000);  
          }  
    }  
    int num=1;  
    public void testStack(){  
        num++;  
        this.testStack();  
     }  

    public static void main(String[] args){  
        Test  t  = new Test ();  
        t.testHeap();  
        t.testStack();     
    }  
}  

26ThreadLocal可以用来共享数据吗;

.IO:
1bionioaio的区别;
2nio框架:dubbo的实现原理;
3)京东内部的jsf是使用的什么协议通讯:可参见dubbo的协议;


.算法:
1java中常说的堆和栈,分别是什么数据结构;另外,为什么要分为堆和栈来存储数据。
2TreeMap如何插入数据:二叉树的左旋,右旋,双旋;

3)一个排序之后的数组,插入数据,可以使用什么方法?答:二分法;问:时间复杂度是多少?
4)平衡二叉树的时间复杂度;
5Hash算法和二叉树算法分别什么时候用;
6)图的广度优先算法和深度优先算法:详见jvm中垃圾回收实现;


.多线程相关:
1)说说阻塞队列的实现:可以参考ArrayBlockingQueue的底层实现(锁和同步都行);
2)进程通讯的方式:消息队列,共享内存,信号量,socket通讯等;
3)用过并发包的哪些类;
4)什么地方用了多线程;
5Excutors可以产生哪些线程池;
6)为什么要用线程池;
7volatile关键字的用法:使多线程中的变量可见;

.数据库相关(mysql):
1msyql优化经验:
2mysql的语句优化,使用什么工具;
3mysql的索引分类:B+hash;什么情况用什么索引;
4mysql的存储引擎有哪些,区别是什么;
5)说说事务的特性和隔离级别;
6)悲观锁和乐观锁的区别,怎么实现;
.mq
1mq的原理是什么:有点大。。都可以说;
2mq如何保证实时性;
3mq的持久化是怎么做的;

.nosql相关(主要是redis:
1redismemcache的区别;
2)用redis做过什么;
3redis是如何持久化的:rdbaof
4redis集群如何同步;
5redis的数据添加过程是怎样的:哈希槽;
6redis的淘汰策略有哪些;
7redis有哪些数据结构;

.zookeeper:
1zookeeper是什么;
2zookeeper哪里用到;
3zookeeper的选主过程;
4zookeeper集群之间如何通讯;
5)你们的zookeeper的节点加密是用的什么方式;
6)分布式锁的实现过程;


.linux相关:
1linux常用的命令有哪些;
2)如何获取java进程的pid
3)如何获取某个进程的网络端口号;
4)如何实时打印日志;
5)如何统计某个字符串行数;


.设计与思想:
1)重构过代码没有?说说经验;
2)一千万的用户实时排名如何实现;
3)五万人并发抢票怎么实现;

139 个回复

正序浏览
学习到很多
回复 使用道具 举报
学习到很多
回复 使用道具 举报
学习到很多
回复 使用道具 举报
学习到很多
回复 使用道具 举报
学习到很多
回复 使用道具 举报
学习到很多
回复 使用道具 举报
学习到很多
回复 使用道具 举报
感谢分享
回复 使用道具 举报
感谢分享
回复 使用道具 举报
感谢分享
回复 使用道具 举报
感谢分享
回复 使用道具 举报
感谢分享
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报

感谢支持!
回复 使用道具 举报
zhaosongzhi 发表于 2019-6-14 18:21
666666666666666666666666666666

感谢支持!
回复 使用道具 举报

感谢支持!
回复 使用道具 举报

感谢支持!
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马