本文编写于 159 天前,最后修改于 159 天前,其中某些信息可能已经过时。

附:2019年Java最新面试指南80题*(点击链接进入)

Java 最新面试题大全 11-20 题 http://blog.zh66.club/index.php/archives/109/
Java 最新面试题大全 21-30 题 http://blog.zh66.club/index.php/archives/110/
Java 最新面试题大全 31-40 题 http://blog.zh66.club/index.php/archives/111/
Java 最新面试题大全 41-50 题 http://blog.zh66.club/index.php/archives/112/
Java 最新面试题大全 51-60 题 http://blog.zh66.club/index.php/archives/113/
Java 最新面试题大全 61-70 题 http://blog.zh66.club/index.php/archives/114/
Java 最新面试题大全 71-80 题 http://blog.zh66.club/index.php/archives/115/

问题 #21

WebRoot下哪些文件可以被客户端访问?哪些不可以访问?

次阅读

答案

默认的,tomcat允许浏览器访问webroot下的所有文件,但除了WEB-INF目录之外。

为什么呢?因为约定WEB-INF目录用于存储程序和配置,如lib,classes,xml配置。显然,这些东西不应该让客户端下载。

但是,我们也可以通过servlet和filter技术,来改变这个默认行为。例如,我们可以专门servlet,让客户端能访问WEB-INF下的东西。


问题 #22

一个文本文件,如何知道它是GBK编码、还是UTF-8编码?BOM是什么东西?

共 426 次阅读

答案

我们平时看到的文本文件,虽然都是文本,但有的是GBK编码,有的UTF-8编码。

那么,对于一个阅读器,它在读取一个文本文件时如何知道它是GBK还是UTF-8呢?

奥秘在于文件头部的几个字节。

规定如下:当以UTF16或UTF-8编码存储时,头部需要添加几个字节作为标识。称为 BOM

UTF8: 头部3个字节 EF BB BF

UTF16BE (Big-Endian) : FE FF
UTF16LE (Little-Endian) : FF FE

由于UTF-8是我们常见的类型,所以只要关闭UTF-8的BOM即可。

当我们自己读取一个文本文件时,便要注意这种事情。要检测头部是否有 EF BB BF ,这三个字节是编码标识,不是有效内容。

final byte[] bom= { (byte)0xEF, (byte)0xBB, (byte)0xBF };

if ( buf[0] == bom[0] && buf[1] == bom[1] && buf[2] == bom[2] )

{

// It's UTF8 encoded ...

}

反之,如果没有检测到这几种BOM,但是ANSI(本地字符编码)。对于Windows中文版来说,本地编码就是GBK编码。


问题 #23

interface里可以定义属性吗?

共 471 次阅读

答案

本质上不可以。

如果强行在interface里加一个属性,则该属性自动变成public static。显然,这不算是个属性。

例如,

public interface Listener

{

int number;

}

虽然number没加static,但是编译会自动把它按public static处理。

为什么这样呢?因为接口就是用来定义接口的,在里面加属性没有意义。

另外,静态属性还叫属性吗?不算了。因为属性表示属于,某对象有属性、这个属性就属于这个对象。但静态对象则表示,这个东西是属于大家的!


问题 #24

war包和zip包用法有什么区别?

共 372 次阅读

答案

其实也没什么区别了。war 包就是一个 zip ,改了个后缀。

war包的工作原理 : 把 war 包放在 webapps 目录之下,然后启动 tomcat 时、会由tomcat 自动将其解压、然后加载这个应用。

但是从实际的部署实践来说,为什么不直接手工解压缩好呢?

一般来说,把项目的WebRoot目录压缩成zip,拷贝到服务器主机之上。解压缩到指定位置,重启 Tomcat ,即完成网站的升级 (数据部分的升级不在本文阐述之中)。显然,使用war让它tomcat来解压缩并没什么好处。


问题 #25

我们知道Eclipse界面本身是用java语言写的,但我们看到的主程序却是eclipse.exe?不是说exe使用C语言写的吗?

共 502 次阅读

答案

平时我们双击 eclipse.exe 就可以启动eclipse,而 eclipse.exe 确实是C/C++写的。

但是我们注意到, eclipse.exe 文件大小只有300多K,是一个非常小的文件。而我们看到Eclipse功能却是非常庞大,显然,Eclipse这么多功能不可能是用300K的程序完成的。

实际上,我们看到的 eclipse.exe只是一个启动器,它启动之后,会使用进程创建的技术,创建一个java进程来运行Eclipse的主程序 ( jar )。所以,在任务管理器里可以看到两个进程:eclipse.exe 和 javaw.exe 。

其实,我们自己在发布 Java 程序的时候,也可以使用相同的思路,发布为一个exe。具体办法,请参考《Swing入门篇》之18章。


问题 #26

javac.exe是用来把.java文件转成.class的编译器。请问Eclipse是用javac来编译的吗?

共 448 次阅读

答案

Eclipse自身就是个编译器,它可以编译java,或者说它自己就相当于javac。

在新建项目时,可以指定编译水平。也就是说,Eclipse可以按JavaSE1.7编译,也可以按1.8的标准来编译。

Java的这个编译方法是个公开的标准, 原则上我们也可以按标准来自己实现一个Java编译器。


问题 #27

面试的时候,感觉可以要10000,但是只敢要8000。怎么办?

共 606 次阅读

答案

从公司的角度看,10000和8000没有任何差别。

从你的面试官角度看。你的面试官就是将来的直接领导。那么,他省下2000块会进入他自己的腰包吗?不会。他想去招你,却因为少给了2000块让你闷闷不乐。你如果不去了或者过早离职了,他岂不是还得花力气再招?显然,这不符合他的利益,他没有理由少给你2000。除非他傻,他不会给自己找不必要的麻烦。

所以,在整个公司范围内,其实没有人关心你这是8000还是10000。人家关心的核心问题,是你行,还是不行?公司允许的额度范围内,面试官会尽量让你心满意足。

记住: 一切的核心在于你行还是不行。他若喜欢你,觉得你行,就会尽量给你满意的工资。

你需要把握对方的情绪,到你是对你满意,一般,还是不满意。如果对方对你满意,就开最高价吧!


问题 #28

经常有人说: 只要有公司接受我实习,就是不发工资也可以。这种说法有什么问题?

共 576 次阅读

答案

求职时要把握两点:

首先,公司不是学校,不是慈善机构,也不是收容所。

其次,公司不差钱,差的是人才。

所以,不要说"不发工资也行"这种话,就是他原意每月倒贴一万块钱给公司,会有公司收他吗?至少正规公司是不会的。( 题外话,不发工资违法 )

为什么呢?因为让他进项目组后,得找个人(导师) 来带这个新人。假设导师月薪2,3万,因为要带新人,至少有1/3的时候要投在新人身上了。人家本来是一个100%战力的干将,因为新人的存在,他的输出值将到70%。同时,整个项目的进度拖延,效率降低,而一般项目会是百万级别的,少的也有几十万。整个项目的损失将更严重,大BOSS一怒之下,整个项目组都得遭殃。

综上,即便每月倒贴一万,他整体上仍然还是个负值。所以,没有哪家公司敢让他进他们的项目组,除非是嫌倒闭的不够快。只有能贡献正的价值,价值越高,人家才越愿意招募。

最后,也有一种公司会不嫌弃,只要交钱,他们就收。什么样的公司呢?当然是培训机构。


问题 #29

找工作需要有工作经验,而没工作就没工作经验。如何理解这种死循环?

共 678 次阅读

答案

"找工作需要有工作经验,而没工作就没工作经验"。这其实是一个梗,大家不要当真了。

否则,你无法解释每年百万的毕业生是怎么找到工作的。大学生会有工作经验?开什么玩笑,那样的大学估计是个培识机构吧!

用人单位对求职者最本质的要求,并不是工作经验。

工作经验能说明什么问题呢?假设你做过京东商场项目,请问,你在项目里的价值有10万分之一吗?恐怕没有。核心功能都是别人做的,你只做了一个小角角,那这工作经验能有什么说服力呢?

所以,用人单位其实最本质的要求,是你的个人能力。

并不是说工作了才能获得能力,你在前期的训练过程中就已经获得了能力!这就好比,歼20从未参加过实战,但没有敌人敢怀疑它的战斗力。人家有实战化训练的!没错,训练不是真的战斗,但是战力是可以通过训练评测的。

用一句老话:有志不在年高,无志空活百岁。虽有十年搬砖经验,并不会有什么核心价值;但有一年 〖Java学习指南系列〗的自学经验,就可以越过他们了!


问题 #30

怎么把Java程序做成exe发布?

共 435 次阅读

答案

参考『Swing入门篇』第18章。

其实独立的exe是很少的,比如微软的Visual Studio,体积有十几G。它是一个独立exe吗,显然不是。

一个软件往往是有多形态的文件或程序组合起来的,比如有exe,有dll,有jar,有xml,有各种资源。它们作为一个整体,来实现一个系统或一个平台。

所以,不要单纯的以为把程序编程一个单独exe文件就是好。正规的软件很少是那么干的。

按照我们提供的解决方案,便是可以满足想要的形态。即,以一个exe来启动我们的java程序。