Java名企面试题整理(已拿到阿里、百度、微店offer)

        说到面试,首先要说的是简历问题,作为以后要在计算机领域工作的人,技术博客(csdn、博客园等)和Github账户(公司的项目版本管理工具用的也是git,不排除有些老项目使用的是svn)都是我们要经常要接触的,也是要写在简历里面的。技术博客活跃用户和开源社区活跃用户在面试中都是加分项,尤其对于一个不善于表达的人,这种加分会更明显,因为面试是需要在短暂的几次交涉中就决定你是否在名企所想要的人,如果自己不善于表达,可以借助github活跃度和之前写过的博客为自己加分,但是也不能完全依赖,因为表达能力同技术一样重要,未来工作中一个不会表达的人是无法和技术团队成员、产品、运营、交互等正常交涉的。

        再者要说的是回答问题的思路:首先回答相关问题的基本的核心知识点,然后描述特殊的东西,最后加上锦上添花的东西。如果我们要回答一个新技术的问题大概思路和步骤是:我们要做什么,怎么做,做的过程中遇到了什么弊端,不用这项新技术传统方式是怎么解决的,用新技术又是怎么解决的。

       答题时,先答是什么,再答有什么用和要注意什么(要充分展现自己的心得,而不是人云亦云),答案的段落分明,层次分明,条理清晰都非常重要,从这些表面的东西可以看出一个人的习惯、办事风格、条理等。

      要表达出你做出答案的思路过程,或者说你记住答案的思想。答题就是给别人讲道理,摆事实。大题不局限于什么格式和形式,就是将自己的学识展现出来!别因为面试官个别问题难度比较大或是模棱两可,心里就懈怠了没有底气,不敢回答。你要大胆的去说出你自己的观点和指出对方的题目很模糊,面试官也不是万能的,可能也会有些问题表达的不是很清楚,所以要大胆的表达出自己的观点和疑问。

      例如:讲Ajax时,我们不希望改变原来的整个网页,而只是改变网页中的局部内容,例如,用户名校验,级联下拉菜单,下拉树状菜单。用传统方式,就是浏览器自己直接向服务器发请求,服务器返回新页面覆盖原有的页面,这样的给用户带来的用户体验就不是那么好了,所以我们使用Ajax。


1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 

可以有多个类,但是只能有一个public类,并且public类名必须和文件名相一致

2、Java中有没有goto

Java中的保留字,现在没有在Java中使用

3、Java中&和&&的区别

&&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。&&还具有短路功能,即如果第一个表达式为false,则不再计算第二个表达式,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当strnull时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长,&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4bit位,如,0x31 & 0x0f的结果为0x01。 

备注:这道题先说两者的共同点,再说出&&&的特殊之处,并列举一些经典的例子来表明自己理解透彻深入、实际经验丰富。 

4、switch语句能否作用在byte上,能否作用在long上,能否作用在String

switchexpr1)中,expr1只能是一个整数表达式或者枚举常量,整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,longString类型(JDK1.7之后支持String)都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。

public void testSwitch(String str) {  
    switch (str) {  
    case "test1":  
        System.out.println("test1");  
        break;  
    case "test2":  
        System.out.println("test2");  
        break;  
    case "test3":  
        System.out.println("test3");  
        break;  
    }  
}  

5、用最有效率的方法计算出2乘以8等于几?

2 << 3,因为将一个数左移n位,就相当于乘以了2n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,效率最高,所以,2乘以8等於几的最效率的方法是2 << 3。

6、什么是SOA(service orientied architecture),谈谈你对SOA的理解?

所谓SOA就是面向服务编程,通常我们所写的一个web项目都是分层设计,前端到后端的Http请求,首先到达后端的Controller层,然后Controller调用Service(例如:userService)进行我们所需要进行的操作进而返回我们所需要的数据(Service下面的Dao层就不着重介绍了),这样就完成了一次Web请求。而如果另外一个web项目也需要实现的功能和前面这个Web项目一样的userService功能,那我们是不是要在新项目中重新写一个一模一样的userService呢?如果这样写肯定会造成项目的冗余代码,该如何解决这种冗余呢?很自然我们会想到将一个产品下面的几个web项目中的服务(service)都集中放在一个地方,这几个web项目想要调用就直接到这个存放服务的地方去拿,这样我们写Controller就不需要关注底层服务(service)的实现,只需要关注Controller实现就可以了。如果需要维护代码,只需要改动service实现就可以了,所有web项目调用service代码完全不用改动,是不是和工厂模式很像呢?通常实现SOA功能的RPC框架有HSF、Dubbo。

7、Java中实现多态的机制是什么?

靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。

8、StringBuffer和StringBuild的区别

 StringBufferStringBuilder类都表示内容可以被修改的字符串,StringBuilder是线程不安全的,运行效率高,如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问它,不存在不安全的因素了,则用StringBuilder。如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用,那么最好用StringBuffer







你可能感兴趣的:(Java名企面试题整理(已拿到阿里、百度、微店offer))