栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

面试题集(熊老师整理版)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

面试题集(熊老师整理版)

目录

                        

一、java基础

1.基本数据类型

2.jdk,jre,jvm,之间的关系

3.jvm的调优

4.gc的算法

5.类中元素储存位置

6. do-while while的区别

7.常用的循环有哪一些

8.break,continue,return的区别

9、switch() case中的表达式能是什么类型的

10.什么是递归:

11.String类的常用方法

12.String为什么是不可变对象

13. String为什么是final修饰的:

14. String和StringBulider的区别

15. StringBulider和StringBuffer,ArrayList和Vector,HashMap和Hashtable的区别

16.数组和集合的特点

17.数组和集合的转化

18. ArrayList和linkedList的底层实现和区别

 19.HashMap的底层

20.List和set的区别

21.怎么把集合变成线程安全的

22.Collections和Collection的区别,

23.Iterator(迭代)和ListIterator的区别

24.什么是面向对象,什么是类,什么是对象

25.什么是构造器?有什么作用?

26.重载和重写的区别

27.访问控制修饰符

28.final、finally、finalize 有什么区别?

29.== 和equals的区别

30.Object类中常用的方法

31.接口和抽象类有什么区别

32.super和this的区别

33.静态方法和实例方法的区别

34.什么是序列化,有什么作用

35.怎么样实现序列化

36.流是什么,常用的流有哪一些,file中的常用方法

37.file的常用方法:

37.线程的生命周期

 38.线程的创建方式

39.什么是同步,异步

40.同步的实现方式

41.Lock锁和synchronized的区别

42.什么是死锁,怎样避免死锁

43.wait和sleep的区别

44.为什么要用异常,异常的介绍,throw和throws的区别

45.线程和进程的区别?

46.notify()和 notifyAll()有什么区别?

47.线程的 run() 和 start() 有什么区别?

48.synchronized 和 volatile 的区别是什么?

49.什么是反射?

50. 通过反射怎么获取类的实例

51.冒泡排序

52.设计模式:单例,工厂模式,代理模式,模板模式

二、数据库部分

11.有哪些锁                          

12 怎样避免死锁

12.索引分类

普通索引: 最基本的索引,没有任何限制

13.mysql的引擎(8个,下面介绍三个)

三、jdbc部分

四、web部分

   五、spring部分

简单的参数传递

对象的方式传递

RestFul风格

 六、Springboot部分

七、Mybaits的知识

八、Nginx的面试题

八、Springcloud部分

Redis 是什么?都有哪些使用场景?

Redis 有哪些功能?

Redis 和 memcache 有什么区别?

Redis 为什么是单线程的?

什么是缓存穿透?怎么解决?

Redis 支持的数据类型有哪些?

Redis 支持的 Java 客户端都有哪些?

jedis 和 Redisson 有哪些区别?

怎么保证缓存和数据库数据的一致性?

Redis 持久化有几种方式?

Redis 怎么实现分布式锁?

Redis 分布式锁有什么缺陷?

Redis 如何做内存优化?

Redis 淘汰策略有哪些?

Redis 常见的性能问题有哪些?该如何解决?


                

一、java基础

1.基本数据类型

整数类型:short byte(-128~127) int long

浮点类型:float,double

布尔类型:boolean

字符类型:char(0-65535)

2.jdk,jre,jvm,之间的关系

JDK

JDK,全称Java Development Kit,是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的Java应用程序。JDK是整个Java开发的核心。

JRE

JRE,全称Java Runtime Environment,是指Java的运行环境,是可以在其上运行、测试和传输应用程序的Java平台。

JVM

JVM,全称Java Virtual Machine(Java虚拟机),是一种用于计算设备的规范,它是一个虚构出来的计算机,引入JVM后,Java语言在不同平台上运行时不需要重新编译。JVM是Java跨平台的核心

3.jvm的调优

Jvm优化: 

(1)代码层面

(2)可以分带收集算法,按新生代和老年代进行垃圾回收,

(3)运用垃圾回收器回收

JMM调优主要就是调整下面两个指标

停顿时间:垃圾收集器做垃圾回收中断应用执行的时间。-XX:MaxGCPauseMiIlis

吞吐量:垃圾收集的时闻和总时间的占比: 1(1+n1.吞吐量为1-18[1#n)。-XXLGCTimeRatlo

Jvm调优的步骤:

1打印GC日志

-XX:+PrintccDetai1s -xX:+PrintGCTimestamps -xX:+PrintccDateStamps -xloggc:./gc.1og

2 分析日志得到关键性指标

3 分析gc原因 调优jvm参数

4.gc的算法
  1. 标记-清理

           未标记的对象,直接清理释放内存

             速度较快

           产生碎片,效率降低

  1. 标记-整理

          效率不高

没有碎片

  1. 标记-复制

           效率高

             占用两倍内存空间

5.类中元素储存位置

堆:存放的new出来的对象

栈: 存放的是方法中的局部变量和引用变量

方法区:放了所加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量

本地方法栈:保存native方法进入区域的地址。

寄存器:每个线程启动的时候,都会创建一个PC(Program Counter,程序计数器)寄存器。PC寄存器里保存有当前正在执行的JVM指令的地址。 每一个线程都有它自己的PC寄存器,也是该线程启动时创建的。保存下一条将要执行的指令地址的寄存器是 :PC寄存器。PC寄存器的内容总是指向下一条将被执行指令的地址,这里的地址可以是一个本地指针,也可以是在方法区中相对应

6. do-while while的区别

while 先判断再循环,有可能一次都不执行,do-while 先执行再判断最少执行

7.常用的循环有哪一些

while do-while for

8.break,continue,return的区别

break 是结束整个循环,continue结束当前循环,继续下一次循环,return 结束整个方法

9、switch() case中的表达式能是什么类型的

  byte short int char Strin

10.什么是递归:

  方法自己调用自己

11.String类的常用方法

 charAt(),获取字符串的莫一个字符       toUpperCase()把字符串转大写  toLowerCase()字符串转小写,equals:比较两个字符串是否相等,split切分字符串

12.String为什么是不可变对象

String类有一个char []value 数组的属性 前面加了final关键字,字符串本身就是由字符数组组成所以说String是不可变对象

13. String为什么是final修饰的:

java中所有自己定义的类都是final的,是为了防止程序员修改源代码,保证代码的安全性,因为fianl修饰的类不能继承

14. String和StringBulider的区别

  String修饰的对象是不能改变的对象,StringBuilder修饰的对象的是可变对象,在对字符串经常修改的情况用StringBuilder

15. StringBulider和StringBuffer,ArrayList和Vector,HashMap和Hashtable的区别

StringBuilder是非线程安全的,效率高,StringBuffer是线程安全的效率低

ArrayList:是线程非安全的,效率高,Vector是线程安全的效率低,ArrayList:每次扩容为之前的1.5倍,Vector每次扩容为之前的2倍

HashMap:是非线程安全的,效率高,key和value可以为空,HashMap实现了Map接口,,HashMap默认的容量大小是16;每次扩容“原始容量的两倍”。

Hashtable是线程安全的效率低,key和value不可以为空,Hashtable继承了Dictionary 类,Hashtable默认的容量是11;增加容量时,每次将容量变为“原始容量2倍 + 1

16.数组和集合的特点

  数组的类型是一样的,长度不能改变,集合是可以自动扩容

17.数组和集合的转化

数组转集合

String [] arr={"a","b"};

Arrays.asList(arr);//数组转换为集合

ArrayList arr1=new

ArrayList();

arr1.toArray()//集合转数组

18. ArrayList和linkedList的底层实现和区别

 ArrayList的底层是数组,是线性表,查询快,删除,添加数据慢,因为需要移动数据,默认容量10,每次扩容1.5倍,元素有序可以重复

linkedList的底层是链表,删除添加数据快,添加和删除数据的时候只需要移动指针就行,查询慢

 19.HashMap的底层

HashMap的底层:底层是数组加链表,以key和value形式存在,key不能重复,value可以重复,默认容量16,加载因子是0.75,怎么存放数据,是先对key进行hash算法,得到一个值,这个值还要和集合的长度取余,的到一个0-15的一个值,这个值就就是数组的下标,先判断这个下标对应的数组的内容是否有值如果没有值就直接把数据放进去,如果有值就对key进行equals比较,如果equals为true就直接覆盖,如果不相等就以链表的方式链在后面,当链表中的数据为8的时候形成红黑树,链表的长度为6的时候又会恢复链表

20.List和set的区别

  List:数据可以重复有序,set数据不能重复无序

21.怎么把集合变成线程安全的

  可以用Vector换ArrayList,可用用HahMap换成Hashtable,还可以加锁,用集合中的方法可以

实现。 Collections.synchronizedList() Collections.synchronizedMap()

22.Collections和Collection的区别,

Collections是一个工具类,Collection是一个接口

23.Iterator(迭代)和ListIterator的区别

1.Iterator在使用过程中,不能对集合元素进行添加操作,否则会抛出异常。

2.使用范围不同;Iterator可以在所有集合中使用,而ListIterator只能在List类型与子类型

3.listIterator有add方法,可以向集合中添加元素,而iterator不能。

4.listiterator和iterator都有hasnext和next方法可以顺序遍历元素, 但是listiterator有hasprevious和previous方法,可以逆向遍历元素

5.listiterator可以定位当前的索引位置 nextIndex和previousIndex可以实现,iterator没有此功能

6.listiterator可以实现对对象的修改set()方法可以实现,iterator仅可以遍历,不能修改。

24.什么是面向对象,什么是类,什么是对象

     是设计思想,把我们的思想用java代码描述出来

     什么是类:同类事件具有相同特点和行为的集合

      对象:具有各自行为和特点的个体

25.什么是构造器?有什么作用?

产生对象的,方法名和类名一样,没有返回值

26.重载和重写的区别

重载:在同一个类中,方法名一样,参数列表不一样

重写:  在自父类中,方法名一样,参数列表一样,返回类型一样,修饰符大于等于父类型,异常小于等于父类型抛出的异常

27.访问控制修饰符

  private :只在本类中可以见

default :本类和同包类可见,

protected :本类,同包类,不同包的子类可见

public: 所有的类可见

28.final、finally、finalize 有什么区别?

Final:表示最终的,可以修饰方法,可类,属性

修饰的类不能被继承,修饰的方法不能重写,修饰的变量的值不可以改变

finally:是异常里面的关键字,它里面的代码不管有么有异常都要执行

finalize: 是 Object 类的一个方法,在垃圾收集器执行的时候会调用的次方法

29.== 和equals的区别

 ==比的是地址,equals比的是内容,在自定义内中equals默认是按==比较,需要按内容比较需要重新equals方法自己定义比较规则

30.Object类中常用的方法

   equals() hashCode() finalize() wait() clone() toString()notify();notifyAll();

31.接口和抽象类有什么区别

  接口的关键字是interface,接口中的方法都是抽象方法,接口中的变量都是常量,接口是用来实现的,一个类可以实现多个接口,接口可以继承多个接口

 抽象类的关键字是abstract,,抽象类可以有具体的方法和抽象方法,有抽象方法的类一定是抽象类,抽象类中不一定有抽象方法,抽象类中可以有构造器,抽象类是用来继承的一个类只能继承一个抽象类

32.super和this的区别

   super表示父类

   This表示当前类

33.静态方法和实例方法的区别

 静态方法前面加了static,静态方法只能调用静态方法,不能直接调用实例方法,实例方法可以直接调用静态方法和实例方法

34.什么是序列化,有什么作用

 序列化就是将对象流化,转换为二进制,作用就是方便在网络上传输和存储数据

35.怎么样实现序列化

 对象实现一个Serializable 接口,然后添加一个serialVersionUID号,通过对象流实现对象的序列化和反序列化,序列化就是讲对象流化为二进制,反序列化就是将流化的二进制转为对象

36.流是什么,常用的流有哪一些,file中的常用方法

 是相当于管道,管道里面流的数据就是流,常用的流有哪一些,字节流和字符流(普通的字符流,缓存流),

37.file的常用方法:

isDirectory() 是否为文件夹

isFile() 是否为文件

getPath() 得到file的路径

getName() 得到最后一层的名字

getParent() 得到去掉最后一层的路径

getParentFile() 得到父类路径的新文件

renameTo() 改名

mkdir() 创建新文件夹,只能创建一层

mkdirs() 创建新文件夹,可以多层

createNewFile() 创建新文件,只能一层

exists() 路径是否存在

delete() 删除文件或者目录(为空的目录)

list() 返回该路径下文件或者文件夹的名字数组

listFiles() 返回该路径下文件或者文件夹组成的File数组

37.线程的生命周期

 生命周期:创建,可运行,运行,堵塞,死亡

 38.线程的创建方式

 线程的创建方式:继承Thread类,实现Runable接口,线程池,实现Callable接口

39.什么是同步,异步

线程的同步:需要排队线程的异步:  不需要排队

40.同步的实现方式

同步的实现方式:加(synchronized)锁,锁可以加到方法上面和代码块上面 ,lock锁

41.Lock锁和synchronized的区别

1.首先synchronized是java内置关键字,Lock是个java接口;

2.synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;

3.synchronized会自动释放锁Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;

4.Lock锁适合大量同步的代码的同步问题,不能修饰方法,synchronized锁适合代码少量的同步问题。可以修饰方法

42.什么是死锁,怎样避免死锁

什么是死锁:两个或两个以上的线程或进程在执行过程中,因互相争夺资

源而造成的一种互相等待的现象,若无外力作用将一直持续下去,

这种现象称为死锁。

怎么避免死锁:加锁顺序(线程按照一定的顺序加锁)

加锁时限(线程尝试获取锁的时候加上一定的时限,超过时限则放弃对该锁的请求,并释放自己占有的锁)

死锁检测

43.wait和sleep的区别

wait可以指定时间也可以不指定。

sleep必须指定时间。

wait是Object类的方法,sleep是Thread的方法

wait:释放锁,sleep:不释放锁。

sleep会自动唤醒,wait需要notify() 或者notify all() 唤醒

44.为什么要用异常,异常的介绍,throw和throws的区别

   为什么要使用异常:如果有运行异常而不处理异常程序不会往下运行,会打断程序

   异常的处理:有throws和try-catch两种处理方式

   异常的分类: 异常有运行时异常和非运行时异常。

   运行时异常有:常见的运行时异常

IllegalArgumentException:非法参数异常

NullPointerException :空指针异常

ArrayIndexOutOfBoundsException :数组越界异常

ClassCastException: 类型转换异常

NumberFormatException :数字格式转换异常

非运行时异常:常见的是IO异常我SQL异常,必须要处理不然会报错

Throw和Throws的区别:throw抛出一个异常,throws可以抛出多个异常  throw一般和throws或者try-catch一起使用

45.线程和进程的区别?

      进程就是一个程序比如在电脑里面登陆qq,qq就是一个进程,登陆qq后可以聊天可以发qq邮件,可以玩qq游戏,这个就可以认为是线程,一个进程里面可以有多个线程

46.notify()和 notifyAll()有什么区别?

Notify 唤醒的是一个线程,notifyAll可以唤醒多个线程

47.线程的 run() 和 start() 有什么区别?

start()是启动线程让线程处于可运行状态,run()方法用于执行线程的运行时代码

48.synchronized 和 volatile 的区别是什么?

1volatile 是变量修饰符;synchronized 是修饰方法、代码段

2volatile 仅能实现变量的修改可见性可以防止指令重排,不能保证原子性,synchronized 则可以保证变量的修改可见性和原子性。

3而volatile 不会造成线程的阻塞;synchronized 可能会造成线程的阻塞。

49.什么是反射?

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

对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。

50. 通过反射怎么获取类的实例

1 Class.forName(“包名.类名”);

2类名.class

3对象.getClass();

51.冒泡排序

  冒泡排序(重点),选择排序,插入排序,快速排序

  冒泡排序:相邻的两个数比较每一次找出一个最大或者是最小的数

for(int i=0;i

 for(int j=0;j

   if(arr[j]>arr[j+1]){//相邻的两个数进行比较

   int temp=arr[j]; //交换

arr[j]=arr[j+1];

arr[j+1]=temp;

}

}

}

52.设计模式:单例,工厂模式,代理模式,模板模式

单例模式:只会产生一个对象,饿汉模式和懒汉模式

饿汉模式:static SingleDemo singleDemo=new SingleDemo();//饿汉模式

工场模式:工厂模式是为了解耦:把对象的创建和使用的过程分开,用户不需要知道对象怎么产生的细节,只需要获取对象就可以了

代理模式:一个类代表另一个类的功能,为其他对象提供一种代理以控制对这个对象的访问。

主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。

何时使用:想在访问一个类时做一些控制。

应用实例: 1、Windows 里面的快捷方式。  

二、数据库部分

1.什么是ddl,dml语句 他们有什么特点,数据库中的内连接和外连接,以及左外和右  外连接的区别

ddl语句:数据库定义语言,事务自动提交,

有create,drop,alter,truncate 语句

dml语句:数据库操作语言,事务需要手动提交,

有 update,delete,insert

内连接:两个表全部匹配的上的数据才会在结果集中出现

外连接:分左外连接和右外连接,

左外连接:左边表的数据全部出现在结果集中右边匹配不上的显示null

右外连接:右边表的数据全部出现在结果集中左边匹配不上的显示null

2 什么是事物,他的特点有哪一些

 什么是事务: 事务是保证数据的完整性要不一起成功要不一起失败,事务也就是会话中的一系列ddl和dml语句的操作(连接上数据库的用户就是一个会话)

事务的特点:原子性,一致性,持久行,隔离性

事务的隔离级别:read-uncommitted,(读未提交)

read-committed(读已提交)(oracle的默认隔离级别)

repeatable-read(重复读)(mysql的默认隔离级别)

set tx_isolation='serializable';串行化

3.怎么提高数据库的性能

  (1)为数据库中的表添加适当的索引,表创建合适的主外键(经常查询的字段建索引)

  (2) 优化SQL语句(查询的时候不要用select *,查询的时候写字段名字,尽量不要用多表连接查询,用模糊查询的时候%不要在前面)

  (3)添加数据库缓存/redis缓存服务器

  (4).定期进行数据库文件转储分为当前表和历史表

  (5)使用数据库分库分表,读写分离(shadingjdbc,mycat)

4.什么是索引,什么是视图,他们有什么特点,优点和缺点

   索引:索引的底层是B+Tree的结构,索引相当于书的目录。

优缺点:方便查询,但是也不是建的越多越好,索引需要占内存,在进行dml语句操作的时候需要维护索引,一定程度上对dml语句的操作有一定的阻碍作用

视图:一条查询语句,一张虚拟的表,不占内存

优缺点:方便查询,不占内存,对数据访问有一定的限制,可以确保数据的安全性,会产生脏数据在进行插入和添加的时候这种有条件的试图,通过视图插入的数据在视图中看不到,通过视图更新的数据在试图中也看不到,但对删除没有影响

创建视图的语法:

create  or replace view emp_view as

 select empno,sal,deptno from emp where deptno=10;

5.索引在什么情况下失效

(1). 没有 WHERe 子句

(2). 使用  IS NOT NULL

(3). 使用 LIKE ‘%T’ 进行模糊查询

(4). 在索引列上使用函数

(5).  字符型字段为数字时在where条件里不添加引号

(6). 某个表中,有两列(id和c_id)都建了联合索引,下面这种查询条件不会走索引(select * from test where c_id=1 and id=2)

6  索引是底层是B+Tree的实现

一个m阶的B+树具有如下几个特征:

1非叶子节点只存储键值信息。

2所有叶子节点之间都有一个链指针。

3数据记录都存放在叶子节点中

7.为什么要使用B+tree

1. B+树是多路平衡查找树(B-Tree)的变种(Plus版本),多路绝对平衡查找树,他拥有B-树的优势

2. B+树的扫库扫表能力更强。

3. B+树的磁盘读写能力更强。

4. B+树的排序能力更强。

5. B+树的查询效率更加稳

8.数据库的主从复制(redis里面有讲认真听)

 9.数据库的三范式

第一范式:表中要有主键,字段不能分

第二范式:满足第一范式的条件下,表中建立外键(非主键属性,完全依赖于主键属性)

第三范式:满足第一,二范式的条件下,非主键属性无传递依赖

(A依耐B ,B依耐C 就可以说A依耐C)

10.关系型数据库和非关系型数据库区别

  关系型数据库:

  优点

(1)容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解;

(2)使用方便:通用的SQL语言使得操作关系型数据库非常方便;

(3)易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率;

(4)支持SQL,可用于复杂的查询。

(5)支持事务

  缺点

(1)、为了维护一致性所付出的巨大代价就是其读写性能比较差;

(2)、固定的表结构;

(3)、不支持高并发读写需求;

(4)、不支持海量数据的高效率读写

非关系型数据库

(1)使用键值对存储数据;

 优点

支持分布式,无需经过sql层的解析,读写性能很高 基于键值对,数据没有耦合性,容易扩展 存储数据的格式:nosql的存储格式是key,value形式

 缺点 不提供sql支持

11.有哪些锁                          

概念

乐观锁(上了锁没有释放,其他人照样可以操作表)

自己实现,通过版本号

悲观锁(一断上了锁,没有释放锁,不允许其他人对表进行操作)

加 lock

加写锁:

lock   tables   table_name   read;//其他事务只能读,不能加写锁,要等待更新。

加读锁:

lock   tables   table_name write;//其他事务不能读

解锁:

unlock  tables;

排它锁

一个事务,只能写,for update

行锁

作用于数据行

表锁

作于用表

12 怎样避免死锁

(1)使用事务,不使用 lock tables 。

(2)保证没有长事务。

(3)操作完之后立即提交事务,特别是在交互式命令行中。

(4)如果在用 (SELECT ... FOR UPDATE or SELECT ... LOCK IN SHARE MODE),尝试降低隔离级别。

(5) 修改多个表或者多个行的时候,将修改的顺序保持一致。

(6)创建索引,可以使创建的锁更少。

(7)最好不要用 (SELECT ... FOR UPDATE or SELECT ... LOCK IN SHARE MODE)。

(8)如果上述都无法解决问题,那么尝试使用 lock tables t1, t2, t3 锁多张表

12.索引分类

普通索引: 最基本的索引,没有任何限制

唯一索引:与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。

主键索引: 它是一种特殊的唯一索引,不允许有空值。

全文索引: 针对较大的数据,生成全文索引很耗时好空间。

组合索引: 为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则

13.mysql的引擎(8个,下面介绍三个)

show engines; // 查看mysql所支持的存储引擎,以及从中得到mysql默认的存储引擎。

  show variables like '%storage_engine'; // 查看mysql 默认的存储引擎

 Mylsam(不支持事务,外键),

innodb(支持事务,外键),

memory(数据存储于Mysql内存中,mysql重启数据全部丢失.),MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM)

14. mysql和oracle的区别

最重要的区别 

MySQL是轻量型数据库,并且免费,没有服务恢复数据。

Oracle是重量型数据库,收费,Oracle公司对Oracle数据库

有任何服务。

(2) 对事务的提交

       Mysql默认是自动提交,而oracle的事务需要手动提交

(3) 事务隔离级别

      mysql的默认隔离级别repeatable read,oracle的事务隔离级别read-committed

(4)自动增长的数据类型处理

        mysql有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。oracle没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。

   (5)  oracle中id的自动增长需要自己创建

 create sequence sequence_name

    increment by 1

start with 1

insert into 表名(id,name) values(sequence_name.nextval,'张三');

  (6)分页的sql语句处理

 mysql用的是limit,oralce用的是rownum

15.存储过程

存储过程就相当于java中的方法,里面封装的是一系列sql语句,可以重复的调用,可以没有返回值类型

存储过程是为了完成功能可以没有返回值

创建存储过程:

delimiter //

drop procedure if exists 存储过程名//

create procedure 存储过程名()

begin

  sql语句;

  sql语句;

  sql语句;

end//

  调用存储过程

call 存储过程名(值,值...);

例子:

查询dept表的记录

delimiter //

drop procedure if exists pro_dept //

create procedure pro_dept()

begin

  select * from dept;

end//

delimiter ;

call pro_dept();  //掉用存储过程

16.触发器

触发器是一个特殊的存储过程,不需要参数,不要调用,系统自动触发

例子

delimiter //

drop trigger  tongji_trig//

create trigger tongji_trig

after insert

on test

for each row

begin

  update tongji set count=count+1;

end//

这个例子的作用在给test表插入数据的时候,数据库自动的把tongji表的count字段+1,这个count的值的增加不需要我们手动操作,数据库会自动的做,这个就是触发器的作用

三、jdbc部分

1.jdbc连接数据库的步骤

(1)加载驱动

(2)获取连接

(3)获取statement对象

(4)执行sql获取结果集

(5)关闭连接

2.jdbc 中statement 和prepstatement的区别

prepstatement可以防止sql注入,可以预编译,效率高,代码的可读性和可维护性

四、web部分

1.http和https的区别,

1、HTTPS  协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(以前的网易官网是http,而网易邮箱是 https 。)

2、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。

3、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者http是80,https后者是443。

HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)

2.TCP和UDP协议的区别

 TCP/IP协议族的传输层协议主要包含TCP和UDP

1 tcp是面向连接的可靠的传输层协议,udp是无连接的传输协议

2 安全方面的区别: tcp的安全性没有udp的安全性高,并且udp的漏洞比较少,不容易被一些不法分子利用。

3 传播速度的区别: udp的传送速度也比tcp的快。因为tcp在传送的时候要先建立连接,建立连接的时候是比较耗时的,而且在传送数据的时候还要确认一些东西,而udp无连接传送数据的。

4 连接对象数量的区别: tcp是一对一的连接,而udp是一对多个或多对多个连接的。

3.TCP协议:

       位于传输层, 提供可靠的字节流服务。所谓的字节流服务(Byte Stream Service) 是指, 为了方便传输, 将大块数据分割成以报文段(segment) 为单位的数据包进行管理。 而可靠的传输服务是指, 能够把数据准确可靠地传给对方。 即TCP 协议为了更容易传送大数据才把数据分割, 而且 TCP 协议能够确认数据最终是否送达到对方。所以,TCP连接相当于两根管道(一个用于服务器到客户端,一个用于客户端到服务器),管道里面数据传输是通过字节码传输,传输是有序的,每个字节都是一个一个来传输。

4.三次握手:

握手过程中使用了 TCP 的标志(flag) —— SYN

(synchronize)标识 和ACK(acknowledgement) 确认。

第一次握手:建立连接时,客户端A发送SYN包(SYN=j)里面有SYN和唯一序列号到服务器B,并进入SYN_SEND状态,等待服务器B确认。

第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。

第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,完成三次握手。

5.四次挥手

四次挥手:由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。先进行关闭的一方将执行主动关闭,而另一方被动关闭。

客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。

服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。

服务器B关闭与客户端A的连接,发送一个FIN给客户端A。

客户端A发回ACK报文确认,并将确认序号设置为收到序号加1

6.Ajax的同步和异步的区别

同步:

同步的思想是:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉。

同步就相当于是 当客户端发送请求给服务端,在等待服务端响应的请求时,客户端不做其他的事情。当服务端做完了才返回到客户端。这样的话客户端需要一直等待。用户使用起来会有不友好。

异步:异步就是,当客户端发送给服务端请求时,在等待服务端响应的时候,客户端可以做其他的事情,这样节约了时间,提高了效率。

6.ajax的 请求类型:post,get

post:提交的数据不会在浏览器上显示,相对安全,提交的数据量相对大一些,一般被默认为不受限制

get:提交的数据会在浏览器上显示,不安全,提交的数据量少

7.ajax的提交数据的格式:

text,html,script,xml,json

8.axios五种请求类型

1get一般多用于获取数据 

2post: 主要提交表单数据和上传文件

3put对数据全部进行更新  

4patch只对更改过的数据进行更新

5delete删除请求(参数可以放在url上也可以和post一样放在请求体中)

9.VUE生命周期(难点!!)

周期:

1.初始化周期

1.beforeCreate vue对象实例化之前(刚开始)

2. created

3. beforeMount

4. Mounted 说明VUE对象实例化成功(DIV渲染完成)

2.修改周期

1. beforeUpdate 用户修改数据之前

2. updated 用户修改数据之后

3.销毁周期

1. beforeDestroy VUE对象销毁前

2. destroyed VUE对象销毁后(最后一步)

10.MVVM设计思想

知识回顾: MVC模式 核心思想 减少代码的耦合性

M Model:封装的数据

V View 视图层: 数据的展现

C Contro 控制层 程序的流转的过程

衍生: 3层代码的结构 Controller—Service–Mapper/Dao

针对于: 后端服务器.

MVVM思想说明:

M: Model 封装的数据. 数据层

V: View 数据的展现 视图层

VM: viewModel视图数据的控制层 控制数据流转

MVVM设计思想是前端模拟后端为了解耦的一种设计思想.

11.什么是json,json怎么转对象,对象怎么转json

**JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。**它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成

12.简述什么是跨域

1. 如果浏览器的网址与Ajax请求网址必须满足同源策略.则浏览器才能解析Ajax,执行正确的请求.

2. 同源策略规定

   规定要求:请求协议://域名:端口号

1.如果3者都满足,则符合同源策略.浏览器可以正确解析.

2.反之(有一个不满足)不满足同源策略.称之为跨域请求 则浏览器不能正常解析Ajax请求.

3.跨域解决方案:

1.JSONP(以前使用)

2.CORS(跨域资源共享)

 同源策略

要素1: 浏览器地址: file:///D:/workspace/cgb2105/webDemo/userList.html 展现页面

要素2: Ajax请求地址: http://localhost:8090/getAll

要求: 如果浏览器的地址与Ajax请求地址如果满足 HTTP请求协议/请求的域名/端口号 要求3项必须相同则满足同源策略. 浏览器可以解析返回值,则请求正确.

3.2 同源策略题目

例子1:

1. 浏览器地址: http://localhost:8090/a.html

2. Ajax地址: http://localhost:8091/getAll 不满足:端口号不一样

例子2:

1. 浏览器地址: http://localhost:8090/a.html

2. Ajax地址: http://www.baidu.com:80/getAll 不满足: 域名/端口号不一样

例子3: 前提: IP与域名正确映射 DNS

1. 浏览器地址: http://10.1.10.8/a.html

2. Ajax地址: http://www.baidu.com/getAll   不满足:域名不一致

 跨域解决策略

 JSONP

JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的

核心知识: 利用