不得不会的Java程序员面试题

  • 更新时间:2022-11-28 14:17:37
  • 编辑:璩新荣
这是一篇关于java相关的编程问答内容,被451位程序员关注,内容涉及到java程序员面试题、Java程序员面试题等,由蔡烨赫编辑补充,一起来看下大家的回答。我们把答案参考的资料分享在下方,想深入学习的读者们可以下载学习下。

Java程序员面试题

什么是线程局部变量?

线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java提供ThreadLocal类来支持线程局部变量,是一种实现线程安全的方式。但是在管理环境下(如web服务器)使用线程局部变量的时候要特别小心,在这种情况下,工作线程的生命周期比任何应用变量的生命周期都要长。任何线程局部变量一旦在工作完成后没有释放,Java应用就存在内存泄露的风险。

用wait-notify写一段代码来解决生产者-消费者问题?

请参考答案中的示例代码。只要记住在同步块中调用wait()和notify()方法,如果阻塞,通过循环来测试等待条件。

用Java写一个线程安全的单例模式(Singleton)?

请参考答案中的示例代码,这里面一步一步教你创建一个线程安全的Java单例类。当我们说线程安全时,意思是即使初始化是在多线程环境中,仍然能保证单个实例。Java中,使用枚举作为单例类是最简单的方式来创建线程安全单例模式的方式。

Java中sleep方法和wait方法的区别?

虽然两者都是用来暂停当前运行的线程,但是sleep()实际上只是短暂停顿,因为它不会释放锁,而wait()意味着条件等待,这就是为什么该方法要释放锁,因为只有这样,其他等待的线程才能在满足条件时获取到该锁。

什么是不可变对象(immutableobject)?Java中怎么创建一个不可变对象?

不可变对象指对象一旦被创建,状态就不能再改变。任何修改都会创建一个新的对象,如String、Integer及其它包装类。详情参见答案,一步一步指导你在Java中创建一个不可变的类。

我们能创建一个包含可变对象的不可变对象吗?

是的,我们是可以创建一个包含可变对象的不可变对象的,你只需要谨慎一点,不要共享可变对象的引用就可以了,如果需要变化时,就返回原对象的一个拷贝。最常见的例子就是对象中包含一个日期对象的引用。

数据类型和Java基础面试问题

Java中应该使用什么数据类型来代表价格?

如果不是特别关心内存和性能的话,使用BigDecimal,否则使用预定义精度的double类型。

怎么将byte转换为String?

可以使用String接收byte[]参数的构造器来进行转换,需要注意的点是要使用的正确的编码,否则会使用平台默认编码,这个编码可能跟原来的编码相同,也可能不同。

Java中怎样将bytes转换为long类型?

这个问题你来回答:-)

我们能将int强制转换为byte类型的变量吗?如果该值大于byte类型的范围,将会出现什么现象?

是的,我们可以做强制转换,但是Java中int是32位的,而byte是8位的,所以,如果强制转化是,int类型的高24位将会被丢弃,byte类型的范围是从-128到128。

   以上就是码农之家Java培训机构小编介绍的“不得不会的Java程序员面试题”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

{dede:field.id function=
精选回答2:Java面试:面向对象Java技术

编辑:卓惜天

面向对象的基本概念

对象和类的概念

对象:是把数据和数据操作方法放在一起,作为一个相互依存的整体,即对象

类:对同类对象抽象出其共性,即类,类中的大多数方法只能被本类的方法进行处理,类通过一个简单的外部接口与外界发生联系,对象与对象之间通过消息进行通信

所以我们是在面向对象进行编程,面向一个抽象的实体进行编程。

面向对象和面向过程的区别

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

面向对象的优点

1,较高的开发效率

2,较高的扩展性和代码可重用性

3,保证软件的高可维护性

面向对象的特征

抽象

抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。

继承:

继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

封装

封装是客观事物抽象成类,每个类对自身的数据和方法进行保护,类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

多态性

多态性是指允许不同类的对象对同一消息作出响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同。又比如,同样的选择编辑-粘贴操作,在字处理程序和绘图程序中有不同的效果。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

面向对象的六大原则

单一职责原则(迪米特法则)(Single-Resposibility Principle):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。

开放封闭原则(Open-Closed principle):软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。

Liskov替换原则(Liskov-Substituion Principle):子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。

依赖倒置原则(Dependecy-Inversion Principle):依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。

接口隔离原则(Interface-Segregation Principle):使用多个小的专门的接口,而不要使用一个大的总接口

合成复用原则(Composite Reuse Principle)是尽量使用合成/聚合的方式,而不是使用继承。

抽象类和接口

这两种方式实现了以上面向对象特性里的继承和抽象

抽象类

抽象类的特性如下

抽象类中可以构造方法

抽象类中可以存在普通属性,方法,静态属性和方法。

抽象类中可以存在抽象方法。

如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。

抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。

抽象类不能被实例化,抽象类和抽象方法必须被abstract修饰(其实这就是抽象类和普通类的区别,其它和普通类都差不多)

java1.8实测,抽象类中的抽象方法和非抽象方法在不加修饰符的情况下,都是默认的default

接口

接口的一些使用特性

在接口中只有方法的声明,没有方法体。

接口体只能用 public 和 abstract 修饰。only public & abstract are permitted 。

在接口中只有常量,因为定义的变量,在编译的时候都会默认加上public static final

在接口中的方法,永远都被public来修饰,不加修饰符,默认也是public。 。

接口中没有构造方法,也不能实例化接口的对象。(所以接口不能继承类)

接口可以实现多继承,接口可以继承接口,用extends

接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法则实现类定义为抽象类。

注意:接口是一种特殊的抽象类

抽象类与接口的异同

相同点

1,相同点是接口和抽象类都不能实例化

2,接口的实现类或抽象类的子类实现了接口或抽象类中的方法后才能实例化。

不同点

1,首先类可以实现多个接口,但只能继承一个抽象类(从继承角度)

2,接口体只能用 public 和 abstract 修饰,而抽象类的类访问修饰符除了(和abstract不搭的关键字列表系列)final,abstract,private,static,synchorized,native之外基本都可以(从类的修饰符角度)

3,抽象类可以有普通的成员变量,静态变量。而接口的变量默认为public static final,只能有静态的不可修改的变量,而且必须赋初值(从变量角度)

4,接口里的方法只能用public修饰,而抽象类的方法可以用除了(和abstract不搭的关键字列表系列)final,abstract,private,static,synchorized,native的方法修饰符。并且接口只有未实现方法,但抽象类可以有普通方法(从方法角度)

5,接口不能由构造函数,抽象类可以有构造函数。(从构造函数角度)

重写和重载

多态有两种实现方式,重载(编译期多态)和重写(运行期多态)

重载(静态多分派)

1、在同一个类中 。 2、方法名相同。3、方法的形参列表不同,具体的不同表现为: 类型、个数、顺序的不同才可以构成重载。4、与方法的返回值类型与访问权限或是抛出异常无关

注意:java中可以有多个重载的main方法,只有public static void main(String[] args){}是函数入口

重写(动态单分派)

重写是子类实现父类的方法

在子类中可以根据需要对从基类中继承来的方法进行重写。

重写的方法和被重写的方法必须具有相同方法名称、参数列表和返回类型。

重写方法不能使用比被重写的方法更严格的访问权限。

子类方法抛出的异常必须和父类方法抛出的异常相同,或者是父类方法抛出的异常类的子类。

父类的静态方法是不能被子类覆盖为非静态方法。父类的非静态方法不能被子类覆盖为静态方法。

子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法。区别:运行时,JVM把静态方法和所属的类绑定,而把实例方法和所属的实例绑定。子类定义与父类同名的静态方法但不是覆盖父类的方法

Justfuck j = new B(); //j是父类引用,B()是子类对象,A()是静态方法。j.A();最后打印出的还是base,即父类的输出结果

父类的私有方法不能被覆盖

父类的非抽象方法可以被覆盖为抽象方法

子类可以重写父类的同步方法。如果父类中的某个方法使用了 synchronized关键字,而子类中也覆盖了这个方法,默认情况下子类中的这个方法并不是同步的,必须显示的在子类的这个方法中加上 synchronized关键字才可。当然,也可以在子类中调用父类中相应的方法,这样虽然子类中的方法并不是同步的,但子类调用了父类中的同步方法,也就相当子类方法也同步了

总的来说:方法的重写(override)三同一小一大原则:

方法名相同,参数类型相同,参数列表相同

子类抛出异常小于等于父类方法抛出异常,

子类访问权限大于等于父类方法访问权限。

重载和重写的区别

重载是同一个类中方法之间的关系,重写是子类和父类之间的关系

重写只能由一个方法或只能由一对方法产生关系,重载可以是多个方法之间的关系

重写要求参数列表相同,重载要求不同,重写要求返回值相同,重载不要求

      以上就是码农之家Java培训机构小编介绍的“Java面试:面向对象Java技术”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

相关推荐

最新最全java面试题及答案(初级到高级)

史上最全的中高级JAVA工程师面试题及答案汇总

Java高级开发工程师面试题

2019史上最全java面试题题库大全800题

哪有资深java工程师面试题

相关问题

  • Java面向对象相关面试题(Java面向对象选择题总结归纳)

    今天小编就为大家分享一篇关于Java面向对象选择题总结归纳,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    发布时间:2020-07-09

  • java工程师面试需要穿正装吗(java工程师面试要穿正装吗)

    当你收到HR的面试通知的时候,你记得问HR,贵公司的面试,对于面试者的着装是否有要求,一般的都是没有啥要求的,就算有,她也会主动的告诉你,需要你文明着装,然后需要西服和皮鞋之类的,但是如果没有要求,你要记得,第一文明着装,也就是裤子和上身尽量偏商务风格,换句话说就是下面的裤子尽量是偏深色的裤子,比如黑色的休闲裤,灰黑色的牛仔裤,上身如果热得话就是简单的体恤就OK。 1、可以穿西服去面试,这样首先在第一印象上会

    发布时间:2020-11-21

  • java面试基础内容整理(java面试基础知识详解)

    这篇文章主要介绍了java基面试础知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

    发布时间:2020-01-16

  • Java Spring事务常见面试有哪些(Java面试题集)

    Java面试题集:JavaSpring事务常见面试,Spring和事务的关系

    发布时间:2021-06-13

  • 深圳java面试难吗(深圳java工作难找吗)

    在深圳这种一线大城市Java开发还是非常好找工作的。 另外也是因为java开发前景好,很多软件的开发都离不开Java,因此其程序员的数量最多。 据官方数据统计,在全球编程语言工程师的数量上,Java语言以900万的程序员数量位居首位。java在深圳这个在一线城市还是比较好找的,因为这个发展速度快,所以说用人单位比较多.想找一份JAVA的工作,只要是你的水平是摆在那里的呢,,不难找的。 1、随着信息化的发展,IT培训受到了越来越多人的追捧。在开发领域,

    发布时间:2020-11-27

  • java年底面试要求高吗(java年底面试要求高不高)

    其实没有什么要求高不高的,大多数公司都是在用10000的薪资想招20000的人。这就导致了真正符合10000的人不得不会20000的面试。对,实际上也就是面试最难,进去公司发现,公司连maven都没用,领导还不会用git。这样的公司多的是,而这几年的Java,在大数据背景的影响下,竞争还在加大,招聘都是优中选优,门槛要求肯定在不断提升。 1、大家都知道程序员涨薪主要还是要靠跳槽来完成!但是我们都知道,无论是考试,还是求职,这个难度,参加人数是影

    发布时间:2020-11-29

  • Java工程师面试题2020整理(Java工程师面试题一面二面整理)

    在本篇文章里小编给大家整理的是关于Java 工程师面试题的相关知识点,有需要的可以参考下。

    发布时间:2020-01-16

  • Java有哪些最新面试题及答案(最常见的208道Java最新面试题及答案)

    今天码农之家java培训机构小编为大家分享“最常见的208道Java最新面试题及答案”,本文主要包含十九个模块的java面试题,分别是:Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM,希望通过此能够帮助到正在找工作或是准备找工作的&ldquo

    发布时间:2021-10-03

  • 京东Java面试笔试题(Java面试笔试题)

    今天我们就来说一说在一线互联网公司面试,你想要提前预习哪些面试题,看你是否能回答出来:

    发布时间:2021-12-28

用户回答

17小时26分钟前回答

程序员面试掌握的Java笔试面试题

面试Java开发的求职者要想从众多的优秀者脱颖而出并不容易,因此小编专门汇总了程序员面试掌握的Java笔试面试题,希望能让大家在面试前做好更充足的准备。 1、hread类的start()和run()方法的区别。 答案:start()方法会创建新的线程并启动该线程,所以该方法会调用其他native方法,而run()方法就是:正常的Java方法调用,即在原来的线程中执行java代码。 2、Java中Runnable和Callable的区……

23小时39分钟前回答

2020年程序员常见Java面试题含答案

1)Java中能创建volatile数组吗? 能,Java中可以创建volatile类型数组,不过只是一个指向数组的引用,而不是整个数组。我的意思是,如果改变引用指向的数组,将会受到volatile的保护,但是如果多个线程同时改变数组的元素,volatile标示符就不能起到之前的保护作用了。 2)volatile能使得一个非原子操作变成原子操作吗? 一个典型的例子是在类中有一个long类型的成员变量。如果你知……

3小时18分钟前回答

Java面试题:数据库事务隔离级别

数据库事务隔离分为4个级别,由低到高依次是ReadUncommitted(读未提交)、Readcommitted(读提交)、Repeatableread(可重复读)、Serializable(序列化)。这四个级别可逐步解决脏读、重复读、幻读的问题。 首先来看一下脏读、重复读、幻读的定义。 脏读 所谓脏读,就是指事务A读到了事务B还没有提交的数据,但事务B又进行了回滚,产生了脏数据。 不可重复 不可重复读是指在对于数据……