本人比较渣,从3月份开始找实习到现在,面了一些。把自己面试中遇到的问题拿出来跟大家分享一下,希望大家都能拿到自己满意的offer。 问题基本都是凭自己记忆,可能不太全,日后想起来的话再更新。希望能帮助到各位。 华为一面 2017年4月8日 1.线程和进程 2.操作系统的线程和java的线程区别 操作系统线程有两种状态:用户态和内核态(和心态) 图 1. Java 线程创建调用关系图 综上所述,Java 线程的创建调用过程如图 1所示,首先 , Java 线程的 start 方法会创建一个本地线程(通过调用 JVM_StartThread),该线程的线程函数是定义在 jvm.cpp 中的 thread_entry,由其再进一步调用 run 方法。可以看到 Java 线程的 run 方法和普通方法其实没有本质区别,直接调用 run 方法不会报错,但是却是在当前线程执行,而不会创建一个新的线程。 3.反射 cvte二面2017年4月12日 1.tcp四次挥手 2.设计模式 3.状态码: (1)304:post请求是否会返回这个状态码 (2)... 4.nginx单点故障: dns负载均衡:一个域名对应多个IP地址。dns服务器将解析请求多个IP。 cvte一面 2017年4月8日 1.内存溢出 指你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,就是溢出 是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory; 根本原因:内存申请的速度大于垃圾回收的速度。久而久之,内存越用越少,导致内存溢出。 Java可能出现的内存溢出: (1)程序中的死循环,或者循环过多,而产生过多重复的对象实例。 (2)存在对象的引用, 使用完没有清楚,导致jvm无法回收。 (3)一次操作中,申请过大的内存。 内存溢出类型: (1)java.lang.OutOfMemoryError:PermGen space 是指内存的永久保存区域。这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace中,它和存放类实例(Instance)的Heap区域不同,GC不会在主程序运行期对PermGenspace进行清理。 JVM由XX:PermSize设置非堆内存初始值,默认是物理内存的1/64; JVM由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。 该错误常见场合: a) 应用中有很多Class,web服务器对JSP进行pre compile时。 b) Webapp下用了大量的第三方jar, 其大小超过了JVM默认的大小(4M)时。 (2)java.lang.OutOfMemoryError:Java heap space 在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。 JVM初始分配的内存由-Xms指定,默认是物理内存的1/64; JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4。 2.内存泄漏 指你用malloc或new申请了一块内存,但是没有通过free或delete将内存释放,导致这块内存一直处于占用状态 结果你申请到的那块内存你自己也不能再访问(也许你把 它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。 Java可能出现的内存泄漏: (1)常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。 (2)偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要 (3)一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。 (4)隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。 3.Java会出现内存泄露吗 会。当分配的对象可达,但是已经无用(未对作废数据内存单元的引用置null),此时该对象内存泄漏,不能被垃圾回收,例如: Vector v = new Vector();for (int i = 0; i |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|