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方法将会被调用