每日六道java新手入门面试题,通往自由的道路

目录
  • 1. 面试第一步,自我介绍。
  • 2. 请你简述下对面向对象的理解,面向对象和面向过程的区别?
  • 3. 那你再讲下面向对象的特征有哪些方面
  • 4. 请问:我们是否可以继承 String类?
  • 5. 我再问下final、finally、finalize这三者有什么区别吗?
  • 6. 请讲下String和 StringBuilder、StringBuffer之间的区别?
  • 总结

1. 面试第一步,自我介绍。

这个自我介绍,在整个面试当中可以说是第一步,如果你能把你想说的重点说出来,把面试官带到你准备好的技术点中,可以说,你这次自我介绍成功了!

那么说下自我介绍需要包含什么:基本信息,教育背景、工作经历、项目经历、个人成长等。

可以说模板基本类似,但是每个的技术点、工作经历、项目经历都大不相同。所以在自己把握的点当中突出出来,抓住面试官的眼球。

模板

例如:面试官您好,我叫xxx,18年毕业xx学校本科xx专业,毕业至今已有x年工作经验,在从事Java开发期间任职于x家公司。
第一家公司是xxx,这家公司是做xxx的,在java这一块我主要负责/参与的是xxx项目,在这个项目中主要负责xxx功能模块。在这家公司我收获成长最大的是xxx(技术和做事方面阐述),之所以离开这家公司是因为xxx(离职原因可以不说,就阐述下具体干了些什么)。

第二家公司也就是我上一任公司xxx,这家公司是做xxx,我在这家公司主要负责的是xxx,我在这家公司的收获是xxx,离开这家公司是因为xxx(离职原因可以不说,就阐述下具体干了些什么)。

平时的话我也会经常去学习技术,或者写一些技术博客比如我的公众号、CSDN博客有太子爷哪吒(也可以加一些自己平时的爱好,甚至写的什么博客,什么GitHub地址都行,能让自己加分就行!)

所以来说,这个比较广泛,可以自由发挥。打好第一步,后面的信息相对来说比较足点。我个人面试的话,经常特别紧张,但是一旦我自我介绍说好了,面试官问了我在自我介绍中提过的技术点,我个人就会相对自信点。跟面试官也会聊得比较久,比较开心。其实面试都是双向,他在选择你,你也在选择他,所以不必担心,不必过于紧张。把准备好的说出来就行啦!

那么在你自我介绍完后,我们开始进入面试阶段。

2. 请你简述下对面向对象的理解,面向对象和面向过程的区别?

那我们先考下你的基础知识吧!请讲述下这个问题。

1.个人理解:

  • 软件开发思想,先有面向过程,后有面向对象 。
  • 在大型软件系统中,面向过程的做法不足,从而推出了面向对象 。
  • 都是解决实际问题的思维方式 。
  • 两者相辅相成,宏观上面向对象把握复杂事物的关系;微观上面向过程去处理。
  • 面向过程以实现功能的函数开发为主;面向对象要首先抽象出类、属性及其方法,然后通过实例化类、执行方法来完成功能 。
  • 面向过程是封装的是功能;面向对象封装的是数据和功能 。
  • 面向对象具有继承性和多态性;面向过程则没有 。

2.面向对象

  • 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特 性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护 。
  • 缺点: 性能比面向过程低。

3.面向过程

  • 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗 资源;比如单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发,性能是 最重要的因素。
  • 缺点:没有面向对象易维护、易复用、易扩展 。

嗯?讲的不错嘛!看来是有相对应的理解在里面啊!不错不错,我再考你一个问题。

3. 那你再讲下面向对象的特征有哪些方面

面向对象的特征有具体四个方面:封装、继承、抽象、多态。

  • 封装:封装把一个对象的属性私有化,同时提供一些可以被外界访问的访问。
  • 继承:继承是从已有类得到继承信息创建新类的过程,提供继承信息的类叫做父类,得到继承信息的类叫做子类。通过使用继承我们能够非常方便地复用以前的代码。
  • 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括了数据抽象和行为抽象。
  • 多态:所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发 出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中 实现的方法,必须在由程序运行期间才能决定。实际上就是用同样的对象调用同样的方法会做出不同的反应事情。

4. 请问:我们是否可以继承 String类?

不可以,在我们查看String源码的时候,可以发现:String类是被final修饰,是不可以被继承的。

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    .....
}

而final有什么作用呢?

  • 修饰类时:表示着该类不能被继承。
  • 修饰方法时:表示方法不能被重写。
  • 修饰变量时:表示变量不能被一次赋值,不能再修改了。

所以String被final修饰的好处有:安全,高效。 并且在当只有字符串不可变的时候,我们才能实现字符串常量池,字符串常量池可以为我们缓存字符串,提高程序的运行效率。

可以啊,一问多答,秒啊!既然提到了final这个关键字。那么

5. 我再问下final、finally、finalize这三者有什么区别吗?

  • final:修饰符(关键字)有三种用法:

    • 如果一个类被声明为 final,意味着它不能再派生出新的子类,即不能被继承,因此它和 abstract 是反义词。
    • 将变量声明为 final,可以保证它们在使用中不被改变,被声明为 final 的变量必须在声明时给定初值,而在以后的引用中只能读取不可修改。
    • 被声明为 final 的方法也同样只能使用,不能在子类中被重写。
  • finally: 通常放在try…catch…处理异常中,代表着程序无论正常执行还是发生异常,这里的代码都会执行。 一般是把释放资源的代码放在finally块中。
  • finalize: 是Object类中定义的方法,Java中允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之 前做必要的清理工作。这个方法是由垃圾收集器在销毁对象时调用的。

可以,那再回到String这里,

6. 请讲下String和 StringBuilder、StringBuffer之间的区别?

首先String和 StringBuilder、StringBuffer它们都是可以存储和操作字符串的。

  • String它是使用final关键字字符数组来保存字符串,所以String对象是不可变的。
  • 而StringBuilder和StringBuffer都是继承自AbstractStringBuilder类,这其中也是用字符数组来保 存字符串,但是没有被final修饰,所以是可变的。
  • 但是StringBuilder中的方法没有synchronized修饰,所以它的效率会比StringBuffer高。
  • 安全方面的话:
    • String的对象是不可变的,所以它是线程安全的。
    • StringBuffer因为对方法加了同步锁,所以也是线程安全,但是StringBuilder没有加同步锁,所以 线程不安全的。
  • 性能方面的话:
    • 每次对String类型进行改变的时候,都会生成一个新的String对象, 然后将指针指向新的String的对象。
    • StringBuffer和StringBuilder每次修改,会可以对对象本身进行操作修改,而不是生成新的对象并 改成对象引用。
  • 使用场景:
    • 如果要操作少量的数据用 String 。
    • 单线程操作字符串缓冲区下操作大量数据用StringBuilder。
    • 多线程操作字符串缓冲区下操作大量数据 用StringBuffer 。

小伙子不错嘛!今天就到这里,期待你明天的到来,希望能让我继续保持惊喜!

总结

这篇文章就到这里了,如果这篇文章对你也有所帮助,希望您能多多关注我们的更多内容!

(0)

相关推荐

  • Java后端面试题最新整理

    我们学习java知识,除了要做基础的程序运行外,不可避免的要在面试中遇到一些理论的考察.有些小伙伴程序做的不错,但是理论上面有所欠缺.这里小编整理了一些常见的后端面试题,希望能对小伙伴们有所帮助,下面一起看看吧. 一.八种基本数据类型的大小,以及他们的封装类. byte(Byte) 1 ,short(Short) 2 ,int(Integer) 4 ,long(Long) 8 ,float(Float) 4 ,double(Double)8,boolean(Boolean),char(Chara

  • Java多线程面试题(面试官常问)

    进程和线程 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的.系统运行一个程序即是从一个进程从创建.运行到消亡的过程.在Java中,当我们启动main函数时其实就是启动了一个JVM的进程,而mian函数所在的线程就是这个进程中的一个线程,称为主线程. 线程是比进程更小的执行单位.一个进程在其执行的过程中可以产生多个线程.与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程都有自己的程序计数器.虚拟机和本地方法栈,所以系统在产生一个线程,或在各个线程之间切换工作是,

  • 每日六道java新手入门面试题,通往自由的道路第二天

    目录 1. 你可以讲下你对String类有什么其他的了解吗? 2. == 和 equals 的区别 3. String s= new String("nz")创建了几个字符串对象? 4. 你可以讲下JVM的运行时数据区或者说内存结构吗? 5. 类加载过程 6. 而其中类加载器是什么,那有哪些呢? 总结 1. 你可以讲下你对String类有什么其他的了解吗? 在看String的源码过程中,可以发现String 内部实际存储结构为 char数组,在String中有几个比较重要的构造函数:

  • Java常见面试题之final在java中的作用是什么

    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字. 另外,Java中的String类就是一个final类. 一.final关键字的基本用法 在Java中,final关键字可以用来修饰类.方法和变量(包括成员变量和局部变量).下面就从这三个方面来了解一下final关键字的基本用法. 1.修饰类 当用final修饰一个类时,表明这个类不能被继承.也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰.final类中的成员变量可以根据需要设为

  • Java泛型常见面试题(面试必问)

    1.泛型的基础概念 1.1 为什么需要泛型 List list = new ArrayList();//默认类型是Object list.add("A123"); list.add("B234"); list.add("C345"); System.out.println(list); for(int i=0;i<list.size();i++){ //若要将list中的元素赋给String变量,需要进行类型转换,不然会报Incompati

  • 每日六道java新手入门面试题,通往自由的道路--线程池

    目录 1. 你知道线程池吗?为什么需要使用线程池? 小结: 2. 你知道有多少种创建线程池的方式 3. 线程池的五种状态你有了解吗? 4. 你知道ThreadPoolExecutor的构造方法和参数吗 5. 你可以说下线程池的执行过程原理吗 6. 能否写一个简单线程池的demo? 总结 1. 你知道线程池吗?为什么需要使用线程池? 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源. 而在Java中, JVM 中每创建和销毁线程就需要资源和时间的损耗了,

  • 每日六道java新手入门面试题,通往自由的道路--多线程

    目录 1. 你可以讲下进程与线程的区别?为什么要用多线程? 2. 什么是上下文切换? 3. 说说你知道的几种创建线程的方式 4. 昨天你讲到创建线程后使用start方法去调用线程,为什么run方法不行呢?有什么区别? 5. 你知道你开启一个线程后,它的状态有那些吗? 6. 既然讲到超时方法,那你讲下sleep和wait的区别和他们需要怎样唤醒 总结: 1. 你可以讲下进程与线程的区别?为什么要用多线程? 进程:进程是程序的一次执行过程,是系统运行程序的基本单位. 线程:单个进程中执行中每个任务就

  • 每日六道java新手入门面试题,通往自由的道路--JVM

    目录 1. JVM是如何判断对象是否可回收 2. 你知道有什么垃圾回收的常见算法吗? 3. 你知道有什么垃圾收集器吗? 4. 那你知道什么时候才会触发Full GC 5. JVM中四种引用你有了解过吗? 6. 说说你知道的几种主要的JVM参数 1.堆设置 2.收集器设置 3.并行收集器设置 4.并发收集器设置 5.JVM 调优的参数 总结 1. JVM是如何判断对象是否可回收 垃圾收集器在做垃圾回收的时候,首先需要判断一个对象是存活状态还是死亡状态,死亡的对象将会被标识为垃圾数据并等待收集器进行

  • 每日六道java新手入门面试题,通往自由的道路

    目录 1. 面试第一步,自我介绍. 2. 请你简述下对面向对象的理解,面向对象和面向过程的区别? 3. 那你再讲下面向对象的特征有哪些方面 4. 请问:我们是否可以继承 String类? 5. 我再问下final.finally.finalize这三者有什么区别吗? 6. 请讲下String和 StringBuilder.StringBuffer之间的区别? 总结 1. 面试第一步,自我介绍. 这个自我介绍,在整个面试当中可以说是第一步,如果你能把你想说的重点说出来,把面试官带到你准备好的技术点

  • 每日几道java新手入门面试题,通往自由的道路

    目录 1.请你说一下什么是面向对象? 2.请你简述一下面向对象的三个基本特征? 3.为什么说 Java 是一种半解释半编译的程序设计语言呢? 4.请你说一下Java中的8大基本类型是那些? 5.请你讲讲抽象类和接口有什么区别? 6.请判断当一个对象被当作参数传递给一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 7.请你说一下JVM/JRE/JDK的区别? 8.请你说一下方法重载和方法重写的区别? 9.请你说一下List接口和Set接口的区别? 1

  • 三道java新手入门面试题,通往自由的道路--锁+Volatile

    目录 1. 你知道volatile是如何保证可见性吗? 小结: 2. 悲观锁和乐观锁可以讲下你的理解吗? 3. 你还知道什么其他的锁吗? 总结 1. 你知道volatile是如何保证可见性吗? 我们先看一组代码: public class VolatileVisibleDemo { public static boolean initFlag = false; public static void main(String[] args) { new Thread(new Runnable() {

  • 三道java新手入门面试题,通往自由的道路--多线程

    目录 1. 你知道线程安全问题吗? 2. 那如何解决线程安全问题呢? 3. 那你讲下死锁是什么吧? 总结 1. 你知道线程安全问题吗? 线程安全问题:一般指在多线程模式下,多个线程对同一个共享数据进行操作时,第一个线程还没来得及更新共享数据,从而导致另外一个线程没得到最新的数据,并更新数据,从而产生线程安全问题.比较常见的场景有买票. 我举个例子吧: 需求:比如买周杰伦演唱会的门票,此时有三个窗口同时卖总共100张票.窗口就是线程对象,而100张票的资源,此时就相当于多个线程去抢占cpu的资源去

  • 三道java新手入门面试题,通往自由的道路--JVM

    目录 1. 你知道JVM内存模型吗? 2. 你知道重排序是什么吗? 3. happens-before是什么,和as-if-serial有什么区别 总结 1. 你知道JVM内存模型吗? 在Java的并发中采用的就是JVM内存共享模型即JMM(Java Memory Model),它其实是是JVM规范中所定义的一种内存模型,跟计算机的CPU缓存内存模型类似,是基于CPU缓存内存模型来建立的,Java内存模型是标准化的,屏蔽掉了底层不同计算机的区别. 那我们先来讲下计算机的内存模型: 其实早期计算机

  • 三道MySQL新手入门面试题,通往自由的道路

    目录 1. 讲讲你认识MySQL锁吧 2. 你知道什么是事务.四大特性.隔离级别吗? 3. MyISAM 和 InnoDB 存储引擎的区别 总结 1. 讲讲你认识MySQL锁吧 对于数据库来讲,读写都是非常频繁的吧,在并发量来的时候,在进行读写操作时,可能会产生数据的不一致,这时候需要一些机制来保证访问的次序,所以锁就可以在一定限度保护它的一致性. 首先我们可以按锁的粒度分: 1.表级锁:它上锁是锁住的整张表,当下一个事务来访问的时候,必须等到当前事务把锁释放了,才能对表进行操作访问. 特点:表

随机推荐