标签:功能 概念 move put 运算 static lips 并且 策略
Mysql 的面试题:
MySQL 关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。
SQL:结构化查询语言,是一种数据库查询和程序设计语言
MySql数据库:优点,小灵活;用来存储数据的;
SQL:结构化查询语言,SQL(Structured Query Language)
RDBMS指的是关系型数据库数据管理系统
SQL功能强大,概括起来可以分为一下几组:
DML:数据库操作语言(Data Maniplulation Language)--用于检索或者修改数据(主要的:面试,笔试都会考到)
DDL:数据库定义语言(Data Defination Language)--用于定义数据的结构
DCL:数据库控制语言(Data Control Language)--用于定义数据库用户的权限
1、mysql 和oracle 的区别
(1)
① MySQL:属于中小型数据库,开源免费使用,轻便简单,占用内存小
② Oracle:大型数据库,收费,性能较好,支持大并发大访问量,占用内存大
(2) 自动增长的数据类型处理
① MySQL:auto_increment
② Oracle: 创建sequence序列
(3) 单引号
① MySQL:可以用双引号包起字符串
② Oracle:只能用单引号
(4) 分页
① MySQL分页比较简单 用limit开始位置,记录个数
② Oracle分页相对复杂
(5) 字符串链接
① MySQL:concat
② Oracle:||
③ Java: +
1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,Mysql是开源的而Oracle价格非常高。MySQL 其体积小、速度快、成本低
2. Oracle支持大并发,大访问量,是OLTP最好的工具。
3. 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。
4.Oracle也Mysql操作上的一些区别
①主键 Mysql一般使用自动增长类型,在创建表时只要指定表的主键为auto increment,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;Oracle没有自动增长类型,主键一般使用的序列,插入记录时将序列号的下一个值付给该字段即可;只是ORM框架是只要是native主键生成策略即可。
②单引号的处理 MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。
③翻页的SQL语句的处理 MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数;ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置, 并且只能用ROWNUM<100, 不能用ROWNUM>80
④ 长字符串的处理 长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。 ⑤空字符的处理 MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构, 导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。
⑥字符串的模糊比较 MYSQL里用 字段名 like ‘%字符串%‘,ORACLE里也可以用 字段名 like ‘%字符串%‘ 但这种方法不能使用索引, 速度不快。
⑦Oracle实现了ANSII SQL中大部分功能,如,事务的隔离级别、传播特性等而Mysql在这方面还是比较的若
2、数据类型上,有什么区别(https://www.cnblogs.com/xiaweicn/p/8847783.html)
(1) MySQL:有date和time两种 Oracle:只有date
(2) MySQL:char字符 varchar字符串 Oracle:varchar2字符串
(3) MySQL : numeric Oracle:number
(1)①MYSQL日期字段分DATE和TIME两种
②ORACLE日期字段只有DATE
(2)MYSQL: float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位
(3)ORACLE: CHAR 固定长度字符串 最大长度2000bytes
VARCHAR2 可变长度的字符串, 最大长度4000bytes 可做索引的最大长度749
NCHAR 根据字符集而定的固定长度字符串 最大长度2000bytes
NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000bytes
DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS),经过严格测试,无千虫问题
TIMESTAMP 日期(日-月-年) DD-MM-YY(HH-MI-SS:FF3),经过严格测试,无千虫问题 与DATE相比较,TIMESTAMP有小数位秒信息
LONG 超长字符串 最大长度2G,足够存储大部头著作
BLOB 二进制数据 最大长度4G
CLOB 字符数据 最大长度4G
ROWID 数据表中记录的唯一行号 10bytes xxxx.xxx.xxx格式,x为0或1
NROWID 二进制数据表中记录的唯一行号 最大长度4000bytes
NUMBER(P,S) 数字类型 P为整数位,S为小数位
FLOAT 浮点数类型 NUMBER(38),双精度
REAL 实数类型 NUMBER(63),精度更
4)CHAR,VARCHAR,VARCHAR2他们的区别?
CHAR是定长的,即:比方其长度为10,我们存入6个长度,那么剩余的4个长度的位置就会用空格被补齐;
VARCHAR是标准的SQL数据类型,是变长的,即:比方长度为10,我们存入6个长度,那么剩余的4个就会被截掉;
VARCHAR2是Oracle独有的数据类型,同VARCHAR一样是变长的.
3、什么是数据瓶颈,oracle的数据瓶颈在哪里,mysql的数据瓶颈在哪里
简单的是说,所谓数据库瓶颈 是指整个系统的运行性能不佳,而原因是由于对数据库的访问部分,因此说数据库成为为整个应用的瓶颈。
通常造成数据库瓶颈的原因是:
1、数据库系统本身性不佳,例如你用桌面数据库Access 来做web应用的后台数据库 显然是不行的;
2、数据库结构设计不合理,导致不必要的、过多的数据库访问,因此称为瓶颈,这需要优化数据表结构设计,必要时引入Cache系统;
3、数据库连接池设置不当,为了提供数据库的服务能力,在有潜在并发访问数据库的情况下,我们会使用连接池技术,如果池的大小 与实际需求不符,择会带来访问数据库时的排队等候,
4、程序实现适当,例如对 数据库连接长期占有,导致其它访问必须进行排队,因而成为瓶颈,
4、字符串连接符是什么
(1) ORACLE: ||
(2) Mysql: concat
①mysql 的连接函数concat()可以多个字符串连接,而在oracle里面只能两个字符串连接
示例:
select concat(‘drop table ‘,t.table_name,‘ ;‘) col from information_schema.tables t where t.table_schema=‘account_check‘;
②SQL语句中||的作用就是字符串的连接符。
比如‘111‘||‘222‘ 其结果就是‘111222‘
(3)例子:
①oracle 字符串拼接:||
select ‘1‘ || ‘2‘ from dual;
②MySQL 字符串拼接:concat(a,b)
select concat(‘1‘,‘2‘) from dual;
5、Drop table and delete table 的区别
(1)DROP TABLE,是从数据库中删除表。删除后,表结构不在存在,无法再对该表进行任何操作。
(2)DELETE 是有条件的删除表中的数据,如果不写条件,全表删除,而删除后,表仍然存在,仍可以对表进行操作。具体语法为DELETE FROM TABLE WHERE 条件。
(3)如果在删除表时表带有主要建关系,那么需要先删除表之间的关系(也就是外键),然后再去删除主键的数据,否则没有办法清除数据。
Drop table 彻底删除表(包括表结构,主键等)
delete table 只清空表数据
6、Update 和delete 操作,是不是必须要写where 语句
(1) 修改or删除所有的数据,则不写
(2) 修改满足条件的,必须写
7、什么叫重复数据
8、从现在开始不允许写select * from 表名称 查询数据太多,跑宕机(当机)
一律写成 select count(*)from 表名称
宕机是计算机术语,口语里面我们简单的把停掉机器叫做down机,转换为汉字是“宕机”,但很多人都叫做“当机”/“死机”,down就是up的反义,就是计算机不能正常工作了,包括一切原因而导致出现的死机。(1)一般情况下指的就是计算机主机出现意外故障而死机;(2)一些服务器故障,包括服务器主机,数据库死锁或者DNS故障都可以称为宕机,一切服务器的某些服务挂掉了,都可以这么说。
测试二(丁_2019.2.26 星期二)
1.Java中Collection和Collections的区别
https://pengcqu.iteye.com/blog/492196
https://zhidao.baidu.com/question/237396144.html
https://www.cnblogs.com/cathyqq/p/5279859.html
Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。
构造方法传参有几种方式?
1.按名 2.按索引 3.按类型 4.按顺序直接传
2.Java中&&和&的区别
https://www.cnblogs.com/minshia/p/6023950.html
Java中&&和&都是表示与的逻辑运算符,都表示逻辑运输符and,当两边的表达式都为true的时候,整个运算结果才为true,否则为false。
&&的短路功能,当第一个表达式的值为false的时候,则不再计算第二个表达式;&则两个表达式都执行。
&可以用作位运算符,当&两边的表达式不是Boolean类型的时候,&表示按位操作。
3.HashMap和Hashtable的区别
http://www.importnew.com/7010.html
2 产生时间
Hashtable是java一开始发布时就提供的键值映射的数据结构,而HashMap产生于JDK1.2。虽然Hashtable比HashMap出现的早一些,但是现在Hashtable基本上已经被弃用了。而HashMap已经成为应用最为广泛的一种数据类型了。造成这样的原因一方面是因为Hashtable是线程安全的,效率比较低。另一方面可能是因为Hashtable没有遵循驼峰命名法吧。。。
3 继承的父类不同
HashMap和Hashtable不仅作者不同,而且连父类也是不一样的。HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。不过它们都实现了同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口
4 对外提供的接口不同
Hashtable比HashMap多提供了elments() 和contains() 两个方法。
elments() 方法继承自Hashtable的父类Dictionnary。elements() 方法用于返回此Hashtable中的value的枚举。
contains()方法判断该Hashtable是否包含传入的value。它的作用与containsValue()一致。事实上,contansValue() 就只是调用了一下contains() 方法。
5 对Null key 和Null value的支持不同
Hashtable既不支持Null key也不支持Null value。Hashtable的put()方法的注释中有说明。
当key为Null时,调用put() 方法,运行到下面这一步就会抛出空指针异常。因为拿一个Null值去调用方法了。
当value为null值时,Hashtable对其做了限制,运行到下面这步也会抛出空指针异常。
HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,可能是 HashMap中没有该键,也可能使该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。
6 线程安全性不同
Hashtable是线程安全的,它的每个方法中都加入了Synchronize方法。在多线程并发的环境下,可以直接使用Hashtable,不需要自己为它的方法实现同步
HashMap不是线程安全的,在多线程并发的环境下,可能会产生死锁等问题。具体的原因在下一篇文章中会详细进行分析。使用HashMap时就必须要自己增加同步处理,
虽然HashMap不是线程安全的,但是它的效率会比Hashtable要好很多。
7 遍历方式的内部实现上不同
Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。
HashMap的Iterator是fail-fast迭代器。当有其它线程改变了HashMap的结构(增加,删除,修改元素),将会抛出ConcurrentModificationException。不过,通过Iterator的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。
JDK8之前的版本中,Hashtable是没有fast-fail机制的。在JDK8及以后的版本中 ,HashTable也是使用fast-fail的, 源码如下:
modCount的使用类似于并发编程中的CAS(Compare and Swap)技术。我们可以看到这个方法中,每次在发生增删改的时候都会出现modCount++的动作。而modcount可以理解为是当前hashtable的状态。每发生一次操作,状态就向前走一步。设置这个状态,主要是由于hashtable等容器类在迭代时,判断数据是否过时时使用的。尽管hashtable采用了原生的同步锁来保护数据安全。但是在出现迭代数据的时候,则无法保证边迭代,边正确操作。于是使用这个值来标记状态。一旦在迭代的过程中状态发生了改变,则会快速抛出一个异常,终止迭代行为。
8 初始容量大小和每次扩充容量大小的不同
Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。HashMap默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。
9 计算hash值的方法不同
为了得到元素的位置,首先需要根据元素的 KEY计算出一个hash值,然后再用这个hash值来计算得到最终的位置。
Hashtable直接使用对象的hashCode。hashCode是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值。然后再使用除留余数发来获得最终的位置。
Hashtable在计算元素的位置时需要进行一次除法运算,而除法运算是比较耗时的。
HashMap为了提高计算效率,将哈希表的大小固定为了2的幂,这样在取模预算时,不需要做除法,只需要做位运算。位运算比除法的效率要高很多。
4.final,finally,finalize的区别?
https://blog.csdn.net/cyl101816/article/details/67640843
https://zhidao.baidu.com/question/71304229.html
1、修饰符(关键字) 如果一个类被声明为final,意味着它不能再派生新的子类,不能作为父类被继承。因此一个类不能及被声明为abstract,又被声明为final的。
2、将变量或方法声明为final,可以保证他们使用中不被改变。被声明为final的变量必须在声明时给定初值,而以后的引用中只能读取,不可修改,被声明为final的方法也同样只能使用,不能重载。
二、finally:
在异常处理时提供finally块来执行清楚操作。如果抛出一个异常,那么相匹配的catch语句就会执行,然后控制就会进入finally块,如果有的话。
三、finalize:
是方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除之前做必要的清理工作。这个方法是在垃圾收集器在确定了,被清理对象没有被引用的情况下调用的。
5.overload和override的区别
https://zhidao.baidu.com/question/58822955.html
Overload是重载的意思,表示在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者参数类型不同即可。
Override是覆盖的意思,也就是重写,它与返回值类型无关,只看参数列表。
两者不同主要体现在:
1,目的:
overload用于增加程序的可读性(做法不同,但是做的同一事情)。 override用于提供其超级类已经提供的方法的特定实现。
2,范围
overload 在相同的类范围内内执行。 override发生在两类具有继承(继承)的关系。
3, 参数
overload参数必须不同。 override参数必须相同。
4,多态性
overload 静态多态,调用的函数在编译时被选中。 override 是运行时多态性的。
5,返回类型
overload中可以相同或不同。但你必须改变参数。 override必须是相同的或协变的。
6.Error与Exception的区别
https://www.cnblogs.com/lcl-dcr/p/7653274.html
1.首先,Error类和Exception类都是继承Throwable类
2.Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
3.Exception(异常)表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。
Exception又分为两类
CheckedException:(编译时异常) 需要用try——catch显示的捕获,对于可恢复的异常使用CheckedException。
UnCheckedException(RuntimeException):(运行时异常)不需要捕获,对于程序错误(不可恢复)的异常使用RuntimeException。
7.abstract class和interface区别
https://blog.csdn.net/qq_31059475/article/details/70651750
https://blog.csdn.net/aptentity/article/details/68942916
含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
下面比较一下两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
下面接着再说说两者在应用上的区别:
接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。
而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码,伪代码如下:
8.short s1=1;s1=s1+1;为什么是错的.而s1+=1;为什么不报错 https://zhidao.baidu.com/question/652327447025977165.html
https://zhidao.baidu.com/question/67338602.html
前面一句中,s1 = s1 + 1需要进行强转,写成s1 = (short)(s1 + 1)。
后面一句没错。
1、Java规范有这样的规则
[
a.高位转低位需要强制转换
b.低位转高位自动转.
]
2、short s1 = 1; s1 = s1 + 1;中,1 是int 型 s1 short型 通过 + 运算后s1 自动转为int 型 所以错!
3、后面一句没有错是因为Java语言规范中讲到,复合赋值(E1 op=E2)等价于简单赋值(E1=(T)((E1) op (E2))),而(s1 += 1)表达式使用的是复合赋值操作符,复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。
9.Math.round(11.5)=? Math.round(-11.5)=? http://www.w3school.com.cn/jsref/jsref_round.asp
10.启动一个线程用润()还是start()
https://zhidao.baidu.com/question/2010762869108850948.html
1、启动一个线程是start()方法。
2、启动线程之后start()方法会去调用run方法内容。
区别:start是创建并启动一个线程,而run是要运行线程中的代码。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
框架 : 2019-3.05
1.Hibernate和mybatis的区别
2.你对mybatis的印象,mybatis的流程
2019年3月7日09:15:27
知识点(面试题):
1.mybatis中,$和#的区别?
https://www.cnblogs.com/baizhanshi/p/5778692.html
https://www.cnblogs.com/sunny3096/p/8590901.html
答:
1.#{}:占位符号,好处防止sql注入
${}:sql拼接符号
动态 SQL 是 mybatis 的强大特性之一,也是它优于其他 ORM 框架的一个重要原因。mybatis 在对 sql 语句进行预编译之前,
会对 sql 进行动态解析,解析为一个 BoundSql 对象,也是在此处对动态 SQL 进行处理的。在动态 SQL 解析阶段, #{ } 和 ${ } 会有不同的表现。
2.
#{ }:解析为一个 JDBC 预编译语句(prepared statement)的参数标记符。
例如,Mapper.xml中如下的 sql 语句:
select * from user where name = #{name};
动态解析为:
select * from user where name = ?;
一个 #{ } 被解析为一个参数占位符 ? 。
而${ } 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。
例如,Mapper.xml中如下的 sql:
select * from user where name = ${name};
当我们传递的参数为 "Jack" 时,上述 sql 的解析为:
select * from user where name = "Jack";
${ } 变量的替换阶段是在动态 SQL 解析阶段,而 #{ }变量的替换是在 DBMS 中。
------------------------------------------------------------------------------------------------------------------------------------------------------------------
Hibernate框架2019年3月11日14:15:19
面试题:
1、mybatis 和hibernate 的区别
2、Hibernate 工作流程
1.读取并解析配置文件。 2.读取并解析映射信息,创建SessionFactory
3.打开Session 4.创建事务Transaction 5.持久化操作
6.提交事务 7.关闭Session 8.关闭SessionFactory
3、什么是持久化
持久化就是把数据(如内存中的对象)同步保存到数据库或者某些存储设备中(如磁盘文件中、XML数据文件中)等等。
在软件的分层体系结构中,持久化层是与数据库打交道的逻辑层(DAO)
持久化层=数据库打交道的逻辑层=DAO
4、Hibernate 查询中get和load 的区别
get支持缓存查询 找不到id 返回 null 不支持 lazy 延迟加载 (走语句的时候就加载,)
load支持缓存查询 找不到id 返回 抛出异常 支持 lazy 延迟加载 (用的时候,也就是需要输出的时候才会加载,)
5.实体对象查询
* list和iterate的区别?
* list每次都会发出sql语句,list会向缓中放入数据,而不利用缓存中的数据
* iterate:在默认情况下iterate利用缓存数据,但如果缓存中不存在数据有可以能出现N+1问题
1.连接查询和内连接查询的区别 ?
左连接显示左边全部的和右边与左边相同的
右连接显示右边全部的和左边与右边相同的
内连接是只显示满足条件的!
1、在使用JPA缓存中遇到的问题(编码中,你遇到过什么样的问题,怎么解决的):
(1) 如果数据库中存在的数据,支持缓存
(2) 如果数据库中数据不存在,则每一次查询都会发出sql语句,加载数据库中数据
---------------------------------------------------------------------------------2019年3月27日13:01:12 Maven------------------------------------------------------------------------------------
1.Maven 的生命周期:
清理 编译 测试 报告 打包 部署
2.理解maven将项目打包成 jar、war、pom 三种类型区别
1.pom工程:用在父级工程或聚合工程中。用来做jar包的版本控制。
2.war工程:将会打包成war,发布在服务器上的工程。如网站或服务。
3.jar工程:将会打包成jar用作jar包使用。
3.理解maven 中 依赖、继承、聚合 的概念,三者区别
springboot 面试题:常用的springboot注解
标签:功能 概念 move put 运算 static lips 并且 策略
原文地址:https://www.cnblogs.com/cxqbk/p/10435675.html