java面试填坑解惑篇
感谢原文出处:https://www.cnblogs.com/javazhiyin/
NO1.请简单描述JDK和JRE的区别?
NO1.回答JDK和JRE的区别这道题,首先要回答两个名次的概念,JDK就是Java Developement Kit的缩写,java最核心的东西,包括了java的运行环境(JRE),一些基本类库方便开发人员开发程序和源码压缩等。主要由bin(可执行命令如javac,java等)、include(和java虚拟机交互的头文件)、lib(java类库)、 jre(运行环境)组成。
而JRE(Java Runtime Environment)是java的运行环境,包含java虚拟机和一些基本运行类库,但不包括调试和开发工具,一个项目被编译为.class后缀后即可在JRE上运行。
顺便补一下上面提到的JVM(Java Virtual Machine)知识,JVM是 java运行时所需要的环境,JVM是一种用于计算设备的规范,它是一个虚构出来的微小计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。针对java用户,也就是拥有可运行的.class文件包(jar或者war)的用户。
里面主要包含了jvm和java运行时基本类库(rt.jar)。rt.jar可以理解为java源码编译后的jar包。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行,比如windows或者linux。这就是Java所宣称的“一次编译,到处运行”的原因。
NO2.告诉我JVM的类加载过程?对不起各位这里直接提升了面试的难度,但是工作三年以上的中级程序员还是需要了解的,看图说话还差哪些过程么。
NO2.第二题考察大家对JVM加载class的理解程度,题目的图中缺少的步骤为应用和卸载两步,因为当JVM完成前面三步以后就等系统调用,当实例完成线程任务后即被JVM进行GC,当Class不被引用后就会被卸载。
NO3.哦,工作快三年了,了解多JVM的双亲委派模式么,为什么需要由父类加载类再传递给最下面的类加载器?
NO3.java中可以加载类的加载器由高到低顺序为BootstrapClassLoader,ExtensionClassLoader,AppClassLoader三类,JVM加载类时都是由AppClassLoader请求他的父类ExtensionClassLoader进行加载,如果父类可以加载类到虚拟机则子类不能再加载类,依次类推,只有那些一二级类加载器都没发现的类才被AppClassLoader加载,这类class可以理解为自定义类。这样设置的初衷主要是出于安全考虑,免得被不怀好意的人破篡改API类库。
NO4. 哦,对了如何如何控制多个子线程任务执行完成,再执行主线程程序?除了thread.join(2000),还有其他方法么?
NO4.在主线程中启动子线程,为了保证子线程统一执行完成再执行主线程代码除了上面提到的join(),join(2000)外,其实还可以使用countDownLatch方法,主要实现原理是通过在主程序中设置子线程数量,同时在子线程中调用countDownLatch.countDown()方法计数达到统计线程的目的,顺便提到一下CyclicBarrier目的是让子线程同时完成的,感兴趣的同学可以多去了解下。
NO5. 下面的代码执行以后S1,S2分别等于多少?还是说会出现什么问题?
NO5.此题主要考察越界和转化的问题,S1的值是-128,S2的值是2。第一行代码因为byte最大值是127在计算机中表示为01111111加1后变为10000000此时是补码,计算机只存储补码,此时计算机都是通过补码来表示数值的11111111的补码是符号位不变其他位取反为10000000(源码)就是-128,S2的时候其实是Integer类型强制转换的结果。
NO6.年轻人,请回答一下servlet的生命周期,这个对于了解配置加载和预加载参数有重要意义?
N06.主要考察对容器生命周期的理解,无论后面出现怎样的框架,底层始终都没有变化,答案基本回答到点上了,说一句目前的大多框架都是默认单例类实例的,因此使用完成后不会被destroy掉。
NO7.想必你知道一些关于threadLocal的知识,我不问你怎么使用,也不问你使用场景。我想说的是线程池提供给用户的线程会存在数据混淆么?(这个可能有点高端,有些高级开发都不知道,呵呵)
NO7.关于threadLocal知识,目前来说使用的不是很多,大家可以了解他的使用场景是为了隔离数据,就是说希望线程各自访问各自的数据互不干涉。题目中的坑其实就是线程池公用出现的问题,当上一个线程不是新创建的而是来自线程池时存在threadLocal中止没被清空的情况,造成数据篡写。正确的做法就是每次使用完成后都立马置为null,这样伴随着线程销毁,变量也被销毁。
NO8.知道序列化吧,什么情况下需要序列化?RPC服务中的参数为啥都需要序列化呢?参数中的日期类型到底用sql.Date还是util.Date?
NO8.这道题其实是考察序列化的场景的,序列化的目的依赖为了进行网络传输,确保传过去的字节流还能被反编译找到对应的类,二来为了方便本地硬盘存储。RPC(Remote Protocal Call)服务为异步服务都是通过网络传输数据,当然需要序列化数据。Java.sql.Date类继承java.util.Date类,但是并未实现序列化因此作为参数不能在RPC服务中传输。
NO9.请问各位大侠,这个诡异的代码能运行么?
NO9.这道题已经有小伙伴给出了答案,其实这道题大家都会想着null转换对象肯定还是null,然后就空指针了,结果是被狠狠打脸了。其实我之前也不知道这个东西,还好查了资料及时补起来了,一句话:null不属于任何类型,可以被转换成任何类型,但是用instanceof永远返回false.
NO10.做下小调查,大家平时工作用到的代码管理器有哪些?是CVS还是SVN亦或GIT或者VSS,能给出使用的理由么?作者目前用的是SVN,因为这个工具当前比较通用受众多因此在使用。
NO10.听大鼻说Github被微软收购了,后面还不知道要怎么进行运营呢。说又出来一个新的代码版本管理工具GitLab,可我连github还没用熟练呢,简直不得不感叹技术更新的速度。
java面试填坑解惑篇的更多相关文章
- 【Java面试】基础知识篇
[Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...
- Java面试知识点之线程篇(三)
前言:这里继续对java线程相关知识点进行总结,不能间断. 1.yield()方法 yield()的作用是让步.它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执 ...
- Java面试知识点之线程篇(二)
前言:接上篇,这里继续对java线程相关知识点进行总结. 1.notify和notifyall的区别 notify()方法能够唤醒一个正在等待该对象的monitor的线程,当有多个线程都在等待该对象的 ...
- Java面试知识点之线程篇(一)
前言:在Java面试中,一定会遇到线程相关问题,因此笔者在这里总结Java中有关线程方面知识点,多数从网上得来(文中会贴出主要参考链接),有些也是笔者在面试中所遇到的问题,如有错误,请不吝指正.主要参 ...
- Java面试知识点之计算机网络篇(一)
前言:在Java面试中,计算机网络的知识也是一项重点,因此笔者在此对计算机网络的相关知识进行总结. 1.OSI参考模型 自下而上:物理层(物理介质,比特流).数据链路层(网卡.交换机).网络层(IP协 ...
- Java面试知识点之虚拟机篇(一)
前言:Java虚拟机的重要性不言而喻,不管是在实际工作中,还是面试中. 1.JVM架构 要点: 主要了解Java虚拟机运行时数据区:程序计数器.Java虚拟机栈.本地方法栈.Java堆和方法区. 参考 ...
- Java面试系列第2篇-Object类中的方法
Java的Object是所有引用类型的父类,定义的方法按照用途可以分为以下几种: (1)构造函数 (2)hashCode() 和 equals() 函数用来判断对象是否相同 (3)wait().wai ...
- Java面试系列第3篇-HashMap相关面试题
HashMap是非线程安全的,如果想要用线程安全的map,可使用同步的HashTable或通过Collections.synchronizeMap(hashMap)让HashMap变的同步,或者使用并 ...
- Java面试知识点之数据库篇(一)
前言:数据库的相关知识,在面试中也经常出现,笔者认为非常有必要对此类知识进行相关总结. 1.索引 索引是对数据库表中一列或多列的值进行排序的结构,是帮助数据库高效获取数据的数据结构. 通俗理解:索引就 ...
随机推荐
- 43-安装 Docker Machine
前面我们的实验环境中只有一个 docker host,所有的容器都是运行在这一个 host 上的.但在真正的环境中会有多个 host,容器在这些 host 中启动.运行.停止和销毁,相关容器会通过网络 ...
- Mysql存储过程--大于十分钟执行
--存储过程 DELIMITER | DROP PROCEDURE IF EXISTS update_tatus | CREATE PROCEDURE update_status() BEGIN mi ...
- JAVA跨域、RestTemplate高并发下异常与配置、JSON数据Long转String
## 跨域支持 import org.springframework.context.annotation.Bean; import org.springframework.context.annot ...
- 201871010126 王亚涛《面向对象程序设计 JAVA》 第十三周学习总结
内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/ ...
- acwing 49. 二叉搜索树与双向链表
地址:https://www.acwing.com/problem/content/87/ 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表. 要求不能创建任何新的结点,只能调整树中结点指针 ...
- LeetCode 5273. 搜索推荐系统 Search Suggestions System
地址 https://leetcode-cn.com/problems/search-suggestions-system/ 题目描述给你一个产品数组 products 和一个字符串 searchWo ...
- 【Oracle】SQL的各种连接join
SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. 最常见的 JOIN 类型: INNER JOIN(简单的 JOIN).LEFT JOIN.RIGHT JOIN.F ...
- 新终端必须source /etc/profile的解决办法,同时解决变色问题
Linux环境变量文件 /etc/profile:在登录时,操作系 统定制用户环境时使用的第一个文件 ,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. /etc /enviro ...
- Python程序练习题(一)
Python:程序练习题(一) 1.2 整数序列求和.用户输入一个正整数N,计算从1到N(包含1和N)相加之后的结果. 代码如下: n=input("请输入整数N:") sum=0 ...
- CF732D Exams
这题可以用二分答案来做 那么为什么可以用二分答案呢? 答案当然是满足了单调性. 假设用\(x\)天能够考完所有试,那么用大于$x $天必定也能够考完所有试,所以满足了单调性,我们就可以二分答案 那么如 ...