随手记2

106 阅读18分钟

select

create table stu( xingming varcher(8), nianling int, gender varchar )

insert into stu values(1,2,2,2,2,)

update stu set xueli='大专' where lianxidianhua liske'11%'

delete from stu where where

逻辑与逻辑或,&and|既可以逻辑或者与运算,,一个的情况下他会计算这个b的值,但是有两个的时候他们不会计算哦,短路的情况下 update stu set xueli=dazhuan where llike '%li' jdbc的执行过程 加载驱动-测试连接-执行sql的语句-运行sql的语句-释放资源

十进制到二进制是吧------- 8421

前百分25% select top 25 percent *from stu

降序排列 select name gender from stu order by desc

select name gender from stu order by desc

sql注入 这个涉及到一个安全的问题,会损害了大众的利益的相关的

集合框架 conllection set---map---list

hashmap--hashtable

javabean是什么: javabean一种的规范,表达实体信息和规范,便于封装重用 wait和线程那个都是继承obj那个类

内存泄漏

spring的生命的bean的方式

where后面的第一个是没有and

常量池是放在堆里面的,这个里面到了1.8java就重新的定义了相关的一个空间叫做一个元空间

equalsIgnoreCase、equalsIgnoreCase在和字符串比较的时候不分大小写,

string、stringbuilder、string buffer 相同:都是final类,都不能被继承 不同点就是:stringbuilder线程不安全,在底层没有实现这个加锁的这个观念、string buffer是线程安全的加锁了,

final修饰类不能被继承、方法不能重写、属性不能被改变也就是变量变成常量

八大基本类型 int、short、char、double、boolean、byte、long、float 调用这个tospring这个方法进行一个基本数据类型转换成一个string类型 string str1=integer.tostring(3); string str2=Double.tostring(3.14); 在网页或者浏览器说有所看到的数据都是一个字符串类型的一个

jdbc这个开发的一个步骤~

加载驱动--获得连接对象--执行sql语句---运行sql语句--释放资源(关闭连接)

preparedstatement和statement相同点和不同点

语法上面----效率问题----安全问题

bootstrap:间接直观强悍的前端开发框架,让web开发更迅速简单。

软件结构一个是cs、bs javaweb就是bs软解结构 cs:qq软件------bs:B站

整个浏览器客户端数据库直接的交换和相关的

首先前端人员写出前端内容,一个登录的页面,然后通过一个form表单提交服务器端,服务器经过三层架构比如controller、mapper、service这个三层架构,然后在这个mapper里面去请求这个数据库,是数据库内的相关的字段查询或者修改或者更新出来,然后返回道浏览器端或者是客户端。在这个服务器端里面涉及到ssm框架,后面讲述仔细复习

静态网页和动态网页相关的知识~~~----

涉及jsp+servlet这个相关的知识要需要和这个一起来回答

servlet这个是基于Java上面开发的一个程序,小程序,目的就是为了相关给不同的用户拼接动态网页的组件,jsp本质就是servlet,同时他是一个用来处理客户端的请求、响应动态资源的给浏览器的

jsp:就是用Java语言和html语言开发动态资源的技术

详细DNS这个(Domain Name System)域名系统 首先因为我们要访问这个一个网站比如百度,但是知道百度的ip实在是太麻烦记住了,而且你还要记住好多的这个ip地址,所以这个时候就有了dns也就是域名解析所以这个样子做也就是为了更好的辨认~

常见的异常 NumberFormatException ArrayIndexOutOfException StringIndexOutOfException NullPointerException ArithmeticException 算数异常 除0 ClassCastException

自定义的异常,需要继承两个类,一个是exception还有一个是runtimeexception两个 抛异常,比如咱们抛出来一个年级的相关的异常,比如小于0咱就让他抛出这个异常~怎么写呢,写一个类调用继承这个exception这个然后在写一个entity封装几个属性,然后在这个类里面写

/*IllegalAgeException:非法年龄异常,继承Exception类/ class IllegalAgeException extends Exception { //默认构造器 public IllegalAgeException() { } //带有详细信息的构造器,信息存储在message中 public IllegalAgeException(String message) { super(message); } }

class Person { private String name; private int age;

public void setName(String name) {
    this.name = name;
}

public void setAge(int age) throws IllegalAgeException {
    if (age < 0) {
        throw new IllegalAgeException("人的年龄不应该为负数");
    }
    this.age = age;
}

public String toString() {
    return "name is " + name + " and age is " + age;
}

}

public class TestMyException { public static void main(String[] args) { Person p = new Person(); try { p.setName("Lincoln"); p.setAge(-1); } catch (IllegalAgeException e) { e.printStackTrace(); System.exit(-1); } System.out.println(p); } }

jre、jdk、jvm jdk:开发者所需要的工具包 jre:Java程序需要运行的环境 jvm:java虚拟机,Java程序是跑在这个Jvm上面的 jdk>jre>jvm

总结数据库里的基本增删改查语句怎么写??? creat table stu( name:zhangsan; age:23; ) insert into stu values(1,2,3,4,5) delete from stu where id=1; update stu set age=23,name=34 where id=2; select *from stu; select *from table limit 0,5;

抽象和接口

Arraylist和LinkedList

用到了那些注解有什么作用

springboot

session和cookie相同和区别

--------25--------

select name as name case when cargo='' then 1 else 0 end

线程池 实现两个接口:executor和executor service这个两个 而这个executor提供了四种线程一种是 1、需要创建的线程 2、创建一个单线程 3、创建一个固定大小的单线程 4、创建一个大小无限的线程池

executor service这个默认实现的是thread pool executor这个接口 而这个接口有这个相关的参数: corepoolsize:3--线程池的核心线程数,一般情况下不管有没有任务都会一直在线程池中一直存活, maximumpoolsize:7--线程池所能容纳的最大线程数,当活动的线程数达到这个之后,后续的新任务将会被堵塞。 keep alive time:4--控制线程闲置时的超时时长,超过则终止该线程。一般情况下用于非核心线程,只有在 ThreadPoolExecutor 中的方法 allowCoreThreadTimeOut(boolean value) 设置为 true时,也作用于核心线程。

线程池的关闭: shutdown不会的立即终止线程池,而是要等到所有的任务缓存队列中的任务都执行完成后才终止,但在不会接受闲的任务 shutdownnow:立即终止线程池,并尝试打断正在执行的任务,并且清空任务缓存队列,返会尚未执行的任务 什么是 Executor 框架? Executor框架在Java 5中被引入,Executor 框架是一个根据一组执行策略调用、调度、执行和控制的异步任务的框架。 无限制的创建线程会引起应用程序内存溢出,所以创建一个线程池是个更好的的解决方案,因为可以限制线程的数量并且可以回收再利用这些线程。利用 Executor 框架可以非常方便的创建一个线程池。 2)Executors 类是什么? Executors为Executor、ExecutorService、ScheduledExecutorService、ThreadFactory 和 Callable 类提供了一些工具方法。Executors 可以用于方便的创建线程池。

使用线程的两种方式:runnable和callable接口: callable这个是实现了这个call,runnable这个是实现类run call有返回值,能抛出异常,还能表示异步计算的结果,run反之

finalize这个方法,这个是放在这个object类中的方法,一旦GC准备好释放对象所占用的的存储空间,将先调用其finalize()方法,并在下一次GC回收动作发生时,才会真正回收对象占用的内存,所以一些清理工作,我们可以放到finalize()中。

单列模式:饿汉式和懒汉式 private static final singleton instance=new singleton

private singleton(){}

public static singleton getlinstance(){ return instance; }

private static singleton instance=null

private singleton(){}

pulic synchronized static singleton gentlintance(){

if(instance==null){ instance=new singleton() } return instance } }

代理模式分成两个模式一个是静态代理模式一个是动态代理模式

静态代理模式:可以划分成为一个比如必须实现的一个接口 动态代理对象:不需要自己去写代理对象,但是目标对象还是需要实现接口,也叫做jdk代理接口代理 动态代理模式里面又有一个叫做cglib代理,也叫做子类代理模式,JDK的动态代理有一个限制,就是使用动态代理的对象必须实现一个或多个接口。如果想代理不实现接口,就可以使用CGLIB实现。 Cglib代理要求:目标对象不能为final, 否则报错。 目标对象的方法如果为final/static, 那么就不会被拦截,即不会执行目标对象额外的业务方法。

#{} 使用#{}意味着使用的预编译的语句,即在使用jdbc时的preparedStatement,sql语句中如果存在参数则会使用?作占位符,我们知道这种方式可以防止sql注入,并且在使用#{}时形成的sql语句,已经带有引号,例,select * from table1 where id=#{id} 在调用这个语句时我们可以通过后台看到打印出的sql为:select * from table1 where id='2' 加入传的值为2.也就是说在组成sql语句的时候把参数默认为字符串。

使用{} 使用{}时的sql不会当做字符串处理,是什么就是什么,如上边的语句:select * from table1 where id={id} 在调用这个语句时控制台打印的为:select * from table1 where id=2 ,假设传的参数值为2 从上边的介绍可以看出这两种方式的区别,我们最好是能用#{}则用它,因为它可以防止sql注入,且是预编译的,在需要原样输出时才使用{},如, select * from tableNameorderby{tableName} order by {id} 这里需要传入表名和按照哪个列进行排序 ,加入传入table1、id 则语句为:select * from table1 order by id 如果是使用#{} 则变成了select * from 'table1' order by 'id' 我们知道这样就不对了。

io流: 字符输入流、输出流 字节输入流、输出流 这个inputstream是实现了reader这个抽象方法 这个outputstream是是实现了这个write这个抽象的方法 处理字节:InputStream OutputStream 处理字符:Reader Writer 刷新输出流(viod flush)、关闭输出流(viod close)

监听器原理 监听器首先是一个特定的Java普通的Java程序,监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。

反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制

九大内置对象:request response cofig out exception

bigdecimal使用的一个方法: BigDecimal b1 = new BigDecimal(d1); BigDecimal b2 = new BigDecimal(d2); return b1.subtract(b2).doubleValue();

总结七牛云上传图片的问题: 在七牛云上建立储存空间--在pom.xml里面进行一个添加的依赖---添加一个七牛云的图片操作工具类--因为每个人都要有一个密钥所以添加一个密钥的管理,然后将一个七牛云的一个处理的接口作为一个style然后进行一个后端和前端代码的一个调用

mybatis的一级缓存和二级缓存 一级缓存使一个hashmap本地缓存,其作用域是一个session,当你去查询了此语句的时候,第一次,等到第二次了然后就是先去这个二级缓存里面查,当这个session flush或者session close关闭掉,该 Session 中的所有 Cache 就将清空,默认打开一级缓存。 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需要实现Serializable序列化接口(可用来保存对象的状态),可在它的映射文件中配置

数据库的三大范式:原子性、唯一性、独立性 原子性:是指的表中的列不可再分,数据库中的每一列都是一个不可分割的基本数据,同一列中不能有多个值。 唯一性:表中必须要有主键,然后这个表中的非主键必须完全的依赖这个主键,不能只依赖一部分。 独立性:在这个唯一性的基础上,消除这个非主键对主键的依赖和传递,非主键必须直接依赖这个主键。

事务的几大特征:ACID,原子性、一致性、隔离性、持久性 原子性:是指的事物的包含的操作要命全部成功要命全部失败, 一致性:表示使数据库从这个一致性的状态转变到另一个一致性的状态,也就说一个是事务执行之前和执行之后都必须处于一个一致性的状态,举例,a和b取钱不管两个取多少次,两个人的钱数是没有发生改变的。 隔离性:比如使多个用户同时开启了一个表,然后数据库为每一个的用户开启的事务,不能背其他事务的操作所干扰。 持久性:指一个事务被提交了以后,这个数据库中提交的这个数据就是永久性的,不管在数据库中遇到了故障还是什么样的情况下都不会丢失提价事务的操作

讲一下这个事务的隔离的一个级别: 首先第一种是,第一种这个事务a撤销时,把已经提交的呃事务b的更新数据给覆盖了, 第二种,事务a覆盖了事务b已经提交的数据,造成了事务b所做的操作丢失,解决的办法就是对行加锁,只允许并发一个更新的事务。 第三种:脏读:a事务在读取b尚未提交的事务上进行一个操作,而b事务执行回滚,那么a读取到的数据就是个脏数据。解决的办法就是,在第一个提交事务前,任何一个事务不可读取或修改过的值,则可以避免该问题。 第四种:不可重复读取:一个事务在对同一行的数据进行一个读取两次,但是得到了不同点的结果,比如,a在读取事务的时候,b对其进行了一个修改,让a在读取事务的时候得到了两个不一样的值,解决的办法就是只有在修改事务完全提交的之后才可以读取数据,则可以避免这个问题。 第五种:幻象读,比如一个财务a在进行对b的账户进行一个100元的存取,然后事务b也在往里面进行一个存取10元,所以,最后财务a统计到了总的存款时110元。解决的办法就是,在财务的a进行一个存款的过程中,事务b和任何一个事务都不能进行一个的添加新的一个数据,则避免该问题的出现。 这里还牵扯了一个的悲观锁和一个乐观锁,知道有这个两个,他们两个的出现是为了:虽然这个事务的隔离级别能够解决大多数的问题,但是灵活性查,为此提出了悲观锁和乐观锁的概念。

spring的作用域 (1)singleton:默认作用域,单例bean,每个容器中只有一个bean的实例。 (2)prototype:为每一个bean请求创建一个实例。 (3)request:为每一个request请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。 (4)session:与request范围类似,同一个session会话共享一个实例,不同会话使用不同的实例。 (5)global-session:全局作用域,所有会话共享一个实例。如果想要声明让所有会话共享的存储变量的话,那么这全局变量需要存储在global-session中。

spring的生命周期 实例化---->属性赋值---->初始化----->销毁

游标Cursor:游标,就是游动的标识,可以充当指针的作用,使用游标可以遍历查询数据库返回的结果集中的所有记录,但是每次只能提取一条记录,即每次只能指向并取出一行的数据,以便进行相应的操作。当你没有使用游标的时候,相当于别人一下给你所有的东西让你拿走;用了游标之后,相当于别人一件一件的给你,这时你可以先看看这个东西好不好,再自己进行选择。

索引的分类:索引本质上就是一种通过减少查询需要遍历行数,加快查询性能的数据结构 普通索引:最基本的索引,没有任何限制 唯一索引:但索引列的值必须唯一,允许有空值,可以有多个NULL值。如果是组合索引,则列值的组合必须唯一。 主键索引:一种特殊的唯一索引,不允许有空值。 全文索引:全文索引仅可用于 MyISAM 表,并只支持从CHAR、VARCHAR或TEXT类型,用于替代效率较低的like 模糊匹配操作,而且可以通过多字段组合的全文索引一次性全模糊匹配多个字段。 组合索引:主要是为了提高mysql效率,创建组合索引时应该将最常用作限制条件的列放在最左边,依次递减。 聚簇索引:表中数据存储的物理顺序与索引值的顺序一致,一个基本表最多只能有一个聚簇索引,更新聚簇索引列上的数据时,往往导致表中记录的物理顺序的变更,代价较大,因此对于经常更新的列不宜建立聚簇索引 非聚簇索引:表中数据的物理顺序与索引值的顺序不一致的索引组织,一个基本表可以有多个聚簇索引。

(见上面的懒汉式和饿汉式) 单例和多例:单例 : 就是不管有多少个用户同时访问,只要能保证 new 关键字只被调用一次;那么你这个单例才是真正的单例; 多例 : 不断地new对象; spring默认是单例模式(意思是在系统初始化的时候,你的controller,sevice都会被spring自动创建一个对象,并且拥有只有这一个对象,你想要更多的对象,有两种方法,第一种是把单例改成多例,第二种是自己new一个); 题外话时间 : 如果是spring的注入对象,在studentController里面 user.setAge(20) 在teacherController的user.getAge 是可以得到20的.因为他们是一个对象;(前提是都是spring注入的user对象,而不是我们自己new出来的) 多例就是不断的new对象… 来一个请求new一个对象…来两个new两个… 例如Struts的action就是多例模式;

myisam和innodb的区别 Myisam ,批量插入速度快, 不支持事务,锁表 Innodb, 批量插入相对较慢,支持事务,锁行.

innodb的执行流程:

存储过程:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。

过滤器和拦截器: (1)过滤器(Filter):它依赖于servlet容器。在实现上,基于函数回调,它可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的,是用来做一些过滤操作,获取我们想要获取的数据,比如:在Javaweb中,对传入的request、response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者Controller进行业务逻辑操作。通常用的场景是:在过滤器中修改字符编码(CharacterEncodingFilter)、在过滤器中修改HttpServletRequest的一些参数(XSSFilter(自定义过滤器)),如:过滤低俗文字、危险字符等。 (2)拦截器(Interceptor):它依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上,基于Java的反射机制,属于面向切面编程(AOP)的一种运用,就是在service或者一个方法前,调用一个方法,或者在方法后,调用一个方法,比如动态代理就是拦截器的简单实现,在调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在调用方法后打印出字符串,甚至在抛出异常的时候做业务逻辑的操作。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。