window10安装环境
slmgr.vbs -xpr 查看状态
slmgr.vbs /upk 卸载之前的
slmgr /ipk VK7JG-NPHTM-C97JM-9MPGT-3V66T
slmgr /skms kms.xspace.in
slmgr /ato
tomcat.bat文件
set JAVA_OPTS=%JAVA_OPTS% -server -Xms1000m -Xmx1000m -XX:MaxNewSize=256m
eclipse.ini配置文件
-vm
E:/Program Files/Java/jdk1.8.0_191/bin
-Xms512m
-Xmx2048m
--add-modules=ALL-SYSTEM
eclipse+python+anaconda
http://pydev.org/updates/
选择anaconda位置
maven
C:\Users\Administrator\.m2 加入setting,xml
cmd
mvn - version
下载3.6最新版本
cd E:\workspace1\noaper-demo-all>
打包
mvn clean install -DskipTests -U
-DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下。
-Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。
ArrayList
1、什么是
数组
Redis
1、什么是Redis
key-value数据库
2、Redis memcached
1、memcached所以的值均是简单的字符串,redis支持更为丰富的数据类型
2、redis的速度比memcached快很多
3、redis可以持久化其数据
3、String 、List、Set SortedSet、hashes
4、Redis主要消耗什么物理资源?内存
5、Remote Dictionary Server
13、会话缓存、全员缓存、队列、排行榜/计算器、发布/订阅
14、Redisson、Jedis、Lettuce
0、面向对象
封装 给对象提供了隐藏内部特性和行为的能力
封装的好处
通过隐藏对象的属性来保护对象内部的状态
提高了代码的可用性和可维护性 因为对象的行为可以被单独的改变或者扩展
禁止对象之间的不良交互提高模块化
多态 是编程语言给不同的底层数据类型做相同的接口展示的一种能力。一个多态
类型上的操作可以应用到其他类型的值上面
抽象 把想法从具体实例中分离出来的步骤,要根据它们的功能不同而不是实现细
节来创建(java支持创建只暴漏接口而不包含方法实现的抽象类 类的行为细节分离
继承 从基类获取字段和方法 提高了代码重用性 也可不修改的情况 给现有类添加
新特性
抽象和封装的不同点
抽象和封装是互补的概念。一方面,抽象关注对象的行为。另一方面,封装关注对
行为的细节,一般是通过隐藏对象内部状态信息做到封装,因此,封装可以看出是
用来提供抽象的一种策略
1、重写与重载的区别
重写:1、重写是在俩个类中(父子类)方法名和参数列表相同,方法体实现不同
2、重写遵循“运行期绑定”,根据对象类型调用
重载:1、重载是在一个类中,方法名相同,参数列表不同,
2、重载遵循“编译器绑定”,根据参数列表调用
2、抽象类和接口的区别
1、抽象类是类有构造器,结构没有构造器
2、抽象类可以有抽象方法和非抽象方法,接口只有抽象方法
3、一个类只能继承一个抽象类,一个类可以实现多个接口
4、子类继承抽象类,建议实现抽象类的所有抽象方法,否者子类也声明为抽象类 ,
子类实现接口,接口必须实现接口新所有的抽象方法
5、抽象类和接口都不能被实例化,都需要子类继承与实现
3:this关键字与super关键字区别:
1、this: 指的是当前对象 谁调用指的就是谁。
访问成员变量或者方法的时候默认都有一个this
this语法 :this.成员变量 this.方法名this()必须位于构造器第一行
2、super:指的当前对象的父类
super语法:super.成员变量 super.方法名 super()必须第一行
4:String及StringBuffer和StringBuilder区别
1、String及StringBuffer,StringBuilder都是java.lang包下面的
2、String是不可改变的,StringBuffer及StringBuilder是可变的
3、StringBuffer是线程安全的,同步处理的,性能稍慢
4、StringBuilder是线程不安全的,并发处理,性能稍快。
5:==和equals区别:
1、 ==用于比较变量的值,可以任何类型,若是引用类型则比较两个对象的
地址存储是否同一个。
2、 equals是Object方法,重写之后用于比较两个对象的内容是否一致(像不像)。
3、 Object默认的equals方法比较规则是==一致。
6、List和Set区别Map(都是Collection的子接口):
1、List:可重复元素,且有序,(元素是否重复,却决于元素自身的equals比较结果)
实现接口有ArrayList和LinkedList
2、Set: 不可重复集,且无序。最多包含一个null。
实现接口有HashSet和TreeSet
1、ArrayList:底层采用数组方式实现,可以通过下标访问,并且下标从0开始,更
适合随机访问,插入和删除性能稍慢。
2、LinkedList底层采用双向链表实现,更适合插入和删除,随机访问速度较慢,在
性能要求不是特别苛刻的情况可以忽略。
3、HashSet底层采用数据结构是Hash表,HashSet是通过元素HashCode值相同,才会
判断equals是否为true。若HashCode值不同,不会掉用equals进行判断。
4、TreeSet:底层是二叉树,TreeSet存储对象时,可以进行排序,但需要指定排序
算法,依赖于comparaTo方法
集合要掌握的是ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet的实现原理,能流利作答,当然能掌握CopyOnWrite容器和Queue是再好不过的了。另外多说一句,ConcurrentHashMap的问题在面试中问得特别多,大概是因为这个类可以衍生出非常多的问题,关于ConcurrentHashMap,我给网友朋友们提供三点回答或者是研究方向:
(1)ConcurrentHashMap的锁分段技术
(2)ConcurrentHashMap的读是否要加锁,为什么
(3)ConcurrentHashMap的迭代器是强一致性的迭代器还是弱一致性的迭代器
7、Collection和Collections区别
1、Collection是一个接口,定义集合相关操作方法,有俩个子接口
2、Collections是集合的工具类,它提供了很多便于操作集合的方法,
静态方法sort()方法进行排序 可以自定义sort()方法(仅对List排序)
静态方法synchronized()方法
对已有的集合或Map进行转换成线程安全的集合或Map
8、Exception和Error区别:
0、都是Throwable的子类
1、Exception: 表示程序可以处理的异常,可以捕获,遇到这类异常,应该尽可能 处理异常,而不应该随意终止程序。
2、Error:一般指的是虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足 这类错误导致程序中断,仅靠程序本身是无法恢复及维护
(checked受检查的)必须要用throws 语句在方法或者是构造函数上声明
(unchecked不受检查的)
运行时异常RuntimeException
ArithmeticException ClassCastException IllegalArgumentException
IllegalStateException IndexOutOfBoundsException NoSuchElementException
9、进程和线程的区别:
https://blog.csdn.net/u012459345/article/details/51179578
1、一个进程可以包含多个线程。
2、线程的划分尺度小于进程,使得多线程程序的并发性提高
3、进程在执行过程中拥有独立的内存单元,而多个线程共享此内存,从而极大提高
了程序的运行效率
4、线程不能独立执行
9-1. 请说出你所知道的线程同步的方法。
wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉 InterruptedException异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确 切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级
Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的 锁,而是让它们竞争。
9-2、区别 线程安全 和线程不安全
HashMap 是线程不安全的 效率稍快 Hashtable 是线程安全的 效率慢
ArrayList 不安全的 Vector 安全的 效率慢
StringBuilder StringBuffer线程安全的 效率慢
9-3、简述线程的创建方式,线程的几*五*种状态以及状态间的切换**
//Thread 重写run()方法
new新建状态 RUNABLE就绪状态 running运行状态
blocked阻塞状态 dead死亡状态
10、同步操作,异步操作:
1、同步操作:有先后顺序的操作,性能稍慢,相当于你干完,我再干。
2、异步操作:多线程并发操作,性能稍快,相当于大家一起干,各干各的
3、异步操作会发生线程安全问题,需要将异步操作变成同步操作(join)
11、冒泡排序:
//比较相邻的元素,小的往前,大的往后
public static void bubbleSort(int[]arr){
//外层控制排序次数
for(int i=0;i<arr.length-1;i++){
//内层控制比较次数
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
12、查询语句执行顺序
1、from子句: 执行顺序为从后往前、从右到左(数据量较少的表尽量放在后面)
2、where子句:执行顺序为自上而下,从右到左(将能过滤掉最大数量记录的条件 写在WHere字句的最右)
3、group by -- 执行顺讯从左往右分组(最好在GROUP BY 前使用WHERE 将不需要 的记录在GROUP BY 之前过滤掉)
4、having 子句:消耗资源(尽量避免使用,HAVING 会在检索出所有记录之后才对 结果进行过滤,需要排序等操作)
5、select子句:少用*号,尽量取字段名称(ORACLE在解析的过程中,通过查询数 据字典将*号依次转换成所有的列名,消耗时间)
6、order by子句:执行顺序为从左到右排序,消耗资源
13.转发和重定向的区别
转发:只有一次请求 地址栏不刷新 可以携带数据 是之前的request和response
不能形成回路
重定向: 地址栏刷新 不可以携带数据 重新创建request和response
不能形成回路 response.sendRedirect();
转发和重定向不能同时使用
主要区别:
(1)sendRedirect()方法不但可以在位于同一个主机上的不同Web应用程序之间进行重定 向,而且可以将客户端重定向到其他服务器上的Web应用程序资源。而forward( )方法只能将请求转发给同一Web应用的组件。
(2)sendRedirect()方法
(3)转发:浏览器URL的地址栏不变。
转发的绝对路径 从webroot下一层开始写
14、jsp页面中的9大内置对象
request: 向客户端请求数据(一次请求)
response: 服务器响应
out: 向客户端输出数据
pageContext: 页面上下文 管理对属于jsp中特殊可见部分中已经命名对象的访问
session: 会话 默认(30分) 用于保存每个用户信息
config: servlet配置信息 当一个servlet初始化 容器把某些信息通过此对象 传递给这个servlet
page 当前jsp实例 是jsp本身 通过这个可以对它进行访问
appliction 代表了当前应用程序的上下文。可以在不同的用户之间共享信息。
exception(只有当前页面设置了isErrorPage="true") 反应运行异常
15、servlet生命周期(******)
servlet---出生(init)----服务(service)----消亡(destroy)
当用户第一次访问servlet服务的时候创建该servlet对象
再次访问servlet,会使用已经创建号的servlet为用户服务
servlet是一个多线程的
服务器关闭的时候销毁
16、创建员工表和部门表**
alter table emp ADD
constraint FK_emp_did
foreign key(did) references dept(did);
create table emp(
eid int primary key auto_increment,
ename VARCHAR(30),
pwd VARCHAR(30),
sex CHAR(2),
age int,
hiredate date,
photo varchar(100),
resume varchar(100),
did int
);
create table dept(
did int primary key auto_increment,
dname varchar(30),
des varchar(100)
);
17、springmvc和struts区别
1、springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过滤器
2、springmvc是基于方法开发(一个uri对应一个方法),请求参数传递到方法的形参
可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性, 只能设计为多例
3、Struts采用值桟存储请求和响应的数据,通过ognl存取数据,springmvc通过参数解 析器是将request请求内容解析,并将方法形成赋值,将数据和视图封装成ModelAndView 对象,最后又将ModelAndView中的模型数据通过request域传输到页面。jsp视图解析器 默认使用jstl(c标签)el表达式
18、Java 中的final关键字有哪些用法?
(1)修饰类:表示该类不能被继承;
(2)修饰方法:表示方法不能被重写;
(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。
19、&和&&的区别?
&运算符有两种用法:(1)按位与;(2)逻辑与。
&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(“”),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常。注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。
20、******ACID 数据库事务的四大特性
(原子性)atomic:原子性是指事物包含的所有操作要么全部成功,要么全部失 败回滚
(一致性)caonsistent:一致性是指数据必须从一个一致性状态变换到另一个一 致性状态,也就是一个事务执行之前和执行之后都必须处于一致性状 态
(隔离性)lsolate:当多个用户并发访问数据库,比如操作同一张表时,数据库 为每个用户开启事务,不能被其他事务的操作干扰,多个并发事务之 间要相互隔离
(持久性)Durable:事务一旦本提交,那么数据库中的改变就是永久性的,即 便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作
21、*****隔离级别
脏读 是指在一个事务处理过程里读取另一个未提交的事务的数据
不可重复读(具体字段) 是指在对于数据库中的某个数据,一个事务范围内多 次查询却返回了不同的数据值 这是由于在查询间隔,将另一个事务修改并提交
幻读 (多条记录) 事务非独立执行时发生的一种现象
事务:多行代码 一块成功 一块失败
幻读和不可重复读都是读取了另一条已经提交的事务(这点和脏读不同),所不 同的his不可重复读查询的都是同一个数据,二幻读针对的是一批数据整体(比如数 据的个数)
mysql四种隔离级别
Serializable 可避免脏读、不可重复读、幻读发送 最高级别(级别高执行效率低)
22、(JDBC)PreparedStatement比Statement有什么优势?
PreparedStatement 是预编译的,因此,性能会更好,同时,不同的查询参数值
PreparedStatement 可以重用
23、在Java项目中,我们可能有一些开发(需求),它需要我们抽象出一个面,需要在这个 面上做一些处理,而spring就可以可以实现,借助Spring就非常便利。实现上面的 需求,我们需要完成的事情,如下:
抽象一个切面(aspect)
创建一个bean;
找到切入点(pointcut)
在切人点,执行指定的通知(advice);
注意通知的类型:around,before,after。
在spring的 XML中使用指定的标签进行配置即可
总结:完成上面的事情之后,在Spring启动的时候,在指定的切入点(方法)执行 时,就会按照配置的预期执行我们的通知。
24、数据库的优化:
0、不用和数据库频繁的连接(批量操作 尽量多用缓冲ehcache,redies)
1、使用连接池 获取连接
2、在合适的列上建立索引
3、要对表中的数据进行分区(列表分区 范围分区 散列分区 复合分区) 查询数便 利
4、尽量降低join 表的连接数量
5、尽量避免子查询过多的使用
6、select 不能用* 查询条件不能很复杂
7、尽量不要用'%张' not in () 等 就索引失效了
8、(选择正确的存储引擎)存储过程
9、几乎总是有一个id字段
10、在varchar上使用enum
25、什么是spring框架
使用spring框架有哪些好处
什么是控制反转ioc和依赖注入
1、构造器注入
2、Setter方法注入
3、接口注入
org.springframework.beans 和context包构成了spring框架ioc容器的基础
org.springframwwork.beans.factory.BeanFactory是spring ioc容器的具体实现, 用来包装盒管理前面提到的各种bean
BeanFactory接口是spring ioc容器核心接口
26、maven 项目构建的生命周期
清理clean
初始化 编译 测试
大包 集成测试 安装(install) 本地仓库 发布(deploy)
生成站点报告 文档等
27、单例模式
不管什么情况这个类只能有唯一的一个实例对象
1)只能在本类内部创建唯一实例对象(注意:构造器是私有的)
2)在外部类 提供一个能获取一次实例公开方法
3)即使在本类内部 只能获取一次实例对象
饿汉式
public class SingleTon2{
private static final SingleTon2 instance = new SingleTon2();
private SingleTon2(){}
public static SingleTon2 getInstance(){
return instance;
}
}
懒汉式
package test;
public class SingleTon2 {
private static SingleTon2 instance = null;
private SingleTon2(){}
public static synchronized SingleTon2 getInstance(){
if(instance==null){
instance = new SingleTon2();
}
return instance;
}
}
1.重定向的概念(******)
response.sendRedirect("重定向的地址");
1).会创建俩组reuqest,和response对象
2).会导致浏览器地址栏刷新
3).重定向不能形成回路
4).重定向之前不能关闭response的输出流
2.servlet生命周期(******)
servlet---出生(init)----服务(service)----消亡(destroy)
当用户第一次访问servlet服务的时候创建该servlet对象
再次访问servlet,会使用已经创建号的servlet为用户服务
servlet是一个多线程的
服务器关闭的时候销毁
3.servlet相关对象的创建
**4、创建员工表和部门表**
alter table emp ADD
constraint FK_emp_did
foreign key(did) references dept(did);
create table emp(
eid int primary key auto_increment,
ename VARCHAR(30),
pwd VARCHAR(30),
sex CHAR(2),
age int,
hiredate date,
photo varchar(100),
resume varchar(100),
did int
);
create table dept(
did int primary key auto_increment,
dname varchar(30),
des varchar(100)
);
**5.简述线程的创建方式,线程的几种状态以及状态间的切换**
new RUNABLE running blocked dead
**6.简述 & 与 && 的区别
&并且 是位运算
&& 一般用这个 有短路
&和&&都是逻辑运算
**7.简述多态中向上转型、向下转型
向上转型自然转换 向下转换需要强转
**8.接口与抽象类
(1)接口可以被多重implements,抽象类只能被单一extends
(2)接口只有定义,抽象类可以有定义和实现
(3)接口的字段定义默认为:public static final, 抽象类字段默认是"friendly"(本 包可见)
**9.异常
Try:执行部分,产生异常
Catch:捕捉异常
Finally:不管有没有异常都执行
Throws:在方法声明处声明要抛出的异常,调用者必须对其进行处理。
Throw:抛出一个异常
在try中可以抛出异常,一般与声明的异常相同。
自定义异常要继承于Exception或Exception的子类
**10.set 和 equals()
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判 读两个Set是否相等
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两 个分离的对象的内容和类型相配的话,返回真值
1、什么是服务器
查看Apache的定义时,会发现,Apache为Web server,也就是Web服务器。
Web服务器是指能够为发出请求的浏览器提供文档的程序。服务器是一种被动程序,只有浏览器发出请求的时候才会响应。应用层使用的是HTTP协议。
2、Web服务器,Web容器和应用服务器的区别
Web Server,Web container和Application Server区别。
Web Server,Web服务器,同上面所说,Web服务器是指能够为发出请求的浏览器提供文档的程序。服务器是一种被动程序,只有浏览器发出请求的时候才会响应。应用层使用的是HTTP协议。目前最主流的三个Web服务器是Apache Nginx IIS。
3、Apache和Tomcat的区别
Apache指的是Apache HTTP Server。
stackoverflow里面的这个问题虽然被关闭了,但是有一个评论写的博客挺好的。
What is Tomcat? Is it a Web Server? What can Tomcat do? How is it different than Apache Web Server?
里面就讲到:
Tomcat是一个Servlet/Jsp容器,它同时也作为一个web服务器使用。
Tomcat = ( Web Server + Servlet container + JSP environment ),因为我们知道JSP也是转译为Servlet的,Tomcat接收请求之后,如果是JSP页面的话,Tomcat里面的JSP引擎可以将JSP转换为Servlet类。
从这里也可以看到,其实Tomcat既是Web服务器也是Web容器。