计算机类⾯试题
1.Java⾯向对象特点有哪些,多态具体指什么
特点:继承、多态、封装。
继承:⼦类可以复现⽗类的⽅法
封装:将⽅法或字段放在⼀个类中供接⼝调⽤
多态:⼀个对象具有多个状态,分别为编译多态和运⾏多态。编译多态也是⽅法重载,即同⼀个类中,相同的⽅法有不同的参数类型、顺序或者个数。运⾏多态也是⽅法重写,即⼦类实现了⼀个与⽗类在⽅法声明上完全相同的⼀个⽅法。
2.访问修饰符public,private,protected,以及不写(默认)时的区别?
public对所有类公开,protected对当前包类和⼦类公开。private仅能在当前类中调⽤。默认是dafult,仅能在当前类和同包中调⽤
3.&和&&的区别?
&是按位与,即使符号前边的表达式为false仍然会继续判断后边表达式。⽽&&在前⾯的表达式flase时会直接结束判断。
4.解释内存中的栈(stack)、堆(heap)和⽅法区(method area)的⽤法。
对象保存在堆中,变量保存在栈中
5.⽤最有效率的⽅法计算2乘以8?
将2的⼆进制左移三位即可
6.数组有没有length()⽅法?String有没有length()⽅法?
数组的长度是⼀个字段,所以没有length(),有length属性,String有length()⽅法。
7.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
不对,因为equals⽐较的是对象的哈希码
8.String和StringBuilder、StringBuffer的区别?
String⽆法被修改,StringBuilder、StringBuffer可以被修改。
String和StringBuffer是线程安全的,stringbuff加了同步锁,性能稍差。Stringbuilder是不安全的性能稍好。
9.重载(Overload)和重写(Override)的区别。重载的⽅法能否根据返回类型进⾏区分?
重载是同⼀类中⽅法名相同,但参数的个数、类型或顺序不同。(参数类型不同、参数个数不同或者⼆者都不同)
重写是⼦类复现⽗类的相同⽅法。
重载对返回类型没有要求。
10.描述⼀下JVM加载class⽂件的原理机制?
.java⽂件经编译后变成.class⽂件,再由类加载器加载到JVM中运⾏
类加载器包括根加载器(BootStrap)、扩展加载器(Extension)、系统加载器(System)和⽤户⾃定义类加载器(java.lang.ClassLoader的⼦类)
采⽤双亲委派原理,即优先使⽤系统加载器,再使⽤⽤户⾃定义加载器。
11.抽象类(abstract class)和接⼝(interface)有什么异同?
同:抽象类和接⼝都⽆法被实例化,都可以被继承,都可以包含⽅法声明
异:抽象类可能有构造⽅法和静态⽅法,但接⼝⾥没有⽅法。
12.Java 中会存在内存泄漏吗,请简单描述。
⼀般不会,因为Java有垃圾回收机制。
13.阐述静态变量和实例变量的区别。
静态变量是被static修饰的变量,它属于类,不属于类中的任⼀对象。实例变量必须创建对象后才能通过这个对象使⽤。
14.GC是什么?为什么要有GC?
GC是垃圾回收机制,可以有效的防⽌内存泄漏,有效的利⽤内存,更好的回收或分配内存
15.Java 中的final关键字有哪些⽤法?
修饰类,则该类⽆法被继承。修饰⽅法,则该⽅法⽆法被重写。修饰变量,则该变量赋值后⽆法被修改。mysql面试题acid
16.Error和Exception有什么区别?
error出现后程序会⽴即停⽌运⾏。⽽exception被捕获后程序可以继续运⾏。
<{}⾥有⼀个return语句,那么紧跟在这个try后的finally{}⾥的代码会不会被执⾏,什么时候被执⾏,在return前还是后?
会执⾏,在return之前执⾏。
18.列出⼀些你常见的运⾏时异常?
算数、数组下标越界、空指针、内存溢出、
19.阐述final、finally、finalize的区别。
final修饰符⼀般⽤来修饰⽅法、类或变量
finally⼀般在try。。。catch后构造代码块,且总是能运⾏。
finalize是垃圾回收机制中的⼀个⽅法。
20.List、Set、Map是否继承⾃Collection接⼝?
List、Set是,Map不是。
List是有序的,按照存放顺序有序,可重复
Set是⽆序的、不可重复
Map是储存键值对(key-value)
21.阐述ArrayList、Vector、LinkedList的存储性能和特性。
ArrayList使⽤数组⽅式存储,⽀持随机访问,线程不安全
Vector使⽤数组⽅式存储数据,线程安全,性能较ArrayList差
LinkedList使⽤双向链表实现存储,可以快速在链表中插⼊或删除元素,线程不安全。
ArrayList和LinkedListed可以通过SynchronizedList⽅法转换成线程安全
ArrayList和LinkedListed异:对元素的增删和查的代价不同,数组查询⽅便,⽽链表增删⽅便。
广告联盟广告价格22.List、Map、Set三个接⼝存取元素时,各有什么特点?
List可以有重复元素
Set不能存放重复元素
Map保存键值对。
23.编写多线程程序有⼏种实现⽅式?
实现Runnable接⼝、实现Callable接⼝、继承Thread类、⽤线程池
24.Java中如何实现序列化,有什么意义?
序列化的类需要实现Serializable接⼝。序列化可以将对象转换成字节序列,⽅便存储和运输。
25.Java中有⼏种类型的流?
字节流和字符流。
字节流继承于InputStream、OutputStream,
字符流继承于Reader和Writer
26.在进⾏数据库编程时,连接池有什么作⽤?
连接池事先创建若⼲连接置于连接池中,需要时直接从连接池中获取,结束时归还连接池⽽不必关闭连接,可以提升系统访问数据库的性能,
27.事务的ACID是指什么?ACID也是四个特性
原⼦性(Atomic) 事务中的各项操作,要么全部执⾏,要么都不执⾏
⼀致性(Consistent) 事务结束后系统状态是⼀致的
隔离性(Isolated):并发执⾏的事务彼此⽆法看到对⽅的中间状态
持久性(Durable):事务完成后所做的改动会被持久化,就算执⾏失败,也不会对数据造成影响
28.获得⼀个类的类对象有哪些⽅式?
1.类型.class
2.对象.getClass()
3.Class.forName()
29.如何通过反射创建对象?
1.通过类对象调⽤newInstance()⽅法,例如:wInstance()
2.通过Constructor类的newInstance()⽅法获取
进制转换方法 十六进制转二进制30.简述⼀下⾯向对象的"六原则⼀法则"
单⼀职责原则:⼀类只做它该做的事
开闭原则:软件实体应该对扩展开放,对修改关闭。
依赖倒转原则:⾯向接⼝编程
⾥式替换原则:任何时候都可以⽤⼦类型替换⽗类型
接⼝隔离原则:接⼝要⼩⽽专
合成聚合复⽤原则:优先使⽤聚合或合成关系复⽤代码。
迪⽶特法则:⼀个对象应对其他对象有尽可能少的了解
31.简述⼀下你了解的设计模式。
23种设计模式,包括:Factory Method(⼯⼚⽅法模式),Singleton(单例模式);Adapter(适配器模式),Flyweight(享元模式),Decorator(装饰模式);Proxy(代理模式);Command(命令模式);Observer(观察者模式),Strategy(策略模式)
32.排序算法原理
冒泡:⽐较相邻元素,将⼤的浮起,⼩的沉下,每次都从第⼀对开始⽐较,最后元素使最⼤数
选择:每次从待排元素中选出最⼩(或最⼤)的元素,放在序列的起始位置,再从剩余待排元素继续寻,以此类推。
java程序设计唐大仕pdf插⼊:从第⼆个元素开始将数组中的元素拿出,依次和前⾯已排好的元素相⽐较,如果拿出的元素⽐排好的元素⼩,则交换位置,直到和全部元素⽐较过后为⽌。
归并:将长度为n的输⼊序列分成两个n/2的⼦序列,再对两个⼦序列进⾏归并排序,最后将两个排序好的⼦序列合并成⼀个最终排序序列
快速:在数组中默认选⾸个元素,数组中⼩于等于此数的放在左边,⼤于此数的放在右边,再对数组两边递归调⽤快速排序,重复这个过程。
希尔排序:先将整个待排序的序列分割成若⼲⼦序列并分别进⾏直接插⼊排序,待整个序列中的记录基本有序时,再对全体进⾏依次直接插⼊排序。(步长如何选择
基数排序:先将元素按照低位排序,然后收集,再按照⾼位排序,再收集,依次类推。低位是不是指个位,⾼位⼗位百位千位这样
堆排序:先将数组构建成⼀个⼤顶堆,也就是类似⼆叉树的结构,然后令堆⾸成为该堆的最⼤值,再将堆⾸放到堆的最下层并固定。重复该步骤。
33.深拷贝和浅拷贝区别。
浅拷贝只复制对象的引⽤
深拷贝新建⼀个对象,将待拷贝对象所有属性都赋给此对象
接口类型同步和异步34.数组和链表数据结构描述,各⾃的时间复杂度
数组是连续的,查⽅便,增删不⽅便。链表是不连续的,增删⽅便,查不⽅便。
35.说⼀说你对 java.lang.Object 对象中 hashCode 和 equals ⽅法的理解。在什么场景下需要重新实现这两个⽅法。
equals是⽐较对象的hashCode
如果需要按某种⽅式⽐较对象,就需要重新实现这俩⽅法。
36.JDK 和 JRE 有什么区别?
JDK提供Java的开发和运⾏环境
JRE为java提供运⾏环境
37.synchronized 和 volatile 的区别是什么?
Syn是⼀个⽅法或代码块的修饰符,变成了线程安全。Java编译时会指令重排,volatile是⼀个变量修饰符,保证按代码顺序执⾏
38.简单说说你了解的类加载器。web是什么意思饭圈
根加载器、系统加载器等等
双亲委派模型,系统会先使⽤系统加载,系统加载处理不了再使⽤⾃定义加载
39.在⼀个静态⽅法内调⽤⼀个⾮静态成员为什么是⾮法的?
静态⽅法是类⽅法,可以通过类名直接访问。⾮静态成员是对象的成员,需要创建对象才能调⽤。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论