java开发工作三年你应该掌握的知识(持续更新)

javaWeb 同时被 3 个专栏收录
2 篇文章 0 订阅
2 篇文章 0 订阅
10 篇文章 0 订阅

一、java基础知识

1、java中常用的类有哪些?

Scanner、system、String、Integer、Arrays、Boolean、Math、Double、Character、Calendar、Random、BigIngteger、Arraylist、hashMap、Thread、Date、Iterator

2、java中常用的包有哪些?

Lang、IO、sql、util、awt、net、

3、Object类中常用的哪些方法?

toString、equels、hashCode、getClass、wait、notify、clone

4、String类中常用的方法?

Equels、charAt、indexOf、valueOf、substring、splid、toUpperCase、toLowerCase

Trim、replace、contains、compareTo、length

6、jdk(开发工具包)包括jre jre是运行环境,jvm是java虚拟机(.class文件在这里被识别通过虚拟机与操作系统解释执行) tomcat是web服务器,使得CLASS文件可以显示到网页或者提供后台运行 tomcat只是一种java应用服务器,所以它其中一定内置了JDK,用来编译运行java程序。

7、java中常见的异常?

Nullporint,illeaglearugment,outofindexof,classNoFound,airthmetic
Illeagleaccess(非法访问),SqlException,NumberFormat,JspException
IOException
error是由于系统错误,程序员无法解决的,如:内存空间不足,Java编译器不去检查他们
Exception类表示程序可以处理的异常,可以捕获且可能恢复
RuntimeException是由于程序代码问题,一般不try Catch 比如 NullPoint,outOfBound,numberFormat等异常
IOException (受检查的异常)这类异常必须try Catch,否则编译不通过
,这并不是代码的问题,而是应用程序外部出现的错误

8、动态代理是通过反射机制实现的 Java的反射机制是在编译并不确定是哪个类被加载了,而是在程序运行的时候才加载

9、反射提高了程序的灵活性和扩展性,降低耦合性,提高自适应能力。它允许程序创建和控制任何类的对象,无需提前硬编码目标类;

获取Class对象的三种方式
.class getClass class.forName(“包名.类名”)
.
Student stu1 = new Student();//这一new 产生一个Student对象,一个Class对象。
Class stuClass = stu1.getClass();//获取Class对象
System.out.println(stuClass.getName());
//第二种方式获取Class对象
Class stuClass2 = Student.class;
System.out.println(stuClass == stuClass2);//判断第一种方式获取的Class对象和第二种方式获取的是否是同一个
//第三种方式获取Class对象
try {
Class stuClass3 = Class.forName(“fanshe.Student”);//注意此字符串必须是真实路径,就是带包名的类路径,包名.类名
System.out.println(stuClass3 == stuClass2);//判断三种方式是否获取的是同一个Class对象
} catch (ClassNotFoundException e) {
e.printStackTrace();

Class stuClass = Class.forName(“fanshe.Student”)
获取构造 产生一个对象
stuClass.getConstructor().newInstance();/
Object o=obj.getConstructor().newInstance();
//获取变量
obj.getDeclaredField(“name”);
//获取成员方法
Method m=obj.getMethod(“setName”,String.class);
//执行方法 参数为调用的对象(获取有反射),一个是实参
m.invoke(obj, “123”);
java类的加载机制:
加载-验证-准备-解析-初始化
加载过程:
1、通过类名获取二进制字节流
2、将二进制字节流静态数据结构转换为方法区的数据结构
3、在堆中生成一个class对象,对方法区提供这些数据的访问入口。
10、工厂模式:比如 创建一个定长线程池 Excutors.newFixThreadPool

共同的接口 有一个抽象类实现了这个接口,其他普通类继承该抽象类
比较好的是通过反射来做工厂,可以增加扩展性 避免工厂被修改
装饰者模式://装饰者和被装饰者有共同的超类,装饰者必须将被装饰者作为构造参数,实现功能拓展
比如:用缓冲流来包装普通的输出输入流
单例模式:1、构造私有化
2、定义一个静态变量保存 new实例化的对象
3、提供一个共有静态的方法来返回该静态变量
代理模式:依赖反射来实现动态代理
适配器模式

11、数据库连接池:1、org.apache.commons.dbcp.BasicDataSource
2 、com.alibaba.druid.pool.DruidDataSource"
12、序列化:把Java对象转换为字节序列的过程。 (持久化对象到硬盘上,网络传输对象) 
反序列化:把字节序列恢复为Java对象的过程。
ObjectOutputStream代表对象输出流 writeObject()方法
ObjectInputStream代表对象输入流,readObject()方法
可以包装其他的文件输出流

13、线程池的创建、线程的生命周期、线程的安全?

ThreadPoolExecutor继承AbstractExecutorService实现ExecutorService继承Executor
execute()方法实际上是Executor中声明的方法,在ThreadPoolExecutor进行了具体的实现,这个方法是ThreadPoolExecutor的核心方法,通过这个方法可以向线程池提交一个任务,交由线程池去执行
 submit()方法是在ExecutorService中声明的方法,在AbstractExecutorService就已经有了具体的实现,在ThreadPoolExecutor中并没有对其进行重写,这个方法也是用来向线程池提交任务的,但是它和execute()方法不同,它能够返回任务执行的结果,
单一、可缓存、指定大小、周期性执行的
真正线程池的实现是通过ThreadPoolExecutor,ThreadPoolExecutor通过配置不同的参数配置来创建线程池
corePoolSize:核心池的大小 maximumPoolSize:线程池最大线程数,
keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止
workQueue:阻塞队列
threadFactory:线程工厂,主要用来创建线程;

newCachedThreadPool 带缓存的线程池 执行很多短期异步的小程序或者负载较轻的服务器

newFixedThreadPool:创建可容纳固定数量线程的线程池

newSingleThreadExecutor:创建只有一个线程的线程池,且线程的存活时间是无限的;

NewScheduledThreadPool:创建一个固定大小的线程池,线程池内线程存活时间无限制,线程池可以支持定时及周期性任务执行

一般需要根据任务的类型来配置线程池大小:
  如果是CPU密集型任务,就需要尽量压榨CPU,参考值可以设为 NCPU+1
  如果是IO密集型任务,参考值可以设置为2*NCPU
A:创建一个线程池对象,控制要创建几个线程对象。
B:这种线程池的线程可以执行: 做一个类实现Runnable接口。
C:调用submit()方法并将实现类作为参数,
D:shutdown()方法
线程的生命周期:创建线程对象—start()就绪----run运行----死亡
创建线程对象—start()就绪—sleep()—wait()/notify()—run运行—死亡
servlet生命周期: init() service() destory()

线程的安全:
同步代码块、同步锁
死锁:多个进程因竞争资源发生死锁 ,这些永远在互相等待的进程称为死锁进程
B:JVM的启动是多线程的,因为它最低有两个线程启动了,主线程和垃圾回收线程。
1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现;
2)synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁;
3)Lock可以让等待锁的线程响应中断,而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够响应中断;
4)通过Lock可以知道有没有成功获取锁,而synchronized却无法办到。
5)Lock可以提高多个线程进行读操作的效率

14、垃圾回收机制的原理?

垃圾回收机制有多重算法,我了解到jvm的垃圾回收机制是分代回收算法
新生代与年老带

15、callable和runable的区别?

(1)Callable规定的方法是call(),Runnable规定的方法是run().
(2)Callable的任务执行后可返回值(Future对象),可以抛出异常,而Runnable的任务是不能返回值得
(4)callable一般和线程池结合起来
如果你需要任务执行完返回一个特定的结果,那么就实现callable接口 使用submit来提交,如果你不需要返回一个特定的结果,那么最好实现runnable接口使用excute提交

16、syncrhoized和reentranrLock(实现类)比对

1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现;
2)synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁;
3)Lock可以让等待锁的线程响应中断,而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够响应中断;
4)通过Lock可以知道有没有成功获取锁,而synchronized却无法办到。
5)Lock可以提高多个线程进行读操作的效率

17、synchronized进行同步有四种情况:

第一种:修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;
第二种:修饰一个方法:被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
第三种:修饰一个静态的方法:其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
第四种:修饰一个类:其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。

18、JVM将内存区域划分为

堆、
申请空间和释放空间,存储的都是对象
栈、
Java栈是Java方法执行的内存模型,变量都在栈中,局部变量
方法区
在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。

19、java包装类有哪些?

Byte、character 、short 、Integer、Float、Double 、long、 Boolean

20、String类的特点

1.String类的字符串常量无法修改
2.==是地址比较 equals是值比较
3…直接赋值只会开辟一块堆内存空间,且字符串对象可以保存在对象池中以供下次使用;
采用构造方法会开辟两块堆内存空间,使用intern()方法后可以手工入池。
String.valueOf(int i) 整型转string
Integer.passInt(String i)String 转整型
valueOf() 方法返回指定对象的原始值
toString是以字符串的形式返回

21、重写equals方法的要求:

自反性,传递性,一致性,非空性,对称性
覆写equals方法就必须覆写hashCode方法,hash表中每个对象新创建之后
hashCode值就发生了变化 都是根据存储对象的hashcode值来进行判断是否相同的。

22、什么时候使用接口?什么时候使用抽象类?

通过接口建立行为模型,我有一个驱动接口,只声明我的驱动可以产生驱动的行为
向上转型为多个基类型 为了降低耦合度。增加可扩展性,无需修改以前的代码
自然吸气发动机和涡轮增压发动机接口可以继承驱动接口类,我还可以自然吸气+涡轮增压多重实现,
抽象类用来描述一个虚拟的物体

抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点:

a、抽象类不能被实例化只能被继承;

b、包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;

c、抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;

d、一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类;

e、抽象类可以包含属性、方法、构造方法,但是构造方法不能用于实例化,主要用途是被子类调用。

接口:Java中接口使用interface关键字修饰,特点为:

a、接口可以包含变量、方法;变量被隐士指定为public static final,方法被隐士指定为public abstract(JDK1.8之前);

b、接口支持多继承,即一个接口可以extends多个接口,间接的解决了Java中类的单继承问题;

c、一个类可以实现多个接口;

23、Java能不能多重继承?

继承不可能,但是 可以通过实现多个接口来达到效果

24.Java创建对象有几种方式?

New (class.forname)newInstance,clone,

25.有没有用过反射机制?反射机制的原理?

public static void main(String[] args) throws Exception{
         //1.获取类
         Class c = Class.forName("_12_CustomerService");
         //获取某个特定的方法
         //通过:方法名+形参列表
         Method m = c.getDeclaredMethod("login",String.class,String.class);
         //通过反射机制执行login方法.
         Object o = c.newInstance();
		 Object o =c.getConstractr.newInstance()
         //调用o对象的m方法,传递"admin""123"参数,方法的执行结果是retValue
         Object retValue = m.invoke(o, "admin","123");
         System.out.println(retValue); //true

26、Javabean和json怎么转换?

数字、字符串、布尔、数组、对象
将对象转为JSON同样使用JSONObject.fromObject(obj)方法
如果是一个List,转为JSON时需要使用JSONArray将对象转为JSON数组jsonArray.fromObject();
JSONObject.toBean()将json转为bean
Gson com.google.code.gson toJson fromJson

27.你对JAVA面向对象怎么理解;

我的理解是分类,当我们拿到一个功能需求的时候,可以在java中将其分成很多不同的对象,程序其实就是一大堆对象的组合,对象之间传递消息知道自己要做什么,x00000000000000000000而c偏向面向过程,他会完整的展示一件事物

28.用final修饰的类/方法/

Finnal修饰类 类不能被继承,修饰变量,变量就变成了常量,且只能被赋值一次,修饰方法,方法不能被重写;

29、Java代码怎么调用存储过程

CallableStatement call.set call.registerOut execute()

30.Socket通讯有没有用过
客户端:
1、socket
2、bw=new bufferWriter(new outputStreamWriter(s.getOutputSt))
3、bw.write(line)
服务端
1、server socket
2、Accept()
3、封装 bR=new BReader(new bufreader(ss.getinputSt()))
4、Br.readline
3、Socket通信的步骤
① 创建Socket
② 打开连接到Socket的输入/输出流
③ 按照协议对Socket进行读/写操作
④ 关闭输入输出流、关闭Socket
4、服务器端:
① 创建ServerSocket对象,绑定监听端口
② 通过accept()方法监听客户端请求
③ 连接建立后,通过输入流读取客户端发送的请求信息
④ 通过输出流向客户端发送乡音信息
⑤ 关闭相关资源
.
5、客户端:
.
① 创建Socket对象,指明需要连接的服务器的地址和端口号
② 连接建立后,通过输出流想服务器端发送请求信息
③ 通过输入流获取服务器响应的信息
④ 关闭响应资源

31.多线程是怎么使用的

Java中可以继承thread类
1:继承Thread类 2:重写run方法(封装任务) 3:实例化Thread类的子类对象 4:调用start方法开启线程(这个方法会调用run方法来执行任务)
实现runable接口
1:实现Runnable接口 
2:重写run方法(封装任务) 
3:创建Thread线程a 创建Runnable子类对象t  
4:将t作为参数传递给a(Thread有个构造方法是用来接收Runnable类型参数的;因为任务都封装在了Runnbale子类的run方法中,在开启线程的时候就要明确线程的任务,否则Thread会调用自己的run方法,Runnbale子类中的任务将永远不会被执行到)
5:开启线程(start)
1.将任务从Thread子类中分离出来,进行单独的封装;按照面向对象的思想将任务封装成了对象
2.避免了JAVA单继承的局限性

32、Java常见的设计模式,说5种?工厂,单例,装饰者模式,观察者模式命令,状态,外观
单例:简单点说,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器是被private修饰的,一般通过getInstance()的方法来获取它们的实例
观察者模式:对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
装饰者模式:对已有的业务逻辑进一步的封装,使其增加额外的功能,如Java中的IO流就使用了装饰者模式,用户在使用的时候,可以任意组装,达到自己想要的效果。
工厂:简单工厂模式:一个抽象的接口,多个抽象接口的实现类,一个工厂类,用来实例化抽象的接口
代理模式:动态代理:反射
开发模式,说5种?瀑布、迭代、敏捷、螺旋、
AOP的原理?怎么用的?在哪用的?

33、封装、继承、多态那个重要?
封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式,提高程序的安全性
继承:子类继承父类,可重写父类方法,私有属性和构造不可继承通过super显示调用父类的有参构造方法
多肽:1、继承的存在,2、子类重写父类方法,3、父类引用指向子类继承,没有继承就没有多肽
多肽好处:
能够引用父类的共性外,还可以使用子类强大的功能
可替换性。多态对已存在的代码具有可替换性
可扩充性,接口性。灵活性

**34、Jdk1.7和1.8的区别?**JDK 1.8 API包含了很多内建的函数式接口

35、Java的堆栈内存有何区别?

1 栈:为编译器自动分配和释放,如函数参数、局部变量、临时变量等等
2 堆:为成员分配和释放,由程序员自己申请、自己释放。否则发生内存泄露。典型为使用new申请的堆内容。
除了这两部分,还有一部分是:
3 方法区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量

36、接口和抽象类的区别?

接口和抽象类都不能new实例化
接口中的方法都是抽象的,抽象类里有抽象方法也有普通方法,
接口没有构造方法,接口中的变量都是public static finnal
java类是单继承的。classB Extends classA
java接口可以多继承。Interface3 Extends Interface0, Interface1, interface……

37、集合里面的linklist和Arraylist的区别?

Arraylist是 数组结构,查询快,增删慢 效率高
而数组是一块连续的内存空间,如果在数组的任意位置插入元素,必然导致在该位置后的所有元素需要重新排列,索引顺序,因此,其效率相对会比较低
Linkedlist是链表结构,增删快,查询慢
首先要通过循环找到要删除的元素。如果要删除的位置处于List的前半段,则从前往后找
相互引用的节点组成的双向链表,只需要改变前后节点的引用即可!

38、Java的数组和list有何区别?

List集合的底层就是数组,
数组只能存放类型一样的数据,基本数据或引用类型
List只能存放引用数据类型,

39、String、Stringbulider、stringbuffer的区别?

String内容不可变
StringBuffer和StringBuilder,stringBuffer相比较stringbulider线程安全,但是效率不高
String作为形式参数,与基本类型作为参数传递是一样的形参的改变不影响其实际参数
stringBuffer作为形式参数,实际值会改变

40、线程安全与非线程安全?

非线程安全是指多线程操作同一个对象可能会出现问题。而线程安全则是多线程操作同一个对象不会有问题。
线程安全必须要使用很多synchronized关键字来同步控制,所以必然会导致性能的降低。

41、集合怎么实现同步?集合能排序?

synchronizedList Collections.sort(集合名)自然排序,重写compareTo方法
Json有几种类型?
数字、字符和字符串、布尔类型、对象、null、数组

42、怎么理解高内聚低耦合的思想?

减少模块之间的联系,将相关度高的部分集中在一个模块中

43、Jdbc中怎么同时执行10条sql?

sm.addBatch(sql1);
sm.addBatch(sql2);

sm.addBatch(sqln);
sm.executeBatch();

44、怎么防止sql注入?

#{}是经过预编译的,是安全的;${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。

45、集合和数组的区别?

数组存储的是同一种类型的元素,数组长度固定,数组可以存储基本类型,或引用类型
集合可以存储不同的数据类型,集合长度可变,集合只能存储引用类型的

46、单例模式的懒汉模式和恶汉模式的区别?

懒汉单例模式在类加载时,不实例化该对象,调用方法的时候才会实例化 线程不安全,需要加synchronized
恶汉单例模式在类加载时,就实例化该对象,线程安全,运行快,加载慢

47、List、map、set?

List特点:元素有放入顺序,元素可重复 ,可以有多个null
Map特点:元素按键值对存储,无放入顺序
Set特点:元素无放入顺序,元素不可重复,只能有一个null hashSet可以去重复
LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢
ArrayList和Vector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低
Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet
SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现)
Query接口有一个实现类:LinkList
Map接口有三个实现类:HashMap,HashTable,LinkeHashMap
HashMap非线程安全,高效,支持null;HashTable线程安全,低效,不支持null
SortedMap有一个实现类:TreeMap

 Iterator<String> iterator = strList.iterator();//list.iterator()
        while (iterator.hasNext())  //判断集合中元素是否遍历完毕,如果没有,就返回true        {
            if (iterator.next().equals("string3"))
            {
                iterator.remove();  //iterator.remove()移除的是最近一次iterator.next()所获取的对象            }
        }
Iterator<Map.Entry<Integer,String>> it=map.entrySet().iterator();
        while (it.hasNext()){
            Map.Entry<Integer,String> entry=it.next();
            System.out.println("the key is:"+entry.getKey()+",and the value is:"+entry.getValue());

        }

for循环一般用来处理比较简单的有序的,可预知大小的集合或数组
foreach可用于遍历任何集合或数组,而且操作简单易懂,他唯一的不好就是需要了解集合内部类型
iterator是最强大的,他可以随时修改或者删除集合内部的元素,并且是在不需要知道元素和集合的类 型的情况下进行的(原因可参考第三点:多态差别),当你需要对不同的容器实现同样的遍历方式时,迭代器是最好的选择

48、存储过程在jdbc调用时返回什么类型数据?

CallableStatement

49、Map如何转换成json?

Gson

50、Xml用什么工具解析?

dom4j

51、你对敏捷模式是怎么理解的?

敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态

52、单例模式?

恶汉:
Public class singleTon{
Private singleTon(){ };
Private static s=new singleTon();
Public static SingleTon getSingleTon(){
Return s;
}
懒汉:
Public class singleTon1{
Private singleTon(){
}
Private static SingleTon instance=null;
Public static SingleTon synconize getSingleTon(){
If(instance==null){
instance=new SingleTon();
}
Return instance;
}

}		 

53、Io流读取

File file = new File(fileName);  
        BufferedReader reader = null;  
        try {  
            System.out.println("以行为单位读取文件内容,一次读一整行:");  
            reader = new BufferedReader(new FileReader(file));  
            String tempString = null;  
            int line = 1;  
            // 一次读入一行,直到读入null为文件结束  
            while ((tempString = reader.readLine()) != null) {  
                // 显示行号  
                System.out.println("line " + line + ": " + tempString);  
                line++;  
            }  
            reader.close();  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            if (reader != null) {  
                try {  
                    reader.close();  
                } catch (IOException e1) {  
                }  
            }  
        }  
写入
 try {  
            //打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件  
            FileWriter writer = new FileWriter(fileName, true);  
            writer.write(content);  
            writer.close();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
    }  

二、javaWeb部分知识

1、jsp九大内置对象及四大域?

Request、response、session、Page、pageContext、context、config、exception、out、
page域: 只能在当前jsp页面使用 (当前页面)
request域: 只能在同一个请求中使用 (转发)
session域: 只能在同一个会话(session对象)中使用 (私有的)
context域: 只能在同一个web应用中使用 (全局的)

2、JQuery中常见事件?

Click、doubleClick、blur、focus、onmouseover、onmouseout、submit、change、
Keydown、keyUp、scroll

3、maven常用命令?

Clean、package、test、eclipse、source、

4、Mvn package 打war包 到target 放到 Tomact中 webapp 目录下 重启tomcat

ssh连接远程服务器,通过xftp等方法,
vn archetype:generate–构建项目
mvn clean–项目清理
mvn test–项目单元测试的编译
mvn compile–项目源代码的编译
mvn package–项目打包
mvn install–发布项目提交到本地仓库
mvn deploy–发布项目到
mvn jetty:run–启动jetty容器
mvn eclipse:clean–清除eclipse的一些系统设置
mvn eclipse:eclipse–生成eclipse项目文件
mvn idea:clean–清除idea的一些系统设置
mvn idea:idea–生成idea项目文件
mvn dependency:tree–查看依赖树
mvn assembly:assembly–需要配assembly插件,可用于把指定文件进行打包 tar.gz,zip包//指定maven参数:
-DskipTests=true–默认不走单元测试

5、环境部署

我们对于 Java Web 项目在本地机器(无论是 Windows 还是 Linux)上的部署已经了然于心了,那么对于在云服务器上部署 Java Web 项目又是如何操作的呢? 其实很简单,还是离不开 Web 项目部署的那三点:
① 基础的 JDK 环境
② 一个 Web 服务器。如 Tomcat、JBoss
③ 一款数据库。如:mysql
对于云服务器上 Java Web 项目的部署,和平时在 Windows、Linux 下部署是一样的。最多也就是只能使用纯命令模式来操作而已,其实过程都一样。
2.1 环境准备
既然是 Java Web 项目的部署,首先自然需要配置好相关的环境。也就是:先在云主机上搭建好 Java 开发环境,如 OpenJDK 的安装、Tomcat 的安装、Mysql 数据库的安装。
2.2 项目部署
我们要部署 Java Web 项目,那就至少得将项目上传到云服务器。其实过程很简单,基本上也就是下面三个步骤:
① 打包上传:将项目打包成 war 文件,然后利用SFTP、FTP 文件传输软件传到远程服务器(在Eclipse中直接将项目导出为.war文件)。
② 将 war 文件移动到 Tomcat 目录下的 webapps 下。
③ 重启 Tomcat,访问我们的项目。
在这个过程中,我们需要注意。因为一般而已,作为一个 Web 项目,我们肯定是有数据库的使用的。那么数据库部分怎么办呢?其实,只需要将我们已有的数据库转储为 sql 文件,然后将 sql 文件上传到云服务器上执行即可。以 mysql 为例,如下操作:
① 转储为 sql 脚本,并上传:先在本地将我们项目使用的数据库转为 sql 文件,上传到云服务器上 (可以利用 Navicat 将数据库转储为.sql文件)。
② 执行 sql:然后进入 mysql 中执行该 sql 文件。(若服务器装有Navicat,可直接用Navicat执行.sql文件,执行前需要选中存放表的数据库,应该与代码中数据库连接语句包含的数据库名保持一致)

6、Mvn常用命令

Clean 清理
Package 项目打包工具 不走测试环境
Test 测试
Install 模块安装

7、session与cookie

Session:关闭浏览器就不存在了 session.timeout web.xml tomcat
Cookie:sessionid保存在cookie中cookie生命周期可以设置 (默认一周)
Application:tomcat服务器重启才会变化 整个应用程序
《include》静态include 直接拿过来 一起编译
《jsp:include》动态include,单独编译,然后拿过来

8、Jsp是特殊的servlet?为什么?

9、Ajax 基于安全的考虑,AJAX只能访问本地的资源,而不能跨域访问。

10、实现跨域的三种方式:

1、使用代理 httpClint
2、使用jsonP
3、Xhr2

11、JQ如何取值?

1: 根据class 、 id 取 input 标签的value 值 。
$(“#id”).val() $(“.class”).val()
2、根据class 、id 获取标签之间的内容:
$(“#id”).html() $(“.class”).html()
3、子界面获取父界面元素内容:
$(this).parents(“tr”).find(".msgTitle").html();
4、获取checked的属性
$(“input:checkbox[name=‘groupDepartIdsCheck’]:checked”).val()
5、获取下一个兄弟元素的值
$(“input:radio[name=‘projTeam’]:checked”)[0].nextSibling.nodeValue;

根据class 、 id 取 input 标签的value 值 。
jQuery : $(".className").val(); $("#idName").val();
javaScript : document.getElementById(“idName”).value;

       2:  根据class 、id 获取标签之间的内容:如 <span> 、<lable> 、<div> 。
             jQuery     : $("#idName").html(); $(".className").html();
             javaScript : document.getElementById("idName").innerHTML ;
   
      3: 获取<select id='selectId'> <option value='selectValue'>  选中值:
             jQuery     : $("#selectId").val();
             javaScript : document.getElementById("selectId").value;
   
      4: 获取<img > 的 src 内容 :
            jQuery     : $("#imgId")[0].src;
           javaScript : document.getElementById("imgId").src;
   
      5:子界面获取父界面元素内容:
             5.1 (标签间的内容 ,如 <span> 、<lable> 、<div> )
                   JavaScript : window.parent.document.getElementById("currentPage").innerHTML ;
                   JQuery     : $(window.parent.document).find("#IdName").text();
             5.2 (取 input 标签的value 值)
                   JavaScript : window.parent.document.getElementById("currentPage").value ;
                   JQuery     : $(window.parent.document).find("#IdName").val();



     6:子界面控制父页面跳转:

                  window.parent.location.href = “*” ;

12、你所用到的相关技术:

Ztree:后端需要拿到权限id和pid, name,grade 放入jsonArr中,前段直接使用el表达式获取解析父id来实现的
上传下载、
1、页面中使用file标签上传,
2、后台使用spring的MultipartFiler的transforto来转存文件,文件地址存入数据库中
3、后台使用io流来下载文件,
定时器、
1、任务类继承querzJobbean类
2、将任务类注入到trigger触发器中,指定执行时间
3、使用scheduler启动器执行触发器
日志
1、使用aop面向切面编程,spring.xml中配置《aop:aspectj-autoproxy》使用@aspact注解
2、采用@around注解通知 excution拦截service业务层的方法,
3、Joinpoint.process来保留service方法的返回值
aop技术、
文件导出 这种方法的原理是通过改变jsp的头文件类型来实现的。帮我们把jsp页面的table转为excle或world
Jsp
<%@ page contentType=“application/msexcel” %>
//独立打开excel软件
response.setHeader(“Content-disposition”,“attachment; filename=MyExcel.xls”);
//嵌套在ie里打开excel
response.setHeader(“Content-disposition”,“inline; filename=MyExcel.xls”);
在页面前端直接点击标签访问controller 如果是导出需要判断expor参数的值用来 判断返回的是哪个页面
事物

13、checkbox

1.Jquery熟悉不? 怎么去取消绑定事件?如何把checkbox复选 框全选和反选.写下来也行!
Unbind.(“click”)
KaTeX parse error: Expected 'EOF', got '#' at position 3: (“#̲selectALl”).cha…(this).attr(“checked”)
If(flag){
$(“input:checkbox[name=’checkss’]”).attr(“checked”,false)
})else{
$(“input:checkbox[name=’checkss’]”).attr(“checked”,true)
}

<input type="checkbox" id="all" />全选<br />  
<input type="checkbox" name="sub" />image1.jpg<br />  
<input type="checkbox" name="sub"/>image2.jpg<br />  
<input type="checkbox" name="sub"/>image3.jpg<br />  
<input type="checkbox" name="sub"/>image4.jpg<br />  
<script type="text/javascript">
      $(function() {  
        $('#all').on('click',function(){
            if(this.checked) {
                $("input[name='sub']").attr('checked',true);
            }else {
                $("input[name='sub']").attr('checked',false);
            }
        });
     });  
</script>

2.Ajax怎么实现同步? async

14、Aop的原理是动态代理

动态代理是通过反射机制实现的 Java的反射机制是在编译并不确定是哪个类被加载了,而是在程序运行的时候才加载

15、Doget和dopost区别?

Doget用来处理使用显示提交的数据、post用来处理隐式提交

16、说一下Spring常见的注解?用注解还是配置文件?

@service @autowired @requestMapping @responseBody @controller

17、Mybatis核心? 对象关系映射

18、你们项目当中Aop和Ioc怎么使用的?怎么体现的?

Aop思想主要体现在日志这块,ioc控制反转整个项目依赖这种思想
a、接口注入;
b、setter方法注入;
c、构造方法注入;

d、注解方法注入;
19、分别说一下mysql和oracle和sqlservice分页?

20、SpringBoot和普通框架的区别?

1.内嵌了如Tomcat,Jetty和Undertow这样的容器,也就是说可以直接跑起来,用不着再做部署工作了。
1.无需再像Spring那样搞一堆繁琐的xml文件的配置;
1.可以自动配置Spring;

21、SpringBootAppcation注解的作用?

@Configuration:表示将该类作用springboot配置文件类。
@EnableAutoConfiguration:表示程序启动时,自动加载springboot默认的配置。
@ComponentScan:表示程序启动是,自动扫描当前包及子包下所有类。

22、RequestMapping 和 GetMapping 的不同之处在哪里

RequestMapping 具有类属性的,可以进行 GET,POST,PUT 或者其它的注释中具有的请求方法。
GetMapping 是 GET 请求方法中的一个特例。它只是 ResquestMapping 的一个延伸,目的是为了提高清晰度。

23、你们项目当中有没有用过事务?怎么使用的?

1、spring.xml中开启并配置事物
1.
2.25.
3.26.
4.27.
5.28.
6.29.
7.30. <tx:annotation-driven transaction-manager=“transactionManager”/>

2、transational作用在serviceImp层的方法 注入了dao接口 然后调用方法 中间加tryCath
1./**
2. * @Transactional中的的属性 propagation :事务的传播行为 isolation :事务的隔离级别 readOnly :只读
3. * rollbackFor :发生哪些异常回滚 noRollbackFor :发生哪些异常不回滚
4. * rollbackForClassName 根据异常类名回滚
5. */
6.@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, readOnly = false)
7.public class AccountServiceImpl implements AccountService {
8. // 注入转账的DAO
private AccountDao accountDao;

24、SpringBoot优势?常见注解?(五个注解,分别作用)

@springBootApplication
@configuration ioc容器配置
@enableAutoConfiguration 将
所有符合条件的bean,加载到配置到ioc容器中
@CompentScan 扫包
@Configuration配置
@responsbody 将返回结果直接填充到http响应体中
@requestMapping 接受请求url
@controller 定义控制层,负责将请求转发到service接口中
@rescontroller
@ResponseBody和@Controller的合集。

25、Mybatis缓存和hibnate缓存有什么区别?

mybatis一级缓存基于session 二级缓存基于mapping
Hibanate 一级缓存基于session,二级缓存基于sessionFactory

26、Dubbo和webService区别?

duboo是阿里巴巴做的,dubbo 可以 和 Spring框架无缝 集成。

27、前端框架,ajax如何实现异步,能不能跨域;返回json怎么解析?

var request = new XMLHttpRequest();浏览器把请求交给代理对象—XMLHttpRequest(绝大多数浏览器都内置了这个对象),由代理对象向服务器发起请求,接收、解析服务器响应的数据,并把数据更新到浏览器指定的控件上。从而实现了页面数据的局部刷新。无需加载整个页面来展示服务器响应的数据
var result = xhr.responseText;解析json
可以跨域,
1、使用代理,先在后台获取
2、

28、AJAX访问后台的proxy.php文件

3、使用jsonp(创建一个script标签,通过src属性来访问远程文件)

$.getJSON("https://www.runoob.com/try/ajax/jsonp.php?jsoncallback=?", function(data) {

4、Xhr2 html5

29、Spring最大的优势是什么?

Ioc 机制,节省内存、降低耦合性、分层思想(持久层、业务层、表示层)

30.SpringMVC与普通的MVC有什么区别?

1、Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了
2、SpringMVC是方法级别的拦截,一个方法对应一个Request上下文,所以方法直接基本上是独立的,独享request,response数据。
3、SpringMVC的Controller Bean默认单例模式Singleton,所以默认对所有的请求,只会创建一个Controller

31.myBatis中怎么实现一对一和一对多;maBatis有什么缓存?

一对一 对象属性,xml配置association
一对多,集合属性collection

32、SpringBoot的优势;为什么叫微服务;

SpringBoot并没有在Spring的基础上引入新的东西,只是在Spring和一些第三方的框架(比如:Mybatis、Redis、ActiveMQ…)的基础上进行了整合和封装,基于约定大于配置的思想,通过定义的注解替代了Spring应用中的.xml配置文件,使得项目的搭建、开发和部署变得简单。
真正实现0配置,快速开发,使程序员将精力集中到业务中

33、了解哪些关系型数据库和非关系型数据库?

1.关系型数据库通过外键关联来建立表与表之间的关系,

34、用过那些服务器?tomcat端口号怎么修改?
Server.xml

35、项目中怎么解决乱码问题?

1、项目web.xml中配置编码过滤器(Filter)
2、项目 属性(Properties)-Resource 中更改为UTF-8
3、数据库连接 url加入
4、修改数据库字符集
5、jsp页面设置charset
6、tomcat 服务器-config-server.xml

	   <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>

36.你对spring的IOC\AOP怎么理解

Ioc就是spring依赖注入,控制反转,容器主动将资源推给组件,
Aop就是面向切面编程,是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分。更有逻辑感,隔离性强

37、Aop主要运用到什么地方

事物管理、日志记录

38、项目中的AOP是怎么实现的

日志 spring.xml中配置aop:aspactj 参数joinPoint, around环绕通知 (excute)切入点是service

39.Jsp内置对象有哪些

Request,response,page,pageContext,out,exception,
Session(打开一个绘会话),application(application对象生命周期更长,类似于系统的“全局变量”。),config(获取服务器的配置信息)
四大域
page域: 只能在当前jsp页面使用 (当前页面)
request域: 只能在同一个请求中使用 (转发)
session域: 只能在同一个会话(session对象)中使用 (私有的)
context域: 只能在同一个web应用中使用 (全局的)

40.常用的JSTL标签有哪些core,fmt,function标签库

<c:out><c:set><c:if><c:choose><c:when><c:redirect><c:foreach><c:import>
区别:就是像HTML标签 还带冒号的就是JSTL
带美元符号$和花括号的就是EL表达式。

41.C:foreach怎么判断是最后一个值
varStatus=v; v.islast()

42.项目当中高并发是怎么解决的

1、采用分布式应用设计
2、分布式缓存数据库(读写分离)
3、代码优化(多线程)
4、sql优化
5、动静分离
6、分表分库

43.简单介绍一下MyBatis ORM的原理

44.常见的ORM关系有哪些

对象关系映射,一对一,一对多,多对一,多对多
Association,collection

45.Mybatis中resultmap和resultype的区别

如果javabean中的属性与数据库中的字段不一致,就需要resultmap来一一映射,

46.jQuery ajax怎么实现异步/同步请求
Async true or async false

47.项目中事物怎么运用

Acid 原子性 (atmic)
多个事情组成一个单元,要么同时成功或失败,不能只运行其中一个
一致性 (current)
事务处理要将数据库从一种状态转变为另一种状态。一旦提交了修改数据,那么其它人读取这个数据,也是被修改后的数

隔离性 (island)
在事务处理提交之前,事务处理的效果不能由系统中其它事务处理。多个用户,不能同时读写同一个数据,应该有先后顺序,在数据库中是一个一 个事件地运行,如果事件的条件不满足,后续事件就回滚
持久性(durid)
事件一旦提交成功,数据就发生了变化

1、spring.xml中开启并配置事物
2、transational作用在serviceImp层的方法 注入了dao接口 然后调用方法 中间加tryCath

48.webService是干什么的

是RPC的一种实现,用于远程方法调用,
只要把你的商务逻辑暴露出来,成为Webservice,你就可以让任何指定的合作伙伴轻松的调用你的商务逻辑

1、server必须发布服务。
2、在client和server两端都需要有模块来处理协议和连接。
3、server发布的服务,需要将接口给到client
总结:

如何发布一个Web服务:

a,在类上添加@WebService注解

(注:此注解是jdk1.6提供的,位于javax.jws.WebService包中)

b,通过EndPoint(端点服务)发布一个WebService

(注:EndPoint是jdk提供的一个专门用于发布服务的类,该类的publish方法接收两个参数,一个是本地的服务地址,二是提供服务的类。位于 javax.xml.ws.Endpoint包中)

c,注:

类上添加注解@WebService,类中所有非静态方法都会被发布;

静态方法和final方法不能被发布;

方法上加@WebMentod(exclude=true)后,此方法不被发布;

(3)客户端访问发布的服务
根据WSDL文档来在客户端编写代码,访问发布的服务
Wsimport.exe是JDK自带的通过soap协议解析wsdl文件获得
包和类,
徽标键+R 进入在eclipse中项目的src目录,将
wsimport -keep http://localhost:8088/myscore?wsdl
最后创建访问的类
//new一个查询的类
WeatherWS weatherWs = new WeatherWS();
//返回一个服务器端的接口,即代理对象
WeatherWSSoap weatherWsSoap = weatherWs.getWeatherWSSoap();
//代理对象中的一个通过地址查询天气的方法
ArrayOfString weather = weatherWsSoap.getWeather(“西安”, null);
//ArrayOfString相当于一个工厂,其对象中封装了一个List,也就是天气详细信息
List list = weather.getString();
System.out.println(list);
//也可foreach,(内置key value的形式展示信息)
for (String string : list) {
System.out.println(string+"======");
}
使用Ajax调用  
  使用Ajax调用的话,流程也很简单,从前台发送Ajax请求,然后调用ws服务,再将结果返回给前台。但是Ajax不支持跨域调用,也就是说我们发布的ws服务,如http://192.168.1.105:6666/ws是不行的,Ajax要想正常调用必须通过wsimport命令转化的java bean,换句话说,我们需要在中间加上一个servlet(或者struts,springmvc),在servlet中调用ws服务,

49.SpringMVC是怎么运用的

Request-dispaterServlet-adapterHander-handerMapping
-hander(modAndview)-dispaterServlet-jsp-response

50.Springboot相比SSM来说有哪些优势

1.内嵌了如Tomcat,Jetty和Undertow这样的容器,也就是说可以直接跑起来,用不着再做部署工作了。
2.无需再像Spring那样搞一堆繁琐的xml文件的配置;
2.可以自动配置Spring;
3.只是在Spring和一些第三方的框架(比如:Mybatis、Redis、ActiveMQ…)的基础上进行了整合和封装,基于约定大于配置的思想,通过定义的注解替代了Spring应用中的.xml配置文件,使得项目的搭建、开发和部署变得简单。
pom.xml文件中默认有两个模块:
spring-boot-starter:核心模块,包括自动配置支持、日志和YAML;
spring-boot-starter-test:测试模块,包括JUnit、Hamcrest、Mockito。

51、Spring中几种常用的注解?为什么要用注解?为什么方便?

要想使用Spring注解,必须要在applicationContext.xml中配置context:annotation-config和context:component-scan这两个标签
方便了代码的书写,减少了程序员的配置复杂程度。使程序员能够将
更多的精力放在业务层!

52、SpringIOC用到了反射那种方面?

通过反射实例化对象,存入到Spring的bean容器中。
依赖注入和控制反转?
应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC/DI容器来创建并注入它所需要的资源了。

53、SpringMVC 中@responsebody干什么的?

@service @controller @autowired @requestMapping @responseBody
@responseBody
将内容或对象作为 HTTP 响应正文返回 常用于Ajax交互中,不跳转页面

**54、Jstl有哪些标签?**Core function fmt

<c:if><c:foreach><c:choose><c:when><c:otherwise><fmt:><fn:
servlet的生命周期的初始化方法是什么?Init()

55、Jquery怎么取id为1 的值?$(#45454545). attr(‘id’);

设置input框的只读?ReadOnly
Ajax的返回函数?Success
Div块的事件绑定?$(“”).on(“click”,function(){})
Unbind
Css内联和外联?padding、margin
Ztree的原理?通过解析json父子关系

56、伪静态的好处?如何做

1、可以提高网站的访问速度
2、提高安全性,美化url
3、有利于搜索引擎抓取和索引,
1、架包–web.xml中配置urlrewrite过滤器(最下面防止被其他fileter覆盖)
2、添加urlrewrite.xml(配置按照一定的规则from to) 到工程的WEB-INF目录下。

57、反射机制+动态代理

Java里面怎么理解脏读?java数据的读取不正确,可以通过控制事务解决
MySql有没有序列?没有,只有自增列
Tomcat的端口号能改不?Severce.xml
WebService的好处?
Svn回到上个版本? Revert
Maven的核心做了什么?
Spring的定时任务?
Mybatis的动态sql?

58、Mybatis的insert语句一次性插入一个list?

Foreach 拼接

59、ssh和ssm的区别?

ssm 是spring、springMVC、mybatis
Mybatis是一个持久层框架,它只负责与关系数据库的操作。
SpringMvc:显示层,前后端交互 传输数据
Spring:Spring是一个业务层框架,是一个整合的框架,能够很好地黏合表示层与持久层
Ssh是spring、struts、Hibernate
都是用了spring的注入机制管理组件,springMVC和Struts2都是前端控制器,但springmvc配置更为简洁,struts2是标准的mvc模式
Mybatis 和Hibernate都是orm映射工具,mybatis半自动化的 一半是sql一半是对象,比较灵活,对数据库兼容性要求比较高,hibername全自动化,无序编写sql,但是不够灵活,

60、Sqlsession的工厂干什么的?
一种连接池管理类,每次的数据操作都将由连接池来分配连接后进行
Spring的IOC原理?
AOP的通知?@advice
@before @after @around @afterReturnning @AfterThrowing

61、Servlet的生命周期结束调的方法?

Init()初始化
Service() doget doPost()方法
Destory()

62、怎么导出表格? Poi、itext、jsp(content-disposition)、

63、Html的隐藏域有什么用?Hidden

隐藏域在页面中对于用户是不可见的,在表单中插入隐藏域的目的在于收集或发送信息,以利于被处理表单的程序所使用,全局变量

64、Tomcat的端口可以随时改变?

可以,在服务器Service.xml中更改

65、Java的开闭原则?开指接口,继承等的扩展,闭指封装好的代码不允许修改

单例模式有何用?
单例模式能够保证一个类仅有唯一的实例,并提供一个全局访问点。

66、Json,ajax,jquery如何进行交互的?

使用jquery从页面拿值 通过ajax将值转为json 类型,传递到后端处理
后端返回json 执行回调函数,或error函数,实现局部刷新 页面不变
Jdbc如何防止sql注入?使用#{}预编译

67、如何把jsp页面提交到后台?

Form表单,ajax,window.location,A标签

68、SpringQuartz怎么实现定时任务?

Quartz(需要额外的Jar包quartz-1.5.2.jar):
1)任务类继承QuartzJobBean,实现executeInternal()定义工作任务。
2)将任务类注入Spring的触发器SimpleTriggerBean或CronTriggerBean,指定任务执行时间。
3)通过启动器schedulerFactoryBean加载触发器。

69、Mybatis的动态sql怎么写?

标签 foreach标签

70、Json和xml的区别?

解码难度:JSON的解码难度基本为零,XML需要考虑子节点和父节点;
数据体积方面:JSON相对于XML来讲,数据体积小,传递的速度比较快;
数据交互方面:JSON与javascript的交互更加方便,更容易解析处理,更好的数据交互;
传输速度方面:JSON的速度远远快于XML。

71、JQ绑定事件?

Click keydown
Onmouseover keyup
Onmouseout blur
Submit force
DoubleClick scroll
Change select

72、Strus2和springmvc的区别?

@Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用,通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径(不会跳转),而是直接写入HTTP 响应正文中
Struts2是基于类开发的,传递的参数是通过类的属性传递(属性驱动和模型驱动),所以只能设计成多例prototype
SpringMvc是基于类中的方法开发的,也就是一个url对应一个方法,传递参数是传到方法的形参上面,所以既可以是单例模式也可以是多例模式singiton
SpringMVC集成了Ajax,使用非常方便,只需一个注解@ResponseBody就可以实现,然后直接返回响应文本即可
Struts2标准的mvc模型

73、Webservice用在什么方面?

是RPC的一种实现,用于远程方法调用,
只要把你的商务逻辑暴露出来,成为Webservice,你就可以让任何指定的合作伙伴轻松的调用你的商务逻辑 使用soap协议来解析wsdl文件得到数据

74、Ssm和ssh的理解?

Ssm框架主要是由spring springmvc mybatis三个整合而成
Ssh主要是由spring Struts 和Hibernate三个整合而成
共同之处都使用了spring的依赖注入管理组件
不同是struts和springmvc做前段控制器时 Struts配置多 标准的mvc框架
Mybatis和Hibernate做持久层框架时
两个都是orm映射工具
mybatis是半自动 一半sql 一半对象 对数据库兼容不太好 sql够灵活
hibernate 是全自动 全对象 对数据库兼容好 不够灵活 hql语句
轻量级框架,配置少

75、Mybatis的两级缓存?

一级缓存是基于session 二级缓存基于mapping
Habitnate 一级缓存基于session,二级缓存基于sessionFactory

76、Jsp从后台拿到list遍历?

1.引用jstl标签<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
使用<c:foreach><c:foreach/>

77、Servlet的生命周期?

•Servlet 通过调用 init () 方法进行初始化。只创建一次
•Servlet 调用 service() 方法来处理客户端的请求。doGet、doPost、doPut、doDelete
•Servlet 通过调用 destroy() 方法终止(结束)。
•最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

78、表单的隐藏域是干什么的?

用于提交该数据到服务器,但在页面不显示该数据
Jdbc一次执行多条sql语句?一次执行向多张表插入数据?
Statement的executeBatch()方法的作用是将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组

79、Mysql分页:通过每页显示条数和当前页可以算出下标位置
通过每页显示条数和总条数(可查询)可以算出总页数
最后封装每页显示条数、当前页、总条数、结果集、url、查询条件

80、简单的用户管理设计

用户管理、
用户名、密码、验证码进行登录
如果用户名和密码都正确,
登录成功之后,查询当前用户所属的角色和权限。
输出:将用户对象和用户的权限信息,存入session中。
用户列表可以增删改查、分配权限、分配角色、启用、禁用

三、数据库相关知识

1、如何合理建索引?

1、较频繁的作为查询条件的字段应该创建索引.
2、 更新非常频繁的字段不适合创建索引
3、表的主键、外键必须有索引(原因是如果没有索引,插入数据时会锁住整张表,而不是特定的行,这样高并发时就有性能问题);没有高并发可以不用,索引也是需要开销
4、经常与其他表进行连接的表,在连接字段上应该建立索引;

2、主键,外键,索引的区别?

1、主键是唯一标识一条记录,不能有重复的,不允许为空;用来保证数据完整性;只能有一个;
2、表的外键是另一表的主键, 外键可以有重复的, 可以是空值;用来和其他表建立联系用的;一个表可以有多个外键;
3、索引是该字段没有重复值,但可以有一个空值;是提高查询排序的速度;一个表可以有多个惟一索引
Normal、Unique、Full text

3、一个存储过程的例子:

	create procedure myproc() 
begin 
declare num int; 
set num=1; 
while num <= 100000 do 
insert into new_table_test values(num,2,3); set num=num+1; 
end while;
 end; 

CREATE  PROCEDURE `GET-USER-NAME`(
    in uid int,out username varchar(20)
    )
BEGIN
		select user_name into username from user_info where user_id=uid;
    END$$

CREATE FUNCTION `userName`(userid INT) RETURNS VARCHAR(100) CHARSET utf8
BEGIN
	SET @userId=userid;
	SET @userName='';
	SELECT user_code INTO @userName FROM user_info WHERE user_id=@userId;
	RETURN IFNULL(@userName,'');
    END$$

2:执行存储过程: call myproc();
3: 此时查询一下数据,就有100000条数据: select * from new_table_test

4、Nosql非关系型数据库的一种是redis

5、MYSQL跟Oracle数据库的区别?

(1)对事务的提交
MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交,需要在写commit;指令或者点击commit按钮
(2) 分页查询
MySQL是直接在SQL语句中写"select… from …where…limit x, y",有limit就可以实现分页;第一个参数是当前下标位置 开始为0,第二个参数是每页显示条数
(2)而Oracle伪列ROWNUM和嵌套查询
(3)最重要的区别
MySQL是轻量型数据库,并且免费,没有服务恢复数据。
Oracle是重量型数据库,收费,Oracle公司对Oracle数据库有任何服务
(4)主键 MySQL的主键可以设置自动增长,Oracle中没有自动增长,可通过序列来实现

6、多个服务器的session共享? 使用redis 将数据放到内存中

7、数据库的三范式?

1、每一列属性都是不可再分的属性值,确保每一列的原子性
2、一行只做一件事情
3、每个属性都与主键有直接关系

8、如何提高数据库的性能?

1、建立索引
2、分表分库
3、使用存储过程 4、增加缓存5、读写分离

9、项目中有没有用过缓存?

redis有几个数据库?redis有哪些数据类型? hash string list set sortset
string :Get set mget mset substr append del key1
hash :hget hset hmget hmset hdel
list: lpush lpop lrem (lindex mylist 2)

Split substring trim replace charAt indexOf valueOf
大小写 length
默认16(0-15)个数据库,key value格式的数据
–string 字符串
–list 列表
–set 无序集合
–sorted set 有序集合
–hash
10、项目中怎么用的redis?
存取list jedis
redis持久化方式:rdb和aof
rdb是存快照,恢复快,性能好
aof是存日志,记录比较详细,性能相对差

11、有没有用过存储过程,在项目中怎么使用的

1.//创建存储过程的对象
2.CallableStatement c=conn.prepareCall("{call getsum(?,?)}");
3.//给存储过程的第一个参数设置值
4.c.setInt(1,100);
5.
6.//注册存储过程的第二个参数
7.c.registerOutParameter(2,java.sql.Types.INTEGER);

1.//执行存储过程
2.c.execute();

12.你对三范式怎么理解

1、每一列属性都是不可再分的属性值,确保每一列的原子性
2、一行只做一件事情
3、每个属性都与主键有直接关系

13、Oracle数据库表中随机取出10条数据?Sample

**14、Union和union all的区别?**差集干什么用?Union 有去重功能,union all不去重

15、Oracle随机取数据?Sample ceil(x):返回大于x的最小整数

floor(x):返回小于x的最大整数
mod(x,y):返回x与y的模

rand():返回0-1之间的随机数 select round(rand()*100);

16、数据库怎么加密?

Md5加密

17、存储过程的参数类型问题?

In 表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
OUT 输出参数:该值可在存储过程内部被改变,并可返回
iNOUT 输入输出参数:调用时指定,并且可被改变和返回

18、Rowid和rownum的区别?

二者都是伪列,rownum是输出结果集进行排序,会发生变化,rowid是物理地址,不会发生变化

19、sql优化:

1、建立索引
1、左联接或者内连接查询代替子查询
2、避免进行全表查询,小表在后,大表在前
使用EXISTS替代or 子表大主表小用exist,子表小主表大用in的原则就可以.
3、建立索引(唯一索引,主键索引,全文索引,index)
4、少用%

1、慢查询
2、索引
3、拆分表

20、1、用 BEGIN, ROLLBACK, COMMIT来实现

BEGIN 开始一个事务
ROLLBACK 事务回滚
COMMIT 事务确认
2、直接用 SET 来改变 MySQL 的自动提交模式:

SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交
执行计划使用explain sql查询。

编写顺序与执行顺序分析

一条完整的sql语句编写流程应该如下:

select distinct 查询字段 from 表名 JOIN 表名 ON 连接条件 where 查询条件 group by 分组字段

having 分组后条件 order by 排序条件 limit 查询起始位置, 查询条数

但是在mysql实际执行读取的过程中,它的顺序发生了变化:

from 表名 ON 连接条件 JOIN 表名 where 查询条件 group by 分组字段

having 分组后条件 select distinct 查询字段 order by 排序条件 limit 查询起始位置, 查询条数
  Oracle分页:
  1、普通查询:

select * from table_Name t order by active_count desc;
 2、查询第一条记录:
select *
from (select * from table_Name order by active_count desc)
where rownum = 1; 
3、查询前3条:类似Sqlserver中的TOP 3
select *
from (select * from table_Name order by active_count desc)
where rownum <= 3;
4、查询第2至第3条记录:
select *
from (select t.*, rownum as no
from (select * from table_Name order by active_count desc) t)
where no between 2 and 3
mysql开启事务:
1、用 BEGIN, ROLLBACK, COMMIT来实现

BEGIN 开始一个事务
ROLLBACK 事务回滚
COMMIT 事务确认
2、直接用 SET 来改变 MySQL 的自动提交模式:

SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交

四、Git、SVN、Linux相关知识

1、linux中常见命令?

Cat(新建文件、查看信息)、date -s(修改时间)、hwclock(写入bios)、mkdir(创建文件)、shutDown、reboot、ls(查看目录中文件)、rm(删除)、cp(复制)、find(文件搜索)、chmod(设置读写执行权限)、chown(更改用户组名和用户名) 用户名:组名、tar(解压)、tail -n 100(查看尾部100条日志) 、tail -f/var/log/messages (实时查看日志)、grep(查找关键词)、ifconfig(网路配置)、vim 编辑文件、:wq 保存退出、ps -ef、777可读可写可执行 tailf
1、查看目录下的文件列表:hadoop fs –ls [文件目录]
hadoop fs -ls -h /lance

2、将本机文件夹存储至hadoop上:hadoop fs –put [本机目录] [hadoop目录]
hadoop fs -put lance /
多命令执行符号
在这里插入图片描述
例:ls;date;pwd 会按照顺序依次执行
ls && echo yes || echo no
ls命令执行正确打印yes执行错误打印no
管道符号:
在这里插入图片描述
例:ps aux | grep nginx
命令1: (ps aux)ps命令就是最基本进程查看命令,-a : 显示现行终端机下的所有进程,包括其他用户的进程;
-u :以用户为主的进程状态 ;x :通常与 a 这个参数一起使用,可列出较完整信息。
命令2:(grep nginx)从ps aux执行结果中寻找含有nginx的行

2、svn常见命令?

Commit、update、revert、resolved、export、log、add、lock、mkdir、checkout(搜索)、

3、git常见命令:

•git clone XXX//克隆一份代码到本地仓库
•git pull //把远程库的代码更新到工作台
•git push //把本地库的修改提交到远程库中
•git branch -r/-a //查看远程分支/全部分支
•git checkout master/branch //切换到某个分支
•git checkout -b test //新建test分支
•git checkout -d test //删除test分支
•git merge master //假设当前在test分支上面,把master分支上的修改同步到test分支上
•git log //查看当前分支上面的日志信息
•git diff //查看当前没有add的内容
•git reset --hard HEAD //撤销本地修改
Git revert 返回上次修改

4、tail -f filename 说明:监视filename文件的尾部内容(默认10行,相当于增加参数 -n 10),刷新显示在屏幕上。退出,按下CTRL+C。
5、tail -n 20 filename 说明:显示filename最后20行。
6、Svn的常用命令:commit、add file、copy、revert、update、resolved(冲突)、show log

7、linux服务器下重启mysql?
service mysql start
service mysql stop
service mysql restart

8、Linux环境下怎么重启tomcat?看tomcat日志怎么看?具体什么命令?

cd /usr/local/tomcat/bin
./shutdown.sh
ps -ef|grep java
kill -9 7010
ps -ef|grep java
./startup.sh

9、.Svn 和git区别

Svn是集中式版本控制
Git是分布式版本控制 本地仓库

10、你们用到SVN是怎么防止代码冲突

第一种方式:
A放弃自己修改的内容,进行Revert操作,使其test1.txt成为13版本的最初内容。然后update使其test1.txt成为14版本看好你 000000000000,再在14版本上修改提交。操作如下图:
C、手动解决:冲突发生时,通过和其他用户沟通之后,手动更新目标文件, editconfilect然后执行resolved filename来解除冲突,最后提交。
解决步骤如下:

11、Maven常见命令有哪些

maven clean 、eclipse、install、package、test、jar

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论
请先登录 后发表评论~
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏作者

YaSuoVery6^^

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值