1,java基础概要讲解
1,java 相对其他计算机语言优势:1,跨平台2,面向对象的高级编程语言3,一次编译之后是免编译。
2, java 分为jdk和jre。jdk为开发工具,jre是运行时环境。
3,java 架构:1,java程序是运行在jvm上。2,是.class 文件结尾的字节码
4,jvm 说明: 1,架构:
1,构成: 内存,类加载系统子系统,本地方法接口和类库,执行引擎,垃圾回收器。
2,内存:
1,分为堆,栈,方法区,指令集,本地方法栈。
2,堆 包含:1,对象,数组等信息,被线程共享,如果内存大小不够,会抛出outOfmemoryError
栈 包含:1,局部变量等相应信息。被线程独享,如果内存大小不够,抛出outOfMemoryError 或者,栈深度不够,抛出StackOverFlowError
方法区 包含:1,方法相关信息,例如方法名,入参等,2,常量。被线程共享,如果内存不够,会抛出outOfmemoryError.
指令集 包含下一条字节码指令地址。是java中唯一没有规定会抛出异常的存储区。
本地方法栈 包含 对本地方法的调用,类似 栈。
3, 调优:1,对内存设置 -Xmx 最大 -Xms 初始大小 -Xmn 年轻代大小 -Xss 设置栈大小 持久代默认64M,-XX 为设置参数
3,类加载系统子系统:
1,双亲委派机制 默认向上,只有父类加载失败,才会向下加载。优点:1,保证不必要的重复代码;2,保证java程序安全稳定。
2, 加载类型
1,启动类加载器
2,扩展类加载器
3,应用程序加载器
3,自定义类加载器: 继承 Classloader 。不要冲洗loaderClass 方法。破坏双亲机制。
4,加载过程:类的生命周期:1,加载,2,验证,3,准备,4,解析,5,初始化,6,使用,7,释放。
简单点: 类加载(1),类链接(2,3,4) ,类初始化(5)
4,本地方法接口,类库:和计算机底层操作系统的交互。
5,执行引擎:
编译执行 即时编译器
解释执行 解释器
6,垃圾回收器:
通过设置参数,调整回收策略。通常为回收年轻代和老年代空间。
1,算法:
标记清理,标记整理,计数法,分代法,复制
2,机制: 串行,并行 分代中处理年轻代--复制;处理老年代 --标记整理
2,
5,java语法:
1,基本定义:
1,修饰符 访问权限,static final abstract package transient volatile native synchronized
2,标识符 对类,对象,接口,方法,变量,自定义类型,定义名称,由字母,数字,下划线,美元符号组成,数字不能首位,区分大小写,不能和关键字重合。
对类:
1,内部类
1,匿名内部类
2,成员内部类 依据外部类,故先有外部类,后有内部类
3,局部内部类
4,静态内部类
2,抽象类
3,关键字
4,变量 局部变量,静态变量,成员变量。
5,数组 特殊对象。一系列有序,数据类型相同的集合。声明,初始化,赋值,
6,枚举 特殊的类
7,注释 类注释,接口注释,变量注释
8, 运算符 算数运算符,关系运算符 位运算符 逻辑运算符 赋值运算符 其他运算符(三元运算符,instanceof)
9, 逻辑控制 if else while for do while switch case default
2, 高级语法:
1,java 面向对象特性:
1,多态 分为:
1,编译多态 样例:方法的重载
2,运行多态 样例:接口实现
3,必要条件: 1,继承2,重写3,父类引用指向子类。
4,优点:解耦合,灵活,可扩展,可替换
2,封装
1,优点:增强安全,隐藏实现细节
3,继承
1,优点:代码的复用。
2,破坏封装。即父类对子类没有隐藏。
3,子类可以继承除构造器之外的信息。
4,super 和 this
2,io:
1,字符流 reader writer
2,字节流 stream
3,序列化,反序列化 修饰符 transient 对敏感字段加密,是对对象的序列化。
3,集合
1,map
HashMap 数组+链表+红黑树
TreeMap 红黑树
2,collection :
1,list Arr---数组, linked --链表 线性集
2,set 散列集
3,Queue
3,针对多线程集合:
1,conCurrentHashMap
4,算法:
1,排序:
1,交换排序(冒泡排序,快速排序)
2,插入排序(直接插入排序,希尔排序)
3,选择排序(直接选择排序,堆排序)
4,归并排序
5,分配排序(基数排序)
6,使用空间最大 -- 归并排序 使用空间最小 --- 堆排序 平均速度快--- 快速排序
2,查找:
1,静态表查找:
1,二分法查找
2,顺序查找
3,斐波那契查找
2,动态表查找:
1,二叉排序树
5,线程
1,线程状态:1,new,2,runnable,3,blocked,4,waiting,5,timed_waiting,6,terminated
2,基础 : thread类,Runnable接口,Callable接口。
1,notify 2,start 3,run4,wait 5,sleep 6,yeid 7,
3,高级:
1,future 类。
2,ExcuteService 管理类,submit ,excutor ,invokeAll
3,Excutror 实现类 --创建线程池。 ThreadPoorExcutor
4,current包下:
1,lock Rentrantloack RentrantReadWriteLoack
2,atomic(原子类)final threadLoacl(线程独立变量)
3,queue类 BlockedQueue ConcurrentHashMap
6,异常:
1,throwAble
1,exception
1,编译时异常,exception
2,运行时异常,RuntimeException
2,Error
2,try catch finally throws
3,自定义:继承throwable接口 Exception类
7,数据结构:
1,数组
2,栈
3,链表
4,哈希表
5,红黑树 b+tree b-tree
8,强引用,软引用,弱引用,虚引用 ----对象回收
6,web开发:
1,网络协议
1,osi 7层架构: 应用层,表示层,会话层 传输层 网络层 链路层 物理层
2,tcp/ip 架构: 应用层,传输层,网间层,网络接口
3,http请求:
1,连接
2,请求
3,应答
4,关闭连接
5,浏览器解析域名-dns -ip, tcp建立链接,客户端发送请求,服务器应答,释放tcp链接,客户端解析内容
4,tcp 的三次握手4次挥手:
1,序号,确认序号
2,标志位
5,状态码:
1,信息类信息 1XX
2,连接成功信息 2XX
3,重定向信息 3XX
4,客户端信息 4XX
5,服务器信息 5XX
6,http / https
1,http 协议:
1,超文本传输协议,应用层协议,有请求和响应构成。
2,特点: 1,支持客户/服务器模式
2,简单快速
3,灵活,可以传输任何类型数据,有content——type标记
4,无连接: 每次链接处理一个请求,服务器处理完,收到客户响应,断开链接
5,无状态,每次请求和上次请求无对应关系,
3,一个http 操作,称为事务,过程为4步;
1,客户端和服务端建立链接
2,建立链接,客户端发送请求,
3,服务端接收请求,给予响应,
4,客户端接收响应内容,然后断开链接。
4,http 请求分三部分:
1,请求行 method 具体链接 版本号,body
2,消息报文
3,请求正文
2,https 协议:
1,安全超文本传输协议 传输层
2,安全通信通道,基于http开发
3,使用安全套接字层ssl ,netscape 端口443
2,开发架构
javaee 开发规范:1,jdbc 2,jndi 3,ejb 4,rmi 5,rorba 6 jsp 7 servlet 8 jms 9 xml 10, jra 11,jrs 12, javaMail 13, jaf
0,servlet
1,相关规范:
2,servlet:servletConfig ,servletRequest ServletResponse
1,原理:1请求,web服务器servlet容器判断是否有servlet实例,如果有,创建request和response 调用service,处理业务,如果没有,创建servlet实例,调用init初始化继续执行。web停止,servlet容器卸载servlet实例,destory
2,单纯servlet 有线程并发问题。单实例多线程
3,servlet生命周期:
init service destory
4,servlet 对页面响应 requestDispatcher.forworad response.sendRedirect
3,session cookie
cookie 是服务端创建,保存在客户端,客户端只读。 默认是一次回话完成。 服务端可以设置cookie时间
cookie有被劫持的可能,需要设定安全性
session 创建和保存在服务端,发送sessionId给客户端 ,服务端设置session时间
cookie禁止,session可以使用url重写机制,继续使用session
1,ssm
1,spring,2,struts2 ,3hibernate
2,struts2 原理:
1,客户端发起一个请求
2,经过过滤器filter,filterdispatcher被调用,filterDispatacher问ActionMapper调用哪个Action
确定后,filterDispatcher转交actionproxy ,actionProxy通过configuration manager找到action
actionProxy创建 actionInvocation,actionInvocation 通过命名模式调用action 经过interceptr
action执行完成,actionInvocation经过struts。xml返回数据
3,与struts1比较:
1,使用拦截器,避免侵入性
2,线程安全,多线程,struts1是单线程
3,标签库丰富
4,常用标签库: struts2标签,ognl 用于java,el 标签, jstl标签 后俩者用于jsp
3,spring
特点:1,aop 2,ioc
2,spring 原理:
1,核心:beans ,core ,context
1,context 是ioc 的容器
2,ioc使用工厂模式 aop代理模式 策略模式
3,注释:
1,service(业务) controller(控制) component(针对中立) reponsitory(持久层) --V2.5
2, autoWired(byType,spring) resource(byName,j2ee 可以type 和name)
4,hibernate
1,通过configuration 读取hibernate。cfg。xml
2,根据xml 读取配置信息
3,通过config。BuildSessionFactory 获取sessionFactory
4,sessionFactory。opensession 获取session
5,session。beginTransaction 打开事物
6,操作,提交事物,关闭session链接,关闭sessionFactory2
5,struts 原理:
1,经典mvc设计模式
2,view 包括: jsp 和actionForm
actionForm 封装了表单信息,传递给控制器
jsp 显示信息
3,controller:actionServlet 继承 HttpServlet
4,model : 提供了action对象处理
5,调用过程:
1,actionServlet 根据url查询对应ActionMapping对象,查找actionForm对象,如果没有创建,struts——config。xml文件-核心配置,actionServlet查找对应action对象,如果没有,创建,并执行excute方法,返回actionForward---》jsp
2,ssh
1,spring,2,SpringMVC ,3mybatis
2,springMvc 原理:
1,发送请求,dispatcherServlet 对url 解析,由handleMapping获取相关数据 根据handle 获取handleAdapt,获取request中参数,填充handler,handler执行完后,dispatcherservlet返回modelAndView对象,到viewResolver给dispatcherServlet 渲染视图
2,设计模式:
1,策略模式
2,适配器模式
3,与struts2比较
1,struts2使用filter ,springmvc 使用servlet
2,struts2是类级别拦截 springmvc是方法级别,默认单例模式,
3,性能上,springmvc 高于struts2
4,拦截机制,struts2使用intercept ,springmvc使用aop
5,思想上,struts2 oop,springmvc是在servlet上扩展
3,mybatis:
1,封装了jdbc操作
2,使用反射,java类和sql的映射
3,原理:
1,初始化,加载配置文件,初始化configrucation ,创建sqlSessionFactory (使用建造者模式)
创建sqlsession excutor(核心) mappedStatement 底层封装对象
4,缓存:
1,分为一级缓存和二级缓存。默认开启一级缓存。 二级缓存细粒度支持不够。
5,与ibatis比较:
1,mybatis实现接口和mapper绑定
2,效率更高
3,采用ognl
3,redis
1,key-value式数据库
2,支持5种类型: String list ,hash , set zset
4,dubbo
1,分布式服务 webservice需要和f5 实现负载均衡。本身实现软负载均衡
2,原理:提供俩个功能,监控中心,调度中心。初始化,解析配置文件 暴露服务,引用服务
serviceConfig类获取对外暴露接口ref,proxyFActory使用ref 生成一个invoker ,invoker到exporter基于rmi协议。referenceConfig的init调用protocol的refer生成invoker,ivoker转为实际接口
3,配合zookeeper使用
5,hsf
1,分布式服务
2,原理:1,提供服务:1,server启动,configServer注册 2,client启动,configServer请求list client缓存list,发现不可用server,remove。configServer通过心跳包维护server可用,server有更新,configServer提供带version的信息给client更新
3,优点: 1,服务自动注册和发现。2,消费者和提供者长连接,3,非侵入,4,版本管理,5,扩展灵活,服务治理
4,hsf 和dubbo的区别:
1
6,metaQ
1,分布式,队列模型消息中间件
2,严格顺序,支持topic 和 queue ,支持push,pull
3,producer 产生消息,push到服务器(producerGroup集群,同组相同逻辑)
consumer消费从服务中pull(consumergroup 集群,同组逻辑相同,订阅关系同)
broker 服务器
nameserver 分布式支持
message 消息,
4,与notify:
1,metaQ基于消息队列,保证消息有序执行,,保证消息实时性,消息队列持久化,消息堆积能力强,支持pull 和push
2,notify基于jms,不能保证消息有序,采用push,支持分布式,可以选择持久化和非持久化
3,jms 俩种实现:1,点对点 2,长轮询
7,netty
1,高并发 2,传输快, 3,封装好
1.1 用于构建web服务器
1.2 原理:
1,读取 upStream 写 downStream channl handlers channl pipleline
2,基于reactor模型 :
1,单线程reactor
2,线程池 reactor
3,主从reactor
netty 基于主从reactor :1,selector ,2EventLoopGroup 3,channlpipleLine 串行防止线程安全问题, 4,buffer 优化 引用了池化技术
2,与tomcat node.js 比较
1,tomcat 一个请求一个线程
2,node 一个线程服务所有请求
3,netty 一个线程服务很多请求
8,node
1,分解3层:底层:类库,中层:binging代码,上层:应用代码
2,是服务端javaScript解释器搭建响应速度快,可扩展应用,使用事件驱动,nio的轻量级
3,安装,express ,npm安装
3, 框架
1,rpc架构
1,基于功能点
2,hsf 和dubbo实现
2,resetful架构
基于资源
3, soa架构
1,面向服务架构
2,优点:高可用,高维护,高伸缩
3,开发工具和开发方法:
1,dubbo
2,mule
3,wso2
4,cxf
5,dubbox
4,微服务
1,将一个应用拆分为一组小的服务,服务之间协调,配合,提供用户服务。服务与服务之间采用轻量级通常基于http的restfulapi
4,缓存
1,redis
2,memcached
都是内存数据库,主要区别: 存存储数据-memcached 会丢,redis定期持久化数据库 ;灾难恢复 memcached不可恢复 ;redis 支持数据库备份 ;memcached 数据结构单一
redis 是单线程, memcached 是多线程 redis 是现申请存储内容,可以配置虚拟内存大小,memcached 是使用预分配内存池
redis 优点:对数据高并发读写,对海量数据高效率存储和访问,对数据可扩展和高可用性。
redis 应用场景: 取最新n个数据,top操作,2
5,数据库
1,mysql
1,存储引擎:
1,myisam 默认mysql 存储引擎
2,innodb 支持事务
3,bob 替代innodb
4,memory 数据保存在ram环境下
5,merge
6,archive:大量存储
7,federated 多个数据库链接,适合分布式环境
8,cluster、ndb 族式数据库引擎,
9,other
2,事务隔离:
1,默认数据库隔离:read commit
1,default ---由数据库本身决定
2,read——uncommited --隔离级别低, 并发高
3,read-commited 会锁定正在读的行
4,repeatable——read 会锁定所有读取的行
5,serializable 锁表
2,数据库隔离问题:
1,幻读,2,不可重复读,3,脏读。
3,spring事务传播行为:
1,propagation——required ---没有就新建
2,propagation——supports ---使用当前事务,如果没有,非事务进行。
3,propagation-mandatory ---使用当前事务,如果没有,就抛出异常。
3,propagation——required-new ---新建事务
4,propageation-not-supported ---以非事务操作
5,propageatiion-never --- 以非事务操作, 如果有事务,就抛异常
6,propagation-nested -- 嵌套事务执行,没有事务,则是2
4,分库分表:
1,分表: 1,冷热数据分表--不同的存储引擎
5,日志
6,优化:
1,主从复制,读写分离
2,增加缓存
3,分表分库 分区
4,数据库备份 ,增量备份 mysqldump(适合小数据库,逻辑备份) mysqlhotcopy xtrabackup(物理备份)
5,数据库修复 myiasmchk(修复myiasm,需要停止数据库) mysqlcheck(不需要停止数据库)
6,sql语句优化:
1,不进行null判断,!= <> or 前置% in 和not in 使用参数 表达式操作 函数操作 会导致 不使用索引
2, between exists 代替in
3, 索引不是越多越好,最多6个 避免更新索引列
4,索引尽量使用数字类型
5 避免频繁创建表,删除表
6 ,新建表时候大量插入数据,使用select into
7,使用存储过程,最后手动删除临时表 先truncat table drop
2,mycat 分布式数据库,核心功能 分表分库
3,oracle
1,oracle 构成
instance
2,proessor userprocessor backGroundProcessor serverProcessor
3,connection --tcp链接
4
dataBase
1,基本核心类型:data file control file redo log file
2,rowId 伪列 ---可以查询,但是不能更新,删除,插入
rownum 数据单表行次序
3,分页查询:
1,排序加伪列
rownum
2,运用分析函数
row_number()over(group by )
3,使用 minus
4,sql 语句:
1,结构化查询语句
1,数据库定义语言:create drop alter truncate
2,数据库操作语言:insert delete update select
3,事务控制语言:commit rollback savePoint
4,数据控制语言:grant revoke
2,存储过程:
1,系统存储过程
sp_开头
2,本地存储过程
3,临时存储过程
分为本地临时#,全局临时## 开头
4,远程存储过程
远程服务器上的存储过程,使用execute执行
5,扩展存储过程
外部程序 xp_开头
create procedure name param 参数 as --开始操作 begin end go--代表结束
exec name ---调用存储过程
drop procedure
show procedure status
6,运行效率高 复用性高,安全性高
3,触发器
1,特殊的存储过程,由事件触发。
2, DML触发
1,after
2,instead of
DLL触发
3, create trigger trigger_name on table_name|view_name after(for)|instead of insert ,update,delete as begin end go
4,如果 俩者都有, instead of 一定触发,after不一定
5,一个触发器对应一个表 instead of 一个操作只能一个,after可以多个
6,一个数据表可以多个触发器,
7,after只能触发表,instead of 可以表和视图
8,with check option 的视图,不可使用触发器
6,调优
7,打包发布
8,网络io :
1,nio 2,bio 3,多路复用io 4,信号驱动io5 异步io
9,负载均衡:
1,硬件负载均衡
2,软件负载均衡
1,lvs 传输层的负载均衡器
2,nginx 网络层和应用层的负载均衡,反向代理
3,HAproxy tcp和http层
4,负载均衡计算:
1,轮询 加权轮询
2,随机 最少链接
3,源地址散列
3,keepalived
4,terracotta memcached 实现session 共享
5,HAproxy + keepalived + nginx 实现web服务负载均衡
lvs + keepalived + mysql 实现数据库负载均衡
8,web 前端:
0,总结:
浏览器的进程,线程 , js运行机制
http规范
http缓存
页面解析流程
js引擎解析流程
跨域 ,web 安全
1,html
2,css
3,js
1,js是解释型语言
4,网络协议
5,解析流程:浏览器内核渲染
1,解析html 生成dom树
2,解析css ,生成css规则树
3,合并dom树和css 规则树,生成render 树
4,布局render树,(layout/reflow),负责各元素尺寸,位子的计算
5,绘制render树(paint),绘制页面像素信息
6,浏览器将各层信息发送给gpu,gpu将各层合成,显示在屏幕上。
6,js流程:
1,读取代码,进行词法分析,分解为词元,对词元语法分析,整理成语法树,使用翻译器,转化为字节码,使用字节码解释器,将字节码转为机器码
9,网络安全
1,CsRF 跨站请求伪造
1,原理流程:
1,用户正常登陆一个网站A,未关闭浏览器,访问网站b,网站b要求浏览器定向跳转A,a网站登陆成功,但是因为一些B网站返回的信息,在网站a被执行。
2,工具:
csrfTester csrfRequest builder
3,防御:
1,验证http referer字段
2,请求地址增加token并验证
3,http头上自定义属性,并验证
4,具体方式:
1,尽量使用post
2,加验证码
3,referer check
4,anti csrf token check
5,自定义属性
2,xss 页面上js攻击
1,原理:
1,在web页面上植入恶意js代码,当用户浏览页面,js代码会被执行,恶意攻击用户
2,分类:
1,内部攻击
1,利用本身漏洞,构造跨站语句
2,外部攻击
1,自己构造跨站漏洞网页,欺骗管理员打开
3,存储型,存储在服务器上,
反射型,欺骗用户点击触发
7,服务器端:
1,shell脚本 .sh 结尾文件 linux 系统
0, 引用使用 $ ,{};数组使用(),空格分隔;运算 [] ; ` 使用命令;. 引用文件
1,变量: 1,shell变量 2,局部变量 , 3,环境变量 引用 使用 $直接使用
2,函数: 1,双引号,单引号区别。
2,传递参数: $# 传递脚本参数个数 $$ 脚本当前运行进程id $! 后台运行的最后一个进程id $@ $* 取值
3,运算符 使用[] 以空格间隔 -n 判断字符串是否为0
4 echo -e 开启转义, read printf 输出 test
5,逻辑控制: for if while util case ,break continue
6,函数定义
2,bat脚本
1,.bat 或者 .cmd 文件 windows 系统
将编写好命令放在path下,即可执行 c://autoExbc.bat 启动运行, 忽略大小写
2,%% ()
3,命令:
1,help /? echo @不显示后面命令 goto跳转 rem注释 pause暂停 call引用其他命令 start开始命令执行 if(
1,if[not] 2, if exist 3,if errorLevel) else choice for continue break
2,ping telnet color random exit shutdown
3,服务器:
1,tomcat 原理:
1,tomcat 是servet容器,支持3种模式: server client
2,请求: 客户端请求--connector ---host ---context --封装request 和response 调用对一个servlet的service,返回response ---context--host ---connector ---客户端
3,优化: tomcat 优化和jvm优化
1,tomcat优化: 1,工作方式的优化2,连接方式优化3,配置文件优化
2,jvm优化:1,配置 tomcat 使用java 配置。2,配置jvm 参数
2,jetty原理:
1,servlet 容器
2,与tomcat比较:
1,架构比较:jetty 简单,只需 server 和handle connector
2,性能比较:jetty适合长链接,默认nio ,性能更好