1.sql顺序
顺序4:SELECT *(all),列名,运算符,distinct(除去重复记录)
顺序1:FROM 表名,视图,别名
顺序2:WHERE 条件表达式
顺序3:GROP BY 列名 having 条件表达式
顺序5:ORDER BY 列名 asc(默认升序)desc(降序)
2.位运算符号
按位与运算符(&)
参加运算的两个数,按二进制位进行“与”运算。
运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位与运算)
即 0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1。
按位或运算符(|)
参加运算的两个数,按二进制位进行“或”运算。
运算规则:参加运算的两个数只要两个数中的一个为1,结果就为1。
即 0 | 0= 0 , 1 | 0= 1 , 0 | 1= 1 , 1 | 1= 1 。
例:2 | 4 即 00000010 | 00000100 = 00000110 ,所以2 | 4的值为 6 。
异或运算符(^)
参加运算的两个数,按二进制位进行“异或”运算。
运算规则:参加运算的两个数,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。
即 0 ^ 0=0 , 0 ^ 1= 1 , 1 ^ 0= 1 , 1 ^ 1= 0 。
例: 2 ^ 4 即 00000010 ^ 00000100 =00000110 ,所以 2 ^ 4 的值为6
总结:
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1
~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
<< 左移 用来将一个数的各二进制位全部左移N位,右补0
>> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0
3.数组常用方法:
数组填充:
Arrays.fill(数组名,值)
Arrays.fill(数组名,开始下标,结束下标,值)
数组复制:
Arraycopy(数组a,开始复制下标,复制到数组b,开始复制下标,复制长度)
数组比较:
Arrays.equals(数组1,数组2)
数组排序:
Arrays.sort(数组)或者Arrays.sort(数组开始下标,数组结束下标)
数组中搜索指定元素
binarySearch(数组,指定元素)
binarySearch(数组,开始位置,结束位置,指定元素)
数组转化为字符串:
toString(数组类型,数组名)
4.字符串常用方法:
https://blog.csdn.net/xupt_rl/article/details/89474033
split()分割字符串返回字符串数组
trim()去除左右两端空格
5.Cookie规范:
Cookie大小上限4KB
一个服务器最多在客户端浏览器上保存20个Cookie
一个浏览器最多保存300个CookieCookie是通过HTTP
请求和响应头在客户端和服务器端传递的
6.JSP入门
6.1:java Server Pages是javaweb服务器端的动态资源,他与HTML
页面的作用是相同的,显示数据 和获取数据
6.2:JSP=html+Java脚本(代码片段)+JSP动态标签
6.3:JSP脚本就是java片段
分为3种:
<%...%>:java语句
<%=...%>:java表达式// 与out.print()功能相同,向客户端输出
<%!...%>:java定义类成员
6.4原理:
是特殊的Servlet,当jsp页面首次被访问时,容器Tomcat会先把
jsp编译成Servlet,然后再去执行Servlet
7.Cookie概述
Cookie在HTTP中他表示服务器送给客户端浏览器的Cookie,就是
一个键和一个值构成的,随着服务器端的响应送给客户端浏览器,
然后客户端浏览器会把Cookie保存起来,当下一次再访问的时候
把Cookie再发送给服务器
Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对,
客户端会保存Cookie,并会标注出Cookie的来源(哪个服务器的Cookie)
当客户端向服务器发送请求时会把所有这个服务器Cookie包含在请求中
发送给服务器,这样服务器就可以识别客户端了。
8.进程和线程
8.1:进程包括线程,程序执行状态叫进程,线程可以共享资源,一旦出现
共享资源,必须注意线程安全
8.2:分类:
守护线程:典型就是垃圾回收GC
用户线程:当JVM中都是守护线程,当前JVM将退出
8.3线程继承的两种方式:
1.继承Thread类,重写其中run方法,
完成了两步:启动子线程,调用子线程的run方法
2.实现了Runnable接口,实现其中的run方法,但是源码没有start方法
需要自己手动写Thread 线程名=new Thread(new出来的类名),然
后再调用这个线程的start方法才能启动线程
3.线程安全:
资源共享的操作会出现线程安全问题,比如售票问题
解决方法:让同一时刻共享数据操作的线程减少为有且只有一个
3.1同步代码块
synchronized(同步监视器,即锁){需要被同步的代码}
3.2同步方法
只有实现方式的线程可以用,继承方式的线程不可以用
4.死锁问题
产生:不同线程分别占用对方需要的同步的资源,都在等待双方
放弃同步资源
9.线程通信
5.1:wait()挂起当前线程并放弃CPU资源,使其他线程可以访问共享资源
而当前线程重新排队等待资源访问的机会
5.2:notify()唤醒正在排队中优先级最高的线程,结束等待
5.3:notifyall()唤醒所有正在排队的线程,通常可用在共享资源操作
10.单例模式
1.主要有两种:懒汉式单例,饿汉式单例
2.单例模式有以下特点:
2.1:单例类只能有一个实例
2.2:单例类必须自己创建自己的唯一的实例
2.3:单例类必须给所有其它对象提供这一实例
例子:
懒汉式//在第一次调用的时候才会实例化自己
public class Singleton{
private Singleton(){}
private static Singleton single=null;
//静态工厂方法
public static Singleton getInstance(){
if(single==null){
single=new Singleton();
}
return Single;
}}
11.框架各个包或者类含义
dao:数据访问层,操作数据库,实现增删改查
jdbc:客户端如何访问数据库的应用程序接口
pojo:数据对象(实体)
service:业务逻辑,事务管理
dao层:dao层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表、某个实体的增删改查
service层:service层叫服务层,被称为服务,肯定是相比之下比较高层次的一层结构,相当于将几种操作封装起来。
至于为什么service层要使用接口来定义有以下几点好处:
在java中接口是多继承的,而类是单继承的,如果你需要一个类实现多个service,你用接口可以实现,用类定义service就没那么灵活
要提供不同的数据库的服务时,我们只需要面对接口用不同的类实现即可,而不用重复地定义类
编程规范问题,接口化的编程为的就是将实现封装起来,然调用者只关心接口不关心实现,也就是“高内聚,低耦合”的思想。
Servlet:控制层,接收请求和向客户端响应的中间层,servlet是一种服务器端的java应 用程序
他往往用来处理请求的。他的外一层就是View、他的一层就是Service(Servlet往往调用他做逻辑判断的操作)
原始的Servlet的生命周期
servlet在第一次访问的时候就会被初始化
servlet对象一旦被创建就会驻留在内存中,当服务器关闭或者web应用被e69da5e6ba903231313335323631343130323136353331333332633065移除的时候servlet对象才销毁
1:当servlet被创建的时候那么 servlet就会被初始化 调用init方法
2:任何请求来自客户端,service方法就会被自动调用
3:当servlet从服务器被移除的时候 distroy方法将会被调用