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

附: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/

问题 #31

什么叫Java虚拟机?(JVM)

共 472 次阅读

答案

JVM, Java Virtual Machine , Java虚拟机

JVM并不是一个真实存在的机器或者系统,只是一个设计上的抽象。当用 java.exe 或是 javaw.exe 来执行一个Java程序时,就认为是启动一个JVM。

换言之,Java程序在JVM环境中运行。

对比一下C语言。用C语言编译得到的程序,里面充满了一条一行的指令,它们可以被当前系统和CPU来运行。

而Java编译得到的程序 (.class),里面也是一条一行指令,但这个指令是JVM这个CPU的指令,不是你的Intel CPU的指令。可以想象,当java.exe运行之后,.class里的指令被一条一条执行,java.exe把这些指令再转换成对本地系统的操作。

简单地讲,*.class如同运行一个虚拟的主机之上,这个虚拟的环境就叫 JVM。

问题 #32

网站后台如何给用户发送一封 Email ?

共 356 次阅读

答案

Java 里发送邮件有两种方案:

第一种方案:(业余方式)

小A : aaa@163.com 给 小B bbb@qq.com 发送一封邮件

-> 小A 使用Java Mail 的API , 将邮件发送到 smtp.163.com

-> smpt.163.com 将此邮件转发给 smtp.qq.com

则 小B 登录自己的 bbb@qq.com ,收到邮件。

第二种方案:(专业方式)

当网站后台给用户发邮件时,实际上是使用直接发送的方式。即网站本身的地位就是邮件服务器,把邮件直接送到 mx1.qq.com 。

关于此种方式的详细原理,请参考《项目应用篇》之邮件的发送。

问题 #33

用Java可以编写俄罗斯方块游戏吗?

共 538 次阅读

答案

可以。

参考《Swing项目实战篇》之 ”俄罗斯方块“一章。熟悉Android开发的同学,可以很容易将它改造为安卓版本。

问题 #34

实习与试用有什么区别?

共 512 次阅读

答案

试用:针对普通员工。试用期不超过3个月,工资为合同工资的80%以上。

实习:一般针对还未毕业的大学生。这种状况实际上属于兼职。

对中小公司而言,招实习生基本属于败家行为。因为实习生一般难以确保出勤,不可能委以重任,想想一个组员 今天在明天不在的情况有多糟糕。而且,实习几个月的时间,对一个大项目来说只是开始;也就是说,好不容易把实习生带出点模样的时候,他就跑了,在他身上的前几个月投入全部浪费。

所以一般的项目经理不会选择在实习生投入时间,这个投入很容易打水漂。

那么,大公司为什么会留实习生职位呢?这就是另外一个问题了。

问题 #35

JavaScript里如何定义一个方法并立即执行?

共 384 次阅读

答案

    M.ready = function()

​    {

​      var adminPassword = Af.getLocal('adminPassword', '');

​      if(adminPassword.length >0)

​      {

​        $('.password').val(adminPassword);

​        $('.remember').prop('checked', true);

​      }

​    }() ; 

蓝色部分是一个匿名方法,后面直接加一个() ,表示对其调用。。算是 JS 的一种写法

类似的还有

( function(){

   // .. 

}() );

问题 #36

找工作时,如何区分对方是不是培训机构?

共 459 次阅读

答案

让你交钱的,要么是骗子,要么是培训机构。有几种表现形式:

(1) 先要你交钱的、后学习的

(2) 声称先学习、后交钱的,然后在工作之后每月还款的;

(3) 支支唔唔、不明确谈钱的,而是反复说人才培养、素质提高、能力提升的。。

然后,我们要对行业的情况有一定的常识性的了解。一家公司要生存,是必定有其可以盈利的主营业务的。

华为,卖通信设备赚钱;

小米,卖手机赚钱;

京东,为商家为提供交易平台赚钱;

美团,收取商家佣金赚钱,

英孚教育,提供英语培训服务赚钱

。。。

你去一家公司面试,要问清楚这家公司靠什么业务赚钱。这是每一个面试者的权力,即使你不问,面试官通常也 如会介绍给你(如果面试官对你的表现满意的话)。

但是,如果一家公司不敢提它的主营业务,而在字里行间提及"培养”、“素质提高”、“人才输送”,那就肯定是培训公司无疑了。以培训、培养为业务的公司,不就是培训公司吗?正常公司最关心的应该是如何做好产品、卖好产品,而不是像个慈祥的老师一样关心你成长不成长的。

可能的套路:

“我们提供一流的素质提升体系“

”我们这里表现好的人才,就自己用了;实在不行的,会输送给其他公司“

”你目前水平还不够,但是经过我们的培养..."

你只要问他一问:你们公司的主营业务是什么?靠什么盈利?就一切明了。

问题 #37

在Swing里,JTable控件如何添加右键点击事件支持?

共 360 次阅读

答案

以下为部分代码节选,具体应用请参考《项目实战篇》之“图书数据管理"项目

1 默认 JTable 已经打开了 MOUSE_EVENT_MASK ,所以下面的enableEvents()可以省掉

// enableEvents(MouseEvent.MOUSE_EVENT_MASK |MouseEvent.MOUSE_MOTION_EVENT_MASK );

2 重写

@Override
protected void processMouseEvent(MouseEvent e)
{
   if(e.getID() == e.MOUSE_RELEASED)
  {
     if(e.getButton() == MouseEvent.BUTTON3)
     {
          // 获取点中的位置
         int row = this.rowAtPoint(e.getPoint());
         int col = this.columnAtPoint(e.getPoint());

​         // 选中该行
​         if(row >= 0)
​         {
​           this.clearSelection();
​           this.addRowSelectionInterval(row, row);
​          }

​         if(rightClickedListener != null)
​         {
​           rightClickedListener.clicked(this, row, col, e);
​         }
​     }
   }
   super.processMouseEvent(e);
}

问题 #38

JavaSE、JavaME 和 JavaEE 各是什么意思,有什么区别?

共 938 次阅读

答案

其实 Java 最开始是规划了3个版本:

Java SE : Standard Edition , 标准版

Java ME : Micro Edition, 精简版

Java EE : Enterprise Edition , 企业版

SE面向桌面应用,ME面向嵌入式应用,EE是面向企业应用。必须要强调的是,这仅仅是作者的设计和规划。那么,市场最终接受了多少呢?

如今,ME已经消声匿迹,因为硬件水平发展地太快,如今的嵌入式硬件(如手机、电视)比当初的586、赛扬、酷睿还要强了,自然就没有必要专门为嵌入式环境搞一个版本了。

现在还剩SE和EE,它俩有什么区别呢?

Java SE : 就是我们下载的JDK里所带的API,比如,java.lang., java.util., java.security.* 等,算是Java的基础API吧,Java开发必不可少的东西。

Java EE : 这是Java官方提供的另一堆API,初衷是为了方便企业级应用的开发。比如,JDBC、JNDI、EJBs、RMI、JSP、Java Servlets、XML、JMS、Java IDL、JTS、JTA、JavaMail和JAF等技术或框架。时至今日,这里面还比较活跃的技术应该就只是 JDBC,JSP/Servlet 了。

企业级应用一定得用JavaEE 的 API吗?当然不是了,企业自己会写API啊。我们用的最多的,还是来自apache软件基金会apache.org下提供的软件包,如HTTP相关的可以用HttpComponents。除此之外,还有其他组织提供的一 些API,如dom4j, json.org等。( apache.org下提供的API数量比 JDK更多,更面向企业 )

总之,Java EE 里我们还在使用的就是 JDBC ,Servlet ,其他的技术并不受企业的青睐,企业应用有其他更好的选择。

问题 #39

外包公司是做什么的?

共 478 次阅读

答案

在大家找工作时,有一类公司叫外包公司。简单地理解,就是“包工头”的性质,不做自己的东西,给别人做东西的意思。公司负责人员组织、社保、少量的培训,公司的收入来自第三方用工单位。

外包公司,一般有两种业务形式:人力外包,项目外包。

人力外包:你到这个公司之后,公司把你"租"到第三方公司(如华为、中国银行)去上班写代码。三方公司则按人头给你们公司老板付钱,然后你们老板再给你发工资。那在这种模式下,外包公司的老板岂不是啥也没做就能赚钱?可以说是这样,就是按人头数钱,人越多,公司赚的越多。所以,对于低学历人群,外部公司是不会嫌弃的。

那么,三方公司为啥不直接招人开发呢?一方面可能是因为项目组缺人,一时半会招不到。另一方面,可能是临时需要,等忙完了就不需要了。如果是正式员工,养着成本太高,不能随时辞退。而对于外包人员,项目完了人员就自动退回本公司了。对于三方公司来说,使用外部人员在人力管理上会灵活一些。

项目外包:公司承接开发项目,写完了之后,代码一并交给三方公司。这对公司的要求要高一些,公司至少要有一个高级开发带队。显然,这种情况下公司也是没有自己的独立产品的。

在中国,比较大而常见的外包公司有:文思海辉,中软,软通,博彦,东软等。

对于低学历或无学历人群,想入行的话,外包公司是个不错的选择。混点经验,再做更远的打算。

对于高学历人群,不建议去外包公司。

对了,最后还有一个对日外包。由于日本是发达国家,对外国人也不歧视,能到日本做项目也是个不错的选择。

问题 #40

APP 与 网站后台进行消息交互时,除了 RESTful / JSON 方式之外,还有别的方式吗?

注:无论是桌面GUI, 还是安卓GUI程序,均称为APP

共 374 次阅读

答案

APP与网站后最常见的方式,就是HTTP方式来调用后台的接口,RESTful调用是我们最常见到的形式。

这是最成熟的一种形式。一方面,网站后台可以很轻松地创建RESTful接口;另一方面,APP端也有成熟的API来调用RESTful接口,比如在《项目应用篇》里所介绍的HttpComponents库。

但这不是唯一的方式。实际上,APP与网站的交互也可以采用自定义协议,即前后台约定一个自定义的TCP协议来实现数据的交互。关于自定义协议,参考《网络通信篇》。