资讯专栏INFORMATION COLUMN

这些Java面试题必须会-----鲁迅

aristark / 3270人阅读

摘要:事实上,所谓的同步就是指阻塞式操作,而异步就是非阻塞式操作。中可以通过设值注入方法注入和构造器注入实现,推荐使用的方式为设值注入。

写在前面

春天来了,万物复苏的季节到了. 许多程序猿安奈不住生理需求,我要涨工资,我要跳槽. 毕竟金三银四嘛. 那么要从众多的面试者中获得求职机会,我们就要面对很多的面试题.

程序猿是最烦面试题的.面试的公司也烦,面试的人也烦. 但是没办法.面试的人鱼龙混杂,好多公司被理论啥都懂,代码写不出的人搞的就很伤.所以现在面试题也越来越难,越来越刁钻.

但是凡事都有双面性,这样就促使我们看更多的面试题,掌握了更多的知识.不是吗 !

先来点开胃的 1.访问修饰符public,private,protected以及不写时的区别?

 访问权限:
 修饰符       当前类     同包   子类    其他包  
 public      √         √      √      √ 
 protected   √         √      √      × 
 default     √         √      ×      × 
 private     √         ×      ×      × 
 类的成员不写访问修饰符时,默认的是default. 

2.Stirng是最基本的数据类型吗?

  答: 不是. 
  java中的基本数据类型就八种: byte, short, int, long, float, double, char,  
  boolean. 剩下的都是引用类型(reference type).

3.float f = 1.1; 正确吗?

 答: 不正确. 1.1是双精度, 将双精度赋值给浮点型,属于向下转型,会造成精度的丢失.如果要强制
 类型转换,可以写成这样 float f = (float)1.1; 或者 float f=1.1F;
 

4.short a = 1; a = a + 1 和 short a = 1 ; a += 1 有什么区别?

 答: 对于a = a + 1 因为1是int值类型,所以计算的结果是int,要赋值给short,需要强制类型装
 换才能赋值给short.
     对于a += 1; 其相当于 a = (short)(a+1) ;其中已经做了强制类型装换.
     

5.下面代码打印结果?

   Integer a = 100, b = 100, c = 130, d = 130 ; 
   System.out.println(a ==> b); 
   System.out.println(c == d);
   第一个是true,第二个是false. 
   因为a,b,c,d四个变量都是integer对象的引用,所以==比较的不是值,而是引用.如果整型字面
   量的值在-128到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对
   象.
   

6.Java中如何跳出多重嵌套循环?

 答:在最外层循环前加标记A,利用break A;可以跳出循环
 

7.String类可以被继承吗?

 答:不可以. 因为String类是final类.
 

8.String和StringBuilder,StringBuffer的区别?

 答:String是只读字符串,String引用的字符串内容是不能被改变的.而StringBuffer和
 StringBuilder是可变字符串.StringBuilder和StringBuffer的用法相同, 区别是
 StringBuffer被synchronized修饰,效率比StringBuilder低
 

9.构造器是否可以被重写?

 答: 构造器不能被继承,因此不能被重写,但是可以被重载.

10.int a = 1; int b = 2; 怎么让a,b值交换?

 答: a = a ^ b;
     b = a ^ b;
     a = a ^ b;

来点中级的 11.抽象类和接口的相同点和不同点.

 答: 1.抽象类和接口都不能实例化对象,但是可以定义抽象类和接口类型的引用. 
     2.继承抽象类和实现接口都要对其中的抽象方法全部实现
     3.接口比抽象类更加抽象,抽象类中可以定义构造器,可以有抽象方法和具体方法.
     4.接口中方法全部都是抽象方法.
     5.抽象类中的成员可以是private,protected,public,接口全部都是public
     6.抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量.
     7.有抽象方法的类必须声明为抽象类,而抽象类未必要有抽象方法.
     

12.java中会存在内存泄露吗?

 答:理论上java不会存在内存泄露的问题,应为有垃圾回收机制(GC).然而在实际开发中,可能会存在
 无用但可达的对象,这些对象不能被GC回收,因此会导致内存泄露. 例如hibernated的Session中
 的对象属于持久态,垃圾回收器不会回收这些对象,这些对象中有可能存在无用的垃圾对象.如果关闭
 不及时,一级缓存就可能导致内存泄露.
 

13.try{}里面return, finally里的代码会不会执行,什么时候被执行?

 答:会执行. 在方法返回给调用者前执行.因为如果存在finally代码块, try中的return语句不会
 立马返回调用者,而是记录下返回值待finally代码块执行完毕之后在返回.

14.List,Map,Set 三个接口存取元素时,各自有什么特点?

 答:List以特定的索引来存取元素,可以有重复元素
    Set不能存放重复元素.
    Map保存键值对的映射,映射关系可以是一对一或多对一.
    Set和Map容器都有基于哈希存储和排序树的两种实现版本,基于哈希存储理论存取时间复杂度是O(1).
    

15.Thread类中的sleep()和对象的wait()有什么区别?

     答:sleep()方法是线程类的静态方法,调用此方法会让当前线程暂停执行指定时间.将CPU时间片分
     给其他线程,但是对象的锁依然保持, 休眠时间结束会自动回复到就绪状态.
     wait()是Object类的方法,调用对象的wait()方法导致当前线程放弃对象的锁,线程暂停执行,
     进入对象的等待池,只有调用对象的notify()方法或notifyAll()方法时,才能唤醒等待池中的
     线程进入等锁池,如果线程重新获得对象的锁就可以进入就绪状态

16.当一个线程进入一个对象的synchronized方法A之后,其它线程是否可进入此对象的synchronized方法B?

 答::不能。其它线程只能访问该对象的非同步方法,同步方法则不能进入。
 因为非静态方法上的synchronized修饰符要求执行方法时要获得对象的锁,如果已经进入A方法说
 明对象锁已经被取走,那么试图进入B方法的线程就只能在等锁池(注意不是等待池哦)中等待对象的锁

17.说说synchronized关键字的用法?

 答:synchronized关键字可以将对象或者方法标记为同步,以实现对对象和方法的互斥访问,可以用
 synchronized(对象) { … }定义同步代码块,或者在声明方法时将synchronized作为方法的修饰符

18.Java如何实现序列化,有什么意义?

 答:序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化
 后的对象进行读写操作,也可将流化后的对象传输于网络之间。
 序列化是为了解决对象流读写操作时可能引发的问题(如果不进行序列化可能会存在数据乱序的问题)
 要实现序列化,让类实现Serializable接口.该接口是一个标识性接口,标注该类对象是可被序列
 化的,然后使用一个输出流来构造一个对象输出流并通过writeObject(Object)方法就可以将实现对象写出
 如果需要反序列化则可以用一个输入流建立对象输入流,然后通过readObject方法从流中读取对
 象。序列化除了能够实现对象的持久化之外,还能够用于对象的深度克隆
 

19.线程的sleep()方法和yield()方法有什么区别?

 答:sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会;
 yield()方法只会给相同优先级或更高优先级的线程以运行的机会; 
 线程执行sleep()方法后转入阻塞(blocked)状态,而执行yield()方法后转入就绪(ready)状态; 
 sleep()方法声明抛出InterruptedException,而yield()方法没有声明任何异常;
 sleep()方法比yield()方法(跟操作系统CPU调度相关)具有更好的可移植性
 

20.说说你对同步和异步的理解.

 答:如果系统中存在临界资源(资源数量少于竞争资源的线程数量的资源),例如正在写的数据以后
 可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就必须进行
 同步存取(数据库操作中的排他锁就是最好的例子)
 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回
 时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。事实上,所谓的同步就是指阻
 塞式操作,而异步就是非阻塞式操作。
 

好像这也不算高级 21.转发(forward)和重定向(redirect)的区别?

 答:forward是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个
 URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从
 哪儿来的,所以它的地址栏中还是原来的地址
 redirect就是服务器端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,因此从浏览
 器的地址栏中可以看到跳转后的链接地址,很明显redirect无法访问到服务器保护起来资源,但是
 可以从一个网站redirect到其他网站

22.说一说spring 中依赖注入和AOP的实现机制。

 答:实现依赖注入的方式包括:构造器注入、设值注入和接口(回调)注入。Spring中可以通过设值
 注入(setter方法注入)和构造器注入实现IoC,推荐使用的方式为设值注入。
 实现AOP的方式包括:编译时AOP(需要特殊的编译器)、运行时AOP(代理模式)、加载时AOP(需
 要特殊的类加载器)。Spring中使用了运行时的AOP,主要通过代理的方式对原来的代码进行增强实
 现。对于实现了接口的类,Spring通过Java的动态代理(请参考Proxy类和InvocationHandler
 接口)来进行增强;对于没有实现接口的类,Spring使用第三方字节码生成工具CGLIB,通过继承
 的方式对原有代码进行增强
 

23.什么是ORM?

  答:对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象
  模型与数据库的关系模型互不匹配问题的技术;简单的说,ORM是通过使用描述对象和数据库之间映
  射的元数据(在Java中可以用XML或者是注解),将程序中的对象自动持久化到关系数据库中或者
  将关系数据库表中的行转换成Java对象,其本质上就是将数据从一种形式转换到另外一种形式。 

24.简述一下面向对象的"六原则一法则"

 答: 单一职责原则:一个类只做它该做的事情。单一职责原则想表达的就是"高内聚"
 开闭原则:软件实体应当对扩展开放,对修改关闭.要做到开闭有两个要点:抽象是关键,一个系统
    中如果没有抽象类或接口系统就没有扩展点;
 封装可变性,将系统中的各种可变因素封装到一个继承结构中,
 依赖倒转原则: :面向接口编程,就是声明方法的参数类型、方法的返回类型、变量的引用类型时,
 尽可能使用抽象类型而不用具体类型,因为抽象类型可以被它的任何一个子类型所替代
 里氏替换原则::任何时候都可以用子类型替换掉父类型
 接口隔离原则:接口要小而专,绝不能大而全。接口也应该是高度内聚的.Java中的接口代表能力、
    代表约定、代表角色,能否正确的使用接口一定是编程水平高低的重要标识
 合成聚合复用原则:优先使用聚合或合成关系复用代码

后记

对程序员来说,普遍的是敲代码和业务处理能力强于理论知识的.毕竟我们是用键盘吃饭.但是,如果在一个行业做了五年以上.那么这一个语言基本就写透了.那么在回头看这些理论知识就so easy 了.程序员这个行业是与时进步的,要不断的学习来充实自己,努力吧.

年轻人就要努力奋斗-----------鲁迅

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68873.html

相关文章

  • 求职准备 - 收藏集 - 掘金

    摘要:一基础接口的意义百度规范扩展回调抽象类的意义想不想通过一线互联网公司面试文档整理为电子书掘金简介谷歌求职记我花了八个月准备谷歌面试掘金原文链接翻译者 【面试宝典】从对象深入分析 Java 中实例变量和类变量的区别 - 掘金原创文章,转载请务必保留原出处为:http://www.54tianzhisheng.cn/... , 欢迎访问我的站点,阅读更多有深度的文章。 实例变量 和 类变量...

    cuieney 评论0 收藏0
  • 来自投资银行的 10 个 Java 面试

    摘要:本文介绍一些来自投资银行的针对三年以上经验的开发人员面试题。第七题和这两个方法有什么不同答案本题取自我的投资银行针对有经验的开发者的五十个多线程面试题列表。总结以上就是投资银行通常会出的面试题。 原文地址: https://dzone.com/articles/10... 有为数不少的开发者希望能在像 Barclays、Credit Suisse、Citibank 等等那样的投资银行做...

    xbynet 评论0 收藏0
  • 【译】十个刁钻的 Java 面试

    摘要:原文地址这里列出了十个常见而又刁钻的开发人员面试题及答案,这些题目是我从上找来的。如果你是初中级开发人员,而且近期准备面试的话,这些题目可能对你有些帮助。成员即没有访问修饰符的成员可以在当前包下的所有类中访问到。 原文地址:https://dzone.com/articles/10... 这里列出了十个常见而又刁钻的 Java 开发人员面试题及答案,这些题目是我从 StackOverf...

    xuhong 评论0 收藏0
  • 想进大厂?50个多线程面试,你多少?【后25】(二)

    摘要:大多数待遇丰厚的开发职位都要求开发者精通多线程技术并且有丰富的程序开发调试优化经验,所以线程相关的问题在面试中经常会被提到。掌握了这些技巧,你就可以轻松应对多线程和并发面试了。进入等待通行准许时,所提供的对象。 最近看到网上流传着,各种面试经验及面试题,往往都是一大堆技术题目贴上去,而没有答案。 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就...

    caozhijian 评论0 收藏0

发表评论

0条评论

aristark

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<