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.索引 索引是对数据库表中一列或多列的值进行排序的结构,是帮助数据库高效获取数据的数据结构. 通俗理解:索引就 ...
随机推荐
- Fundebug前端异常监控插件更新至2.0.0,全面支持TypeScript
摘要: 是时候支持TS了! Fundebug前端异常监控服务 Fundebug提供专业的前端异常监控服务,我们的插件可以提供全方位的异常监控,可以帮助开发者第一时间定位各种前端异常,包括但不限于Jav ...
- django之ORM字段及参数
目录 ORM字段及参数 orm常用字段 字段合集 自定义char字段 字段参数 外键字段的参数 ORM字段及参数 orm常用字段 字段名 说明 AutoField 如果自己没有定义主键id,djang ...
- Centos7系统Docker安装
目录 前期说明 安装步骤 1.官网中文安装参考手册 2.确定你是CentOS7及以上版本 3.yum安装gcc相关 4.卸载旧版本 5.安装需要的软件包 6.设置stable镜像仓库 7.更新yum软 ...
- Python自动化报错:IndentationError-unindent does not match any outer indentation level
从错误中了解python语法: 如下图: 这个是因为python语句块是由格式来控制(缩进): 解决: 出现这个问题需要看下,自己写的python语句块是否格式缩进的问题 例如:如下图:构造函数前面 ...
- MYSQL5.7的安装(yum、二进制、编译安装)
目录 一.环境说明 二.YUM安装 1.安装MYSQL-YUM源 2.安装说明 3.安装前的准备 4.安装 5.启动 三.变更root密码 四.BINARY-INSTALL 1.基础环境准备 2.建立 ...
- LeetCode 1255 得分最高的单词集合 Maximum Score Words Formed by Letters
地址 https://leetcode-cn.com/problems/maximum-score-words-formed-by-letters/ 题目描述你将会得到一份单词表 words,一个字母 ...
- LG1345 「USACO5.4」Telecowmunication 最小割
问题描述 LG1345 题解 点边转化,最小割,完事. \(\mathrm{Code}\) #include<bits/stdc++.h> using namespace std; tem ...
- Android 中的AlertDialog使用自定义布局
Android使用指定的View开发弹窗功能 Android开发中进程会使用到我们的AlertDialog,但是比较可惜的是我们的Android原生的AlertDialog的效果又比较的简陋,这个时候 ...
- Codeforces Round #598 (Div. 3) C. Platforms Jumping 贪心或dp
C. Platforms Jumping There is a river of width n. The left bank of the river is cell 0 and the right ...
- SQL语句--查找数据select
查看全部数据库表参照地址:https://www.cnblogs.com/zhoulixiangblog/p/12078724.html 本文所用数据库表: prod_id vend_id prod_ ...