Java软件开发2020春招面试题记录

1. Hashmap和Hashtable的区别:

  HashMap内部基于哈希表,存储键值对,支持key-value,null-null,null-value,key-null四种模式。其中的方法都没有使用synchronized关键字修饰,hashmap在put时,超过一定容量,会发生扩容,多线程情况下可能发生hash值相同,导致多元素put到同一数组下造成闭环,会在get时死循环,因此是非线程安全的,适用于单线程。HashMap默认创建一个大小为16的entry数组,当HashMap里存的entry个数达到12,就会发生扩容。加载因子为默认的0.75。之后每次扩充,容量变为原来的2倍。HashMap的计算效率高,但是hash冲突却也增加了。

  Hashtable内部基于哈希表,存储键值对,只支持key-value模式,是同步的,hashtable所有的方法都加了标记锁,适用于多线程。被synchronized关键字修饰,因此是线程安全。Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。hashtable运算需要进行除法,比较耗时。

2. Java垃圾回收机制:

  (1)机制建立的基础和目的:
  Java中的垃圾回收都是基于内存进行的。垃圾回收是在内存中存在没有引用的对象或超过作用域的对象时进行。垃圾回收的目的是识别并且丢弃应用不再使用的对象来释放和重用资源。
  (2)如何判断对象是垃圾:
  为了确定哪些对象是垃圾,常见的判断是否存活有两种方法:引用计数法和可达性分析。
  引用计数法为每一个创建的对象分配一个引用计数器,用来存储该对象被引用的个数。每当有一个地方去引用它时候,引用计数器就增加1。当该个数为0,意味着没有人再使用这个对象,可以认为“对象死亡”。
  可达性分析:把引用对象想象成一棵树从树的根结点出发,持续遍历找出所有连接的树枝对象,这些对象则被称为“可达”对象,或称“存活”对象。不能到达的则被可回收对象。
  (3)如何回收:
  标记清理法:利用可达性遍历内存,标记垃圾,再遍历一遍,把所有“垃圾”对象所占的空间直接清空即可。简单方便但容易产生内存碎片。
  标记复制法:利用可达性遍历内存,先将活着的对象整齐的复制到一块空闲区域,然后再将原来的区域的垃圾全部清除。不产生内存碎片但是浪费空间。
 
3. 面向对象的三大基本特征:
  (1)封装
  指一种将抽象函数接口的实现细节部分隐藏起来的方法,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制,加强了安全性。
  (2)继承
  继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。提高了代码的复用性。
  (3)多态
  多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。可以提高可扩充性和可维护性。
 
4. 多线程Thread: 

  同一时间内,CPU只能处理1条线程,只有1条线程在工作(执行),而多线程充分利用资源。

  开启线程的4种方式,继承Thred,实现Runnable接口,实现Callble接口和使用线程池。

  生命周期->新建->就绪->阻塞->运行->死亡 ,阻塞到运行过程是循环的主要看线程。

5. 集合有哪些: 

  (1)List:有序,可重复,包括ArrayList,Vector,LinkedList

  ArrayList:底层数据结构是数组。线程不安全,查询快增删慢,效率高。

  Vector:底层数据结构是数组。线程安全,效率低。

  LinkedList:底层数据结构是链表。线程不安全,查询慢增删快,效率高。

  (2)Set:无序,不可重复,底层数据结构是哈希表,Set下有HashSet,LinkedHashSet,TreeSet

  HashSet:无序,底层数据结构是哈希表

  LinkedHashSet:无序,底层数据结构是哈希表和链表,链表保证有序,哈希表保证元素唯一性

  TreeSet:有序,底层数据结构是红黑树

  (3)Map:以键值对方式存储,底层数据结构是数组+链表,有Hashtable,LinkedHashMap,HashMap,TreeMap

  HashMap:无序,允许空值,效率高

  TreeMap:有序

  HashTable;无序,不允许空值,效率低

6. 线程和进程的区别:

  进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

7. 程序的局部变量存在于栈区。全局变量存放在数据区。动态变量存放在堆区。函数代码放在代码区。

8. Java常见设计模式:

  单例模式:这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

  工厂模式:也就是定义一个抽象工厂,其定义了产品的生产接口,但不负责具体的产品,将生产任务交给不同的派生类工厂。这样不用通过指定类型来创建对象了。

  观察者模式:当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。

  原型模式:实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。

  然后记不住了……

9. 对JVM的了解:

  JVM是Java虚拟机的缩写, Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。是进程级别的,一个JVM实例对应一个Java程序。包括启动、运行、销毁。

  (1)堆。 堆是Java对象的存储区域,任何用new字段分配的Java对象实例和数组,都被分配在堆上。

  (2)方法区。与Java堆一样,是各个线程共享的内存区域它用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据,
  (3)虚拟机栈。虚拟机栈中执行每个方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。
  (4)本地方法栈。与虚拟机栈发挥的作用相似,相比于虚拟机栈为Java方法服务,本地方法栈为虚拟机使用的Native方法服务,执行每个本地方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。
  (5)程序计数器。指示Java虚拟机下一条需要执行的字节码指令。
  以上五个区域是Java虚拟机内存划分情况,其中方法区和堆被JVM中多个线程共享,比如类的静态常量就被存放在方法区,供类对象之间共享,虚拟机栈,本地方法栈,pc寄存器是每个线程独立拥有的,不会与其他线程共享。所以Java在通过new创建一个类对象实例的时候,一方面会在虚拟机栈中创建一个该对象的引用,另一方面会在堆上创建类对象的实例,然后将对象引用指向该对象的实例。对象引用存放在每一个方法对应的栈帧中。

10. 二叉平衡树的定义:

  所有节点的左右子树的高度差小于1的二叉树。

 11. String类能否被继承:

  不能,因为是final修饰string,final修饰的类不能被继承。

12. Spring三大核心思想:

  控制反转(IOC):传统的方式是组件向容器发送请求查找资源。而IOC则是容器将资源推送给组件

  依赖注入(DI):组件以预先定义好的setter和getter方式接受来自容器的注入

  面向切片编程(AOP):开发项目的时候基本都要去连接数据库操作数据等,但是都会涉及到事务的提交,这时我们就用到了面向切面编程,我们在业务层只写自己的业务逻辑,提交事务这一块统一的动作我们就浓缩到了一块儿统一处理,形象一点比喻就是我们做什么事之前都以一个准备动作或结束动作的时候就把它统一起来,只关注我们要完成的事,这些准备动作统一完成!

13. try catch finally的执行顺序:

  一般而言,先执行try,如果没有异常就执行finally,有异常就先执行catch,再执行finally

14. http的get和post的作用和区别:

  在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。

  GET - 从指定的资源请求数据,并将其作为相应返回给客户端。GET只有一个流,参数附在url后,数量严格限制。GET调动在url中显示传送给servlet的数据,例如用户名和密码,因此不安全。服务器随即接受GET的数据,不知道是否发完。

  POST - 向指定的资源提交要被处理的数据。POST的参数是通过另外的流传递,不通过url,可以很多。好处是可以隐藏传递给服务器的任何数据,适合发送大量数据。服务器先接受POST的长度后接收数据。

15. 软件开发流程:

  需求分析,概要设计,详细设计,编码,测试,交付。

16.Java中子类能否继承和修改父类的static变量和方法:

  通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法。也就是说,用static修饰的变量和方法在类加载的时候,只分配一块存储空间,所有此类的对象都可以操控此块存储空间;

  子类不可以继承父类的static方法,因为这是属于类本身的,但是能够访问。

  子类和父类中同名的static变量和方法都是相互独立的,并不存在任何的修改的关系。

17. 接口类和抽象类的区别:

  (1)抽象类(abstract):

  抽象类既可以定义抽象方法,也可以实现具体方法

  一个类只能继承一个抽象类

  (2)接口(interface):

  接口只能定义抽象方法

  一个类可以实现多个接口

18. 数据库中索引的优点和缺点:

  优点:查找效率高,通过创建唯一性索引,可以保证表中每一行数据的唯一性,加速表的连接。

  缺点:创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加,占用物理空间。会降低插入、删除、更新表的速度。

19. Servlet的生命周期:

  创建对象,实例化

  分配资源,init() 初始化过程

  调用,容器调用servlet对象的service方法来处理请求。请求用doGet和doPost

  销毁,容器在删除servlet对象之前,会先调用该对象的destroy方法。

20. SpringMVC如何设置重定向,转发和刷新:

  重定向:redirect,转发:forward,刷新:refresh

21. 数据库三个范式的作用

  1NF:元素不可再分割

  2NF:消除非主属性部份依赖

  3NF:消除非主属性传递依赖

  BCNF:消除主属性的传递依赖

22. 非关系型数据库和关系型数据库的优缺点

  

23. 重载和重写的相同与区别:

  二者都体现了多态性。重载发生在一个类中,同名的方法不用的参数。重写发生在子类与父类之间,子类与父类有相同的参数列表。

24.equals和==的区别:

  基本类型比较只能用==不能用equals。如果是基本类型的包装类型那么用equals。

  ==比较的是两个对象的内存地址是否相同,也就是这两个对象是不是同一个东西,是不是指向同一个内存空间。

  equals对自字符串内容进行比较,比较的是两者的值是否相同

25. 数据结构的逻辑结构和物理结构:

  逻辑结构:集合,线性结构,树,图

  物理结构:顺序存储结构、链式存储结构、索引结构、散列结构。

26.Java中常见的类型字节数

  byte 1字节

  short 2字节

  int 4字节

  char 2字节

  long 8字节

  float 4字节

  double 8字节

27. double和long如何相互转换?

long a =xxx
double b = (double) a

28. 左连接和右连接的区别

  左表tb1右表tb2

  

  左连接where只影响右表,左连接后的检索结果是显示tbl1的所有数据和tbl2中满足where 条件的数据。简言之 Left Join影响到的是右边的表。

  右连接where只影响左表,检索结果是tbl2的所有数据和tbl1中满足where 条件的数据。简言之 Right Join影响到的是左边的表。

29. Jsp页面常用控件:

  <input type="submit" value="返回" onclick="javascript :history.back(-1);"> 返回上一页

  <input type="button" onclick="window.location='info/register.jsp'" value="快速注册"> 注册

  function to(){ window.location.href="index.jsp"; } Jsp页面中打开另一个Jsp

  <button onclick="javascript:document.body.innerHTML+='<input type=text><br>';">点我生成一个文本框</button> 点击按钮生成一个文本框

30.对MVC框架的理解:

  Model:处理业务数据和业务逻辑的部分,将同时被CONTROLLER和VIEW访问,被CONTROLLER用来传输数据给到VIEW层

  View:主要都是一些ASPX页面文件,他们不包括后台代码,将一个模型中包含的某些方面的数据展现出来,而隐藏另外一些数据。视图向模型请求,以获取需要表现的数据。它也可以通过发送相应的命令,来修改模型中的数据。

  Controller:是整个MVC架构的核心, 控制器充当用户和应用程序之间的连接

31.查出student表中各个班级的人数,并按人数从多到少排列

SELECT classname,COUNT(classname) FROM student GROUP BY classname ORDER BY COUNT(classname) DESC

32.Group by和Order by的作用

  Group by是按照条件分组

  Order by是排序

33.简述三次握手和四次挥手

  三次握手:

  

   四次挥手:

34.TCP和UDP在哪一层,有什么特点:

  都在传输层。

  TCP是面向连接的,点对点的,可靠交付,全双工通信,面向字节流。

  UDP是无连接的,尽最大努力交付,面向报文,没有拥塞控制,首部开销小。

35.常见查找算法的复杂度:

 36. 层次模型能否表示多对多?

  层次模型采用树型结构表示数据与数据间的联系。在层次模型中,每一个节点表示记录类型(实体),记录之间的联系用节点之间的连线表示,并且根节点以外的其他节点有且仅有一个双亲节点。层次模型不能直接表示多对多联系

37. 数据库集合运算符和关系运算符分别:

  集合运算符:并,差,交,笛卡尔积

  关系运算符:选择,投影,连接,除

38.左外连接和右外连接

  左外连接:把左边关系R中要舍弃的元组保留

  右外连接:把右边关系S中要舍弃的元组保留

39. 数据库的查询优化方法

  代数优化:关系代数表达式的优化。关系代数表达式等价变换,查询树的启发式优化。

  物理优化:存取路径和底层算法选择。基于规则的启发式,基于代价估算,两者结合的优化。

40. SSL的作用

  SSL是为我们网络通信提供安全及数据完整性的一种安全协议,它可以在传输层对网络连接进行加密,使我们的访问更安全可靠。

41. ArrayList

  ArrayList的底层数据结构就是一个数组,数组元素的类型为Object类型,对ArrayList的所有操作底层都是基于数组的。

42. 数据库恢复技术

  使用冗余技术:

  数据转储

  登记日志文件

43. 依赖注入的几种方式(DI):

  接口注入

  set注入

  构造方法注入

44. 死锁地四大条件

  互斥条件

  不剥夺条件

  请求和保持

  循环等待

45. LinkedList和ArrayList的区别

  ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构。

  当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。

  当对数据进行增加和删除的操作(add和remove操作)时,LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。

46. Synchronized 和 Lock 的区别

  Lock 是一个接口,而 synchronized 是 Java 中的关键字

  Lock需要手动上锁解锁,synchronized不需要。

  Synchronized只能使用在代码块和方法中。

  通过lock可以提高多个线程进行读操作的效果

47. switch case中使用字符串会报错吗

  java sdk1.7之后不会报错

48.数据库定义id的话使用的类型应该选什么

  varchar适用于数据量千万级别的

  int,bigint适用于数据量少的,查询快

49.char类型能否存储中文

  可以,不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。

50. C++和Java中char的字节区别

  C++中占1个字节

  Java占两个字节

51.IP协议在那一层,负责什么功能

  IP协议在网络层,是网络之间信息传递的协议,将IP信息从源设备传送到目的设备。

52.数据库中有几种连接

  左连接,右连接,全连接,内连接

53.软件危机是什么?

  软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。

 

54.Java中文件操作相关函数举例

  createNewFile()

  mkdir()

  delete()

55.数据库死锁原因和常用解法,预防死锁地方法

  系统资源不足,请求顺序不合适,资源分配不当。

  一次性加锁完毕,采取按顺序加锁方法。

  预防:一次封锁法,顺序封锁法

56.线程同步和异步的区别

  发出一个功能请求,没有得到结果之前,该调用不返回后续操作。

  该调用没有得到结果之前就能够进行后续操作。

57. Java中Map的种类

  Hashmap,Hashtable,Linkedhashmap,Treemap

58. 数据库事务是什么意思,有哪些属性,常见问题

  (1)单个逻辑单元执行的一些列操作,要么完全执行要么不执行。

  (2)属性:

  原子性,个事务要么全部执行,要么不执行

  一致性,事务在系统完整性中实施一致性,这通过保证系统的任何事务最后都处于有效状态来实现。如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。

  隔离性,在隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。使得在同一时间仅有一个请求用于同一数据。

  持久性,一旦事务执行成功,在系统中产生的所有变化将是永久的。

  (3)问题:不可重复读,读脏数据,幻读

59. 数据库分页关键字,数据库分组关键字

  分页:limit

  分组:group by

60. session和cookie的区别

  cookie通过客户端记录信息确定用户身份

  session通过服务器端记录信息确定用户身份  

61. Java用什么字符集编码

  unicode

62. 数据库中把时间与字符串转换

str_to_date(date,'%Y-%m-%d') 

date_format(date,'%Y-%m-%d')

63. 索引的种类

  普通索引:加速查询

  唯一索引:要求所有记录都唯一

  主键索引:特殊的唯一索引,一个表只能有一个主键,不能为空

  组合索引:多个索引组合,提升搜索性能

64. 二叉树的最小深度搜索用什么算法,使用什么数据结构

  广度优先算法,使用队列

65. 常见的线程池的种类

  newCachedThreadPool:创建一个可缓存的线程池,长度超过则可回收空线程

  newFixedThreadPool:创建指定工作数量的线程池,若超过最大则进入阻塞队列

  newSingleThreadExecutor:创建一个单一化的Executor,保证所有线程按指定顺序运行

  newScheduleThreadPool:创建一个定长线程,支持周期化运行

66. CPU中有EU,BIU,ALU

67. 讲一下Java中的数据类型

  包括整数型,浮点型,字符型,布尔型

68. JAVA中有哪些常见的异常,一般如何处理异常

  运行时异常:RuntimeException的类与子类

    空指针异常:调用对象为null

    数组下标越界:数组索引越界

    算数异常:除以零

    类型转换异常

  非运行时异常:Exception的类与子类

    IO异常

    SQL异常

  处理方法:try,catch,finally

69. abstract和implement的区别

  抽象类:

    被子类继承

    能声明方法也能实现方法

    定义普通变量

    一个类只能继承一个抽象类

  接口:

    被类实现

    只能做方法声明

    只能定义公共静态常量

    一个类可以实现多个接口

70. 数据库是怎么隔离事物的

  当插入数据就锁定表,称为表锁。基于全表扫描,表锁加在整张表上。

  当修改数据就锁定行,成为行锁。基于索引加载的,行锁加载索引上。

  用锁来保证数据库完整性和一致性。

71. 为什么TCP/IP连接的时候是三次握手,关闭的时候是四次

  因为客户端发送给服务器端FIN保温只是表示它不再发送数据包了,但还能接收数据。服务器端收到FIN时,可能不会立即关闭socket,只能先回复一个ACK报文表示收到了。当不在发送数据时还要再次发送FIN给客户端。

72. elasticsearch的用处

  数据较多时,需要采用模糊查询时,需要构建索引,否则全表扫描查询效率低。用elasticsearch构建全文索引,将经常查询的字段添加进索引,提高查询速率。

73. 指针和引用的区别

  1、指针占内存空间,引用不占内存空间
  2、指针可以为空,但是引用不能为空
  3、指针可以不初始化,但是引用必须初始化
  4、指针可以有多级,但是引用只能是一级(int **p合法但是int &&a是不合法的)
  5、指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了,从一而终。
  6、指针是一种变量,而引用只是引用。

74. 说说你对spring的理解

  spring是一个轻量级线程

  提供MVC框架

  实现控制反转和面向切片编程

  提供了对各种框架的整合

75. 各种list的区别

  可以重复,通过索引取出加入数据,顺序与插入顺序一致,可以含有null元素

  ArrayList:底层数据结构是数组结构array,查询速度快,增删改慢,因为是一种类似数组的形式进行存储,因此它的随机访问速度极快;

  LinkedList:底层使用链表结构,增删速度快,查询稍慢;

  Vector:Vector与ArrayList的区别就是Vector是线程安全的集合,在需要线程安全而且对效率要求比较低的情况下,使用Vector。

76. string,stringbuffer,stringbuilder的区别

  string是不可变字符序列,当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。

  StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类,但StringBuilder 的方法不是线程安全的。

77.介绍一下堆和栈的区别

  1.栈内存首先是一片内存区域,存储的都是局部变量而堆内存存储的是数组和对象

  2.栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短

  3.栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收

78. 指针和引用的区别

  指针是一个实体,引用是一个别名

  引用只能初始化的时候定义,之后就不能改了。指针可以改变。

  引用不能为空,指针可以。

  程序为指针分配内存区域,引用不用分配内存区域。

79. Implement的访问权限:public

80. 多线程同步有哪些方法

  Synchronized 关键字,Lock 锁实现,分布式锁等。

81.一个参数既可以是const还可以是volatile吗?解释为什么

  是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。

82. 如何获取一个div里所有input的值

  $("#textbox input[type='text']").each(function(){    alert($(this).val())  });

83. 构造函数的主要特点

  构造函数的命名必须和类名完全相同,可以重载,不能指定返回类型,即使是void也不行

  构造函数不能被直接调用

  当定义一个类的时候,通常情况下都会显示该类的构造函数

  当一个类没有定义任何构造函数,编译器会为其自动生成一个默认的无参的构造函数

84.Java的命名规范

  项目名全部小写。包名全部小写。类名首字母大写。变量名、方法名首字母小写。常量名全部大写。

  所有命名规则必须遵循以下规则:

  1)、名称只能由字母、数字、下划线、$符号组成

  2)、不能以数字开头

  3)、名称不能使用JAVA中的关键字

  4)、坚决不允许出现中文及拼音命名

85. http与https的区别

  http是80端口,无状态连接

  https是443端口,可加密传输

86. 主键和外键有什么用

  主键:唯一标识一条记录,不能重复,不能为空,用来确保数据完整性,主键只能有一个

  外键:表的外键是另外一个表的主键,外键可以重复,用来和其他表建立联系,一个表可以有多个外键。

87. 聚集索引和非聚集索引的区别?

  聚集索引:数据行的物理顺序和列值的逻辑顺序相同。只能有一个,在索引页里直接存放数据

  非聚集索引:逻辑顺序与物理顺序不同。可以有多个。而非聚集索引在索引页里存放的是索引,这些索引指向专门的数据页的数据。

88. Java的五大基本原则

  单一职责原则(Single-Resposibility Principle):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。
  开放封闭原则(Open-Closed principle):软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。
  Liskov替换原则(Liskov-Substituion Principle):子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。
  依赖倒置原则(Dependecy-Inversion Principle):依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。
  接口隔离原则(Interface-Segregation Principle):使用多个小的专门的接口,而不要使用一个大的总接口

89.delete和drop和truncate的区别

  DROP:删除内容和定义,释放空间。简单来说就是把整个表去掉.以后要新增数据是不可能的,除非新增一个表

  DELETE:语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。

  TRUNCATE:则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。

90. Linux下退出VIM的几种操作

  :w 保存文件但不退出vi
  :w file 将修改另外保存到file中,不退出vi
  :w! 强制保存,不推出vi
  :wq 保存文件并退出vi
  :wq! 强制保存文件,并退出vi
  :q 不保存文件,退出vi
  :q! 不保存文件,强制退出vi
  :e! 放弃所有修改,从上次保存文件开始再编辑

91. 如何确保线程同步

  (1)用synchronized修饰  

  要想执行这个方法或者代码块必须获得其内置锁,运行时会加上内置锁,当运行结束时,内置锁会打开。synchronized关键字锁住的是代码块,但是容易造成资源的浪费,是一种重量锁

  (2)wait与notify

  wait(),使一个线程处于等待状态,并释放所持对象的锁,与sleep不同,sleep不会释放对象锁。

  notify(),唤醒一个处于阻塞状态的线程,进入就绪态,并加锁,只能唤醒一个线程,但不能确切知道唤醒哪一个,由JVM决定,不是按优先级。其实不是对对象锁的唤醒,是告诉调用wait方法的线程可以去竞争对象锁了。wait和notify必须在synchronized代码块中调用。

  (3)volatile关键字

  volatile是一种轻量锁,锁住的是变量。

  (4)使用Lock,包含比synchronized更多的加锁功能

  Lock是接口,是基于javaJDK层面的,通过这个接口可以实现同步访问

  (5)使用ThreadLocal管理变量

  每一个使用该变量的线程都获得该变量的副本,各个副本之间相互独立,每个线程都可以随意修改变量副本,而不会对其他线程造成影响

92. 数据库去除重复的数据的方式:

  防止重复数据:设置为PRIMARY KEY或者 UNIQUE关键字

  过滤重复数据:Dinstinct

  删除重复数据:delete from test where id not in (select * from ((select min(id) from test group by(name)) as tmptable));删除重复,留下id最小的数据

93. Java中一个字符串中改变某个字符用什么方法

  使用setCharAt(位置,替换的新字符)函数

94. Java的特性

  简单

  面向对象

  可移植性

  鲁棒性

  安全性  

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

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

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

96. Java支持多继承吗

  不支持,Java中每个类都只能继承一个类,但可以实现多个接口  

97. 敏捷开发的含义

  在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

98. 瀑布模型的含义

  瀑布模型(Waterfall Model) 是一个项目开发架构,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来。

  

  

原文地址:https://www.cnblogs.com/ak918xp/p/12655860.html