01 面向对象的特征

  1. 封装:隐藏部分对象的属性和实现细节,以不同的访问级别来保护对象内部的数据,防止外部程序的不当访问,对外提供公开的接口。【私有的属性,共有的方法】

  2. 继承:子类自动共享父类数据和方法。

  3. 多态:对于同一个行为,不同的子类对象具有不同的表现形式。同一个事件发生在不同的对象上会产生不同的结果。

    编译时类型和运行时类型不一致

    【举例:Person类拥有task方法 Student和Teacher继承 其中学生的任务的学习 老师的任务的教学】

封装:私有的属性 共有的方法

继承:子类共享父类

多态:不同子对象对同一行为有不同表现形式

02 &和&&的区别?

都是逻辑与 &&有短路性 &一般作为 按位与运算符

重点说短路和按位与

03 String 是 Java 基本数据类型吗?可以被继承吗?

String 类使用 final 修饰,无法被继承

不是。Java 中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type),剩下的都是引用类型(reference type)。

基本数据类型:数据直接存储在栈上

引用数据类型区别:数据存储在堆上,栈上只存储引用地址

String类不可继承 final修饰

基本数据类型8个

基本数据类型是放在栈上

引用数据类型的值放在堆上,栈只保存引用地址

03 浅谈JDK、JRE、JVM区别与联系

JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是JVM(Java Virtual Machine),lib中则是JVM工作所需要的类库,而JVM和 lib合起来就称为JRE(Java Runtime Environment,Java运行环境)。

JVM不能单独搞定class的执行,解释class的时候JVM需要调用解释所需要的类库lib。在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。JVM+Lib=JRE。总体来说就是,我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。

JDK 开发环境

JRE 运行环境

JVM 虚拟机

04 String和StringBuilder、StringBuffer的区别?

String:String 的值被创建后不能修改,任何对 String 的修改都会引发新的 String 对象的生成。

StringBuffer:跟 String 类似,但是值可以被修改,使用 synchronized 来保证线程安全。

StringBuilder:StringBuffer 的非线程安全版本,没有使用 synchronized,具有更高的性能,推荐优先使用。

String不可直接改变值,只要改变值本质上是创建了一个新的对象

StringBuilder 可以改变值 线程不安全

05 重载(Overload)和重写(Override)的区别?

方法的重载和重写都是实现多态的方式,区别在于重载实现的是编译时的多态性,而重写实现的是运行时的多态性。

重载:一个类中有多个同名的方法,但是具有有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)。

重写:发生在子类与父类之间,子类对父类的方法进行重写,参数都不能改变,返回值类型可以不相同,但是必须是父类返回值的派生类。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。

重载 方法同名不同参

重写 子类重写父类,只能是返回值不一样,其他的保持一致

05 抽象类(abstract class)和接口(interface)有什么区别?

普通类像亲爹 ,他有啥都是你的。

抽象类像叔伯,有一部分会给你,还能指导你做事的方法。

接口像干爹,可以给你指引方法,但是做成啥样得你自己努力实现。

抽象类更像普通类 接口次之

抽象类不清楚自己能做什么不能做什么 接口是什么都不做 只提供思想(方法)

06 Error 和 Exception 有什么区别?

Error 和 Exception 都是 Throwable 的子类

Error 表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题,比如内存溢出,不可能指望程序能处理这样的情况。

Exception 表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题,也就是说,它表示如果程序运行正常,从不会发生的情况。

error表示最高级的错误,程序没办法处理,而且一定会终止程序的运行。

exception次之,分为系统异常和普通异常

java 为系统异常和普通异常提供了不同的解决方案,编译器强制普通异常必须 try..catch 处理或用 throws 声明继续抛给上层调用方法处理,所以普通异常也称为 checked 异常,而系统异常可以处理也可以不处理,所以,编译器不强制用 try..catch 处理或用 throws 声明,所以系统异常也称为 unchecked 异常

07 ArrayList 和 Vector 的区别

动态 索引 有序 实现了List接口 List接口继承了Collection接口

Vector 线程安全 ArrayList不是

08 ArrayList 和 LinkedList 的区别

ArrayList 底层基于动态数组实现,LinkedList 底层基于链表实现

索引 ArrayList > LinkedList

随机插入和删除 ArrayList < LinkedList

顺序插入和删除 ArrayList > LinkedList

09 HashMap 和Hashtable 的区别

HashMap 允许 key 和 value 为 null,Hashtable 不允许。

HashMap 是非线程安全的,Hashtable是线程安全的。

HashMap 去掉了 Hashtable 中的 contains 方法。

10 编译和运行的区别

编译时类型指在声明对象时所采用的类型

运行时类型指为对象赋值时所采用的类型

1.编译就是将java代码交给编译器进行语法检查,如果没有错误就生成.class文件

2.运行就是将字节码文件(.class)交给java虚拟机执行,如果没有逻辑错误,就成功出现结果。

编译期和运行期内存的分配

1.编译期仅仅知道内存分配的位置和大小,不做具体的分配操作

2.运行期确定真正的分配,确定分配的大小以及位置

常见的错误

1.编译错误是常见的语法错误:缺少分号,大小写

2.运行错误是逻辑错误:空指针异常,越界访问,除数为0等

已检查的异常是被编译器在编译时候已经检查过的异常,这些异常需要在try/catch块中处理的异常。

编译时:重载、泛型(类型检测) List arrayList = new ArrayList();

运行时:重写

11 什么是Java反射

Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;

对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。

通过对象调用 getClass() 方法
直接通过 类名.class 的方式
通过 Class 对象的 forName() 静态方法来获取

【Java基础知识】东软面试(一面)的更多相关文章

  1. Java基础知识(面试问题1)

    1.什么是 GC?为什么要有 GC?GC(Garbage Collection)是垃圾收集的意思,负责清除对象并释放内存.Java 提供的 GC 功能可以自动检测对象是否超过作用域从而达到自动回收内存 ...

  2. Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  3. 毕向东—Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  4. 沉淀,再出发:Java基础知识汇总

    沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...

  5. 大话java基础知识一之为什么java的主函数入口必须是public static void

    为什么java的主函数入口必须是public static void main (String[] args); 很多写javaEE好几年的程序员经常会记得java的主函数就是这么写的,但实际上为什么 ...

  6. 【Java面试题系列】:Java基础知识常见面试题汇总 第一篇

    文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言 ​ 参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后,一般都会让先做一份笔试题,然后公司会根据笔试题的回答结果,确定 ...

  7. 黑马毕向东Java基础知识总结

    Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记    侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...

  8. Java基础知识常见面试题汇总第一篇

    [Java面试题系列]:Java基础知识常见面试题汇总 第一篇 文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言 ​ 参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后 ...

  9. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  10. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

随机推荐

  1. spring boot+layui实现增删改查实战

    说明: 最近在做一个后台,希望用一个现成的前端模板,找了一圈发现Layui比较合适.我知道很多人都有这个需求,为了使大家快速上手,我把自己写的最实用的增删改查案例完整的展示出来. 源码地址: http ...

  2. Redhat6更改yum源

    最近虚拟机中安装了redhat6.3企业版,自带的yum用不起来,软件都找不到. 网上搜了一下说是没付钱...,需要改下yum源.操作步骤如下: 1.切换到yum源存放目录 [root@rhel6 ~ ...

  3. win32 - WaitForMultipleObjects的使用

    创建5个线程,并无限期地打印某些内容 #include <Windows.h> #include <stdio.h> DWORD IDs[5]; DWORD WINAPI Th ...

  4. 多线程系列(八) -ReentrantLock基本用法介绍

    一.简介 在之前的线程系列文章中,我们介绍到了使用synchronized关键字可以实现线程同步安全的效果,以及采用wait().notify()和notifyAll()方法,可以实现多个线程之间的通 ...

  5. pikachu sql inject 宽字节注入

    宽字节注入原理 什么是宽字节? 如果一个字符的大小是一个字节的,称为窄字节: 如果一个字符的大小是两个字节的,成为宽字节: 像GB2312.GBK.GB18030.BIG5.Shift_JIS等这些编 ...

  6. 项目实战:Qt+OpenCV激光射击游(识别激光、识别圆)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  7. 擅长使用iter

    def populate_ranks(votes, ranks): names = list(votes.keys()) names.sort(key=votes.get, reverse=True) ...

  8. STM32FATFS文件系统移植

    STM32FATFS文件系统移植 1. FATFS简介 FATFS文件系统是一个用于在微控制器上运行的开源文件系统,支持FAT/FATFS.NTFS.exFAT等主流文件系统,且一直保持更新.在此以F ...

  9. C#的托盘窗体显示与隐藏效果 - 开源研究系列文章

    今天无聊,进行的C#的编码内容仍然在继续.这些天不断地在完善及编写C#的Winform相关的代码,并将其整理形成博文.这次带来的是关于窗体的显示及隐藏效果的代码段.上次有过一个代码,这次当做新代码进行 ...

  10. Java 常用类 String类与其他结构之间的转换-----String 与 char[]之间的转换

    1 /* 2 String 与 char[]之间的转换 3 4 String----> char[]:调用String的toCharArray() 5 char[] ---->String ...