Java开发工程师面试题总结(算法、Java基础、数据库、网络、操作系统)

匿名网友 匿名网友 发布于: 2015-11-04 00:00:00
阅读 199 收藏 0 点赞 0 评论 0

算法题

  1. 单向链表存在环结构,如何快速判断存在环结构

    一块一慢两个指针

  2. 单向链表,存在一个特定的节点,如何快速删除该节点
  3. 编程题 1,11,21,1211,111221,312211,13112221… 数列规律,后面的数字是对前一个数字的描述,第二个数字11表示11,描述的是第一个数字。21表示211211表示1211
  4. 字符串逆序

java 基础

  • hashmap的底层实现,如何处理冲突,采用链表存储同一个hash值的元素,对于什么操作会有影响。

    底层实现是数组,数组中的对象是Entry类对象。
    当存在冲突时,将具有相同hashcode的对象挂载在相同槽内,组成链。采用头插法,新插入对象放在链头,最先加入的对象放在链尾。
    hashcode()
    indexFor()
    put()
    get()
    addEntry()
    loadfactor
    loadfactor=
    元素个数/表长
    hash
    算法

    int indexFor(int h, int length){


    return h&(length
    1)

    }

    resize
    数组默认大小是16,负载因子默认未0.75

  • 为何重写hashcode equals方法
    重写equals方法必然重写hashcode方法,这是java规范。
    hashcode
    返回值是一个整数,代表两个对象是否相等。
  • 异常种类有哪些


    Throwable
    是所有异常的根,java.lang.Throwable
    Error
    是错误,java.lang.Error
    Exception
    是异常,java.lang.Exception
    一般分为Checked异常和Runtime异常,所有RuntimeException类及其子类的实例被称为Runtime异常,不属于该范畴的异常则被称为CheckedException

  • java 排序算法代码实现,复杂度、稳定性
  • 浅拷贝 vs 深拷贝

    浅拷贝是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象。
    深拷贝不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象。
    若不对clone()方法进行改写,则调用此方法得到的对象即为浅拷贝。
    详细解释浅拷贝与深拷贝
    当然我们还有一种深拷贝方法,就是将对象串行化。缺点耗时。

  • 怎么判断一个对象该被回收
    计数法
    根搜索法
  • hashMap hashtable区别
  • hashtable原理
  • hashtable是怎么实现线程安全的
  • java的代理是怎么实现的
  • 抽象类和接口的区别
  • 接口和实现类的区别
  • java四种引用
  • 集合类介绍,各种集合类之间的区别
  • 继承和组合区别
  • lmbda表达式
  • java 8 新特性
  • java基础数据类型
    • 整形 byte short int long
    • 浮点型 float double
    • 逻辑型 boolean
    • 字符型 char
  • java中的数据存储
    • 寄存器:最快的存储区,编译器分配,程序无法控制
    • 栈:存放基础数据类型的变量数据

      对象的引用
    • 堆:new出来的对象存放位置
    • 静态域:静态成员变量存放位置
    • 常量池:字符串变凉&基本数据类型变量 public static final
    • rRAM存储:硬盘等永久存储空间

数据库

  1. 数据库
    如何在学生成绩表中查询成绩排名第五第学生成绩信息

    oracle:

    select
    *
    from(

    select
    *
    from scrore order by score desc

    )where rownum =5

    mysql : ?

  2. 数据库索引的数据结构,叶子节点存储什么?非叶子节点存储什么?

    http://tech.meituan.com/mysql-index.html

    http://blog.codinglabs.org/articles/theory-of-mysql-index.html

  3. mysql数据库存储引擎:InnoDBMyISAM

    MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAMIndexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具. MyISAM表格可以被压缩,而且它们支持全文搜索.它们不是事务安全的,而且也不支持外键。如果事物回滚将造成不完全回滚,不具有原子性。如果执行大量的SELECTMyISAM是更好的选择。
    InnoDB:
    这种类型是事务安全的.它与BDB类型具有相同的特性,它们还支持外键.InnoDB表格速度很快.具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它.如果你的数据执行大量的INSERTUPDATE,出于性能方面的考虑,应该使用InnoDB, 对于支持事物的InnoDB类型的标,影响速度的主要原因是AUTOCOMMIT默认设置是打开的,而且程序没有显式调用BEGIN 开始事务,导致每插入一条都自动Commit,严重影响了速度。可以在执行sql前调用begin,多条sql形成一个事物(即使autocommit打开也可以),将大大提高性能。

    区别:
    是否支持外键 innoDB支持
    是否需要事务 innoDB支持
    是否需要全文搜索 MyISAM支持
    经常使用什么样的查询模式(是否带where
    你的数据多大 innoDB
    是否使用count(*) MyISAM
    主键查询 innoDB
    insert MyISAM
    update innoDB

  4. 分布式数据库如何保证一致性
  5. sql注入原理
  6. 数据库范式
  7. 乐观锁 vs 悲观锁
  8. 数据库锁机制
  9. 事务隔离机制
  10. 数据库连接池原理
  11. 连接池使用什么数据结构实现,
  12. B+树和二叉树查找时间复杂度

网络

  1. get post put detele区别

    Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GETPOSTPUTDELETE。分别对应查、改、增、删四个操作。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
    get
    用于信息获取,而且应该是安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。幂等的意味着对同一URL的多个请求应该返回同样的结果。
    根据HTTP规范,POST表示可能修改变服务器上的资源的请求。读者对新闻发表自己的评论应该通过POST实现,因为在评论提交后站点的资源已经不同了,或者说资源被修改了。 putdelete操作是幂等的。

    postput区别:
    创建操作可以使用POST,也可以使用PUT,区别在于POST 是作用在一个集合资源之上的(/uri),而PUT操作是作用在一个具体资源之上的(/uri/xxx),再通俗点说,如果URL可以在客户端确定,那么就使用PUT,如果是在服务端确定,那么就使用POST,比如说很多资源使用数据库自增主键作为标识信息,而创建的资源的标识信息到底是什么只能由服务端提供,这个时候就必须使用POST

    对资源的增,删,改,查操作,其实都可以通过GET/POST完成,不需要用到PUTDELETE
    另外一个是,早期的Web MVC框架设计者们并没有有意识地将URL当作抽象的资源来看待和设计,所以导致一个比较严重的问题是传统的Web MVC框架基本上都只支持GETPOST两种HTTP方法,而不支持PUTDELETE方法。

    提交数据:GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连。如果是空格,转为为+,如果是中文/其他字符,则直接把字符串用BASE64加密。POST把提交的数据则放置在是html header内一起传送到action属性所指的url地址。

    接收数据: 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

    请求数据大小: GET是通过url提交数据,get可提交的数据量就跟url长度有关系了。URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。
    POST
    是没有大小限制的,HTTP协议规范也没有进行大小限制,说“POST数据量存在80K/100K的大小限制是不准确的,POST数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。

  2. 表单信息传到服务器加密问题 HTTPS 对称加密
    非对称加密 tls/ssl rsa
  3. session vs cookie

    http是无协议的,客户请求第二次到达服务器,服务器如何分辩此用户之前访问过服务器,用户的信息是如何保存的。
    cookie
    是在客户端保存客户的状态。包括(名字,值,过期时间,路径,域)
    session
    是在服务端保持状态。
    服务器程序为客户端的请求创建session时,服务器首先检查这个客户端的请求里是否包含sessionID
    如果客户端禁用cookie,使用url重写、表单隐藏字段端方法传递session值。

  4. dns是基于tcp还是udp
    udp
    。在数据传输时间很短,以至于此前的连接过程成为整个流量主体的情况下,UDP也是一个好的选择。
  5. 使用过翻墙工具吗,goagent怎么实现的,shadowsocks怎么实现的
  6. HTTP HTTPS的区别?前台数据加密传输后台
  7. html提交如何保证安全
  8. https如何加密的,怎么做到安全的
  9. get提交到字节限制是协议本身限制的吗

    http协议本身没有限制get提交字节长度,是url长度的限制。因为get提交到数据要放到url中。

  10. 计算机网络分层,每层所用协议,协议所占端口
  11. osi七层模型 vs tcp/ip四层模型,两者之间有什么区别
  12. HTTP method
    1. 一台服务器要与HTTP1.1兼容,只要为资源实现GETHEAD方法即可
    2. GET是最常用的方法,通常用于请求服务器发送某个资源。
    3. HEADGET类似,但服务器在响应中值返回首部,不返回实体的主体部分
    4. PUT让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档,或者,如果那个URL已经存在的话,就用干这个主体替代它。
    5. POST起初是用来向服务器输入数据的。实际上,通常会用它来支持HTML的表单。表单中填好的数据通常会被送给服务器,然后由服务器将其发送到要去的地方。
    6. TRACE会在目的服务器端发起一个环回诊断,最后一站的服务器会弹回一个TRACE响应并在响应主体中携带它收到的原始请求报文。TRACE方法主要用于诊断,用于验证请求是否如愿穿过了请求/响应链。
    7. OPTIONS方法请求web服务器告知其支持的各种功能。可以查询服务器支持哪些方法或者对某些特殊资源支持哪些方法。
    8. DELETE请求服务器删除请求URL指定的资源。
  13. TCP UDP的区别
    TCP(
    传输控制协议,Transmission Control Protocol) UDP(用户数据报协议,User Data Protocol) 连接:TCP是面向连接的协议,正式通信前必须要与对方建立连接。UDP面向非连接的协议,正式通信前不必与对方建立连接,不管对方状态就直接发送。
    传输可靠性:TCP传输更可靠,保证数据正确性,保证数据顺序。UDP传输不可靠。不能提供可靠性、流控、差错恢复功能。
    应用场合:TCP适合一对一传送数据,适合传输大量数据。UDP适合广播数据,适合少量数据,e.g.ping 速度:TCP慢,因为要建立连接。UDP快。
  14. TCP三次握手

    TCP三次握手的过程如下:

  • 客户端发送SYNSEQ=x)报文给服务器端,进入SYN_SEND状态。
  • 服务器端收到SYN报文,回应一个SYN SEQ=yACK(ACK=x+1)报文,进入SYN_RECV状态。
  • 客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
  • TCP四次挥手
    • 用进程首先调用close,称该端执行主动关闭active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
    • 接收到这个FIN的对端执行被动关闭passive close),这个FINTCP确认。
      注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
    • 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN
    • 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN[1]
      既然每个方向都需要一个FIN和一个ACK,因此通常需要4个分节。
  • HTTP返回消息代码含义

    1xx:信息
    2xx
    :成功
    3xx
    :重定向
    4xx
    :客户端错误
    5xx
    :服务器错误

操作系统

  1. 与进程的区别:
    (1)
    地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间。
    (2)
    资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源。
    (3)
    线程是处理器调度的基本单位,但进程不是。
  2. 什么是可重入锁 java 递归锁,可重入锁
    所谓递归锁,就是在同一线程上该锁是可重入的,对于不同线程则相当于普通的互斥锁。 func A () {
    LOCK.lock(); B(); LOCK.unlock(); }

    func B() { LOCK.lock(); LOCK.unlock(); } java为每个线程分配一个锁,而不是为每次调用分配一个锁。 java锁的可重入性机制可以解决下面这个问题
    可重入的意思是线程可以重复获得它已经持有的锁。

  3. 对线程安全的理解

评论列表
文章目录