diff --git a/hah.txt b/hah.txt deleted file mode 100644 index 83d47e9..0000000 --- a/hah.txt +++ /dev/null @@ -1 +0,0 @@ -qweqwqwrqwrqwr diff --git a/java.txt b/java.txt deleted file mode 100644 index 95c76de..0000000 --- a/java.txt +++ /dev/null @@ -1,3 +0,0 @@ - 111 -第二次修改 -第三次 \ No newline at end of file diff --git "a/java\345\237\272\347\241\200.docx" "b/java\345\237\272\347\241\200.docx" new file mode 100644 index 0000000..7dbf352 Binary files /dev/null and "b/java\345\237\272\347\241\200.docx" differ diff --git "a/\346\225\260\347\273\204\350\246\201\347\202\271.docx" "b/\346\225\260\347\273\204\350\246\201\347\202\271.docx" new file mode 100644 index 0000000..89430f7 Binary files /dev/null and "b/\346\225\260\347\273\204\350\246\201\347\202\271.docx" differ diff --git "a/\347\224\265\345\255\220\344\271\246\351\230\205\350\257\273\347\254\224\350\256\260.docx" "b/\347\224\265\345\255\220\344\271\246\351\230\205\350\257\273\347\254\224\350\256\260.docx" new file mode 100644 index 0000000..f2dc494 Binary files /dev/null and "b/\347\224\265\345\255\220\344\271\246\351\230\205\350\257\273\347\254\224\350\256\260.docx" differ diff --git "a/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/Eclipse\346\234\200\345\256\236\347\224\250\345\277\253\346\215\267\351\224\256.txt" "b/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/Eclipse\346\234\200\345\256\236\347\224\250\345\277\253\346\215\267\351\224\256.txt" new file mode 100644 index 0000000..27b6c16 --- /dev/null +++ "b/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/Eclipse\346\234\200\345\256\236\347\224\250\345\277\253\346\215\267\351\224\256.txt" @@ -0,0 +1,25 @@ +Alt + / +Ctrl + T ڷϰ˼ɽʵ +Ctrl + ڷϰ˼ɽӿ +Ctrl + Alt + H ڷϰ˼ɽô˷һ +Ctrl + O ʾǰзб +Ctrl + Shift + O ȱٵİ +Ctrl + Shift + R ļļ +Ctrl + Shift + I ϵڲϰ˼ʾ +Ctrl + H ļ +Ctrl + F ǰļ +Ctrl + K ǰļ +Ctrl + Shift + K ǰļ +Ctrl + Alt + ϻ ѡı +Alt + ϻ ƶѡı +Ctrl + Alt + / ƴдԶȫ +Ctrl + Shift + F ʽı +F6 ϵ㵥 +F8 һִһϵ +Ctrl + o ڱ༭дṹ,ڱ༭󻯵ʱ,ת... +Ctrl + t Ҳڱ༭ʹ,ѡԪصļ̳,Ѹٶλķеĸλ +Alt + <-(Ҽͷ): ༭Ļ,BACK! +Ctrl + F6 : л༭༭,ҸijTable+ctrl +ctrl+/:ע +ctrl+\:ȡע + diff --git "a/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/java\350\277\233\351\230\266.txt" "b/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/java\350\277\233\351\230\266.txt" new file mode 100644 index 0000000..7b68484 --- /dev/null +++ "b/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/java\350\277\233\351\230\266.txt" @@ -0,0 +1,347 @@ +多线程 +实现多线程2种方式:1.继承Thread 2.实现Runable接口 java不支持多继承,扩展性没那么好 + +sleep()--睡眠一段时间(进入阻塞状态),不会释放锁 +wait()--wait()要和nofity()配套使用,属于Object类,会释放锁(锁是对象级),而且一定要在 +synchronized中使用 + +join()--通常用于主线程内,作用是:等待其他线程完成再自行main主线程(内部其实使用wait(*)实现) +yield()--线程让步,暂停当前线程,回到可运行态(让步的线程可能会再次获得资源) + +jdk1.5后 增加Lock接口,提供synchronized类似的同步功能 + 区别:1.一个是关键字;ReentrantLock是实现类,需要手动获取,释放锁 + 2.lock可以设置获得锁的等待时间,避免死锁,而synchronized会一直等 + +ThreadLocal:线程局部变量(只在自己线程里,能实现线程安全,这里与synchronized区别是,不存在多线程情况) + 用法 要调用protect Object initialValue(){} 线程第1次调用get()或set(),会只执行1次 + 原理 map.set(Thread.currentThread, value) 代码内部ThreadLocal.ThreadLocalMap把数据隔离 + +容器(集合)与并发包 +集合:Collection和Map +List 有序集合,可以包含重复元素,可以存多个null,按索引访问方式 +Set 无序,不能包含重复元素,只能有一个null值 +Map 不能包含重复key +HashMap和HashTable区别:1.HashTable同步HashMap非同步 2.HashMap继承AbstractMap,HashTable继承Dictionary + 3.HashMap可以有一个null作为key,多个null为value;而HashTable的key、value都不能为null + +同步集合类 HashTable,Vector,Stack都加了synchronized, + 还有同步包装器:Collections.synchronizedMap(),Collections.synchronizedList()(原理:内部对每一个方法加了同步锁) + +并发集合 jdk1.5后 + ConcurrentHashMap 原理:拆分成多个小的HashTable, + 分段锁(最多16段,每一段就是一个小的HashTable),减少锁的资源竞争 + +其他并发包 +CountDownLatch 实现如:主线程需要等待5个子线程执行完再执行 + new CountDownLatch(5); countDownLatch.countDown();//每次减一 countDownLatch.await();//countDown结果为0,阻塞状态变运行状态 +CyclicBarrier 等全部线程到达后才执行 cycli.await();//所有线程到达后唤醒所有的等待线程 +Semaphore 设置一个阈值,如5,就是最多5个线程同时访问。第6个线程会被阻塞 +semp.availablePermits();//当起可用资源数量 semp.acquire();//申请资源 semp.release();//释放资源 + +并发队列 首先是队列,继承Collection +ConcurrentLinkedQueue 基于链接节点的无界线程安全队列,先进先出,适用于高并发的队列,无锁的方式,性能比BlockingQueue好 +BlockingQueue 阻塞队列 ----通常用于生产者,消费者场景 + new ArrayBlockingQueue(3) 有界,指定大小后,不能改变 + new LinkedBlockingQueue(3) 有界,指定3就是3容量大小,不指定,就是int.max_value大小 + +线程池 +Executor接口 4种创建方式,如Executors.newCachedThreadPool(); + +锁机制 +悲观锁,乐观锁 +重入锁(递归锁) 外部代码获得锁,内层代码会自动获得这把锁 synchronized和 ReentrantLock就是重入锁 + 非重入锁:外层代码获得一把锁,内层代码获得另一把锁 就有可能死锁 +读写锁 ReentrantReadWriteLock jdk1.5的并发包已包含读写锁 只要出现有写的操作,就会上锁,只能有一个线程去写。读的话可以多个线程同时操作 +CAS无锁机制 利用乐观锁思想,认为自己能完成操作。多个线程操作同一个变量,只有一个会成功,其余都失败,失败线程会被告知,可再次尝试 + 三个参数V:要更新的变量 E:预期值 N:新值 当V=E,N=V,返回N;当V不等于E,当前线程什么都不做,返回V +自旋锁 + +Java内存模型--- 参见java基础.doc文档 原子性、可见性、有序性 + +DNS解析:将域名转换成ip地址(先去本地的host文件),本地没有,(外网)到网络宽带那边host解析 + +Servlet生命周期 +构造方法(Servlet对象只实例化一次,单例)-->init-->service-->destroy +--如成员变量,可能会有线程安全问题 + +session +--第一次创建session对象,会分配一个唯一的id,JSESSIONID。这个值就会发到浏览器保存, +第二次访问会带着这个id访问(所以换浏览器,就找不到对应的session) + +Https:安全,多了一个ssl证书,效率比http慢,默认端口是4443 + +Http1.0默认短连接 Http1.1默认长连接 响应头:connection:keep-alive +长连接:现在网站默认长连接、rpc、netty、app消息推送 +短连接:调用不是特别频繁 + +跨域问题:在ajax请求下,域名不一致 +1.后端设置response.setHeader("Access-Control-Allow-Origin","*") --支持所有网站 +2.jsonp,但是只支持get请求(前端页面设置) 原理:请求转换成script,请求脚本 +3.httpclient +4.网关 + +表单重复提交解决方案 +1.前端 点击后按钮变不可用 +2.token的思路,a先在后端访问页面的controller中生成token并存到session中 +b转发到页面存到隐藏输入框里 c提交时带上并判断是否一致(处理完删除session里的token) + +解决模拟请求--使用token(唯一性)+验证码 + +客户端与服务器数据交换格式xml、json、html(json轻量,占宽带小,xml重量) +通常互联网项目采用http+json(restful风格);银行项目http+xml(webservice) +json有2种结构 对象{key:value} 数组["java","c++","vb"] +---------json与java对象互相转换复习 + +解析xml 用dom4j和sax(适合解析大文件) + +java反射机制 +核心,要获取当前类的class文件( +3种方式1.Class.forName("com.haha.User") 2.User.class 3.new User.getClass()) +Class class1 = User.class; class1.newInstance();//调用user类的无参构造方法 + +如何禁用java的反射机制-----将构造方法设置为private(但是也有api可以设置允许使用,springioc就是) + +网络通讯 +http底层使用tcp协议进行连接 +Socket技术:二进制+IP+端口号 +upd面向无连接 tcp三次握手成功,才开始数据传输 ServerSocket 3次握手(建立连接),4次挥手(断开连接) + +//转换成string类型 +byte[] buf = new byte[1024]; +int len = intputStrean.read(buf); +String str = new String(buf, 0, len);//这个是固定写法 + +NIO 数据从通道(channel)读取到缓冲区(buffer),从缓冲区写到通道 +缓冲Buffer 负责存储 +ByteBuffer是最常用的 put()存入数据到缓冲区 get()获取缓冲区数据 flip()开启读模式 +4个核心属性 position:缓冲区正在操作的位置 limit:缓冲区可以操作的数据大小 +capacity缓冲区最大容量,声明后不能改变 + +通道Channel 负责传输 + +同步阻塞和同步非阻塞(阻塞只有在网络条件才出现,本地不会出现) +最传统的IO也叫BIO,属于同步阻塞---服务器开启后,等待客户端发请求,就会一直阻塞 +用多线程概念(伪同步阻塞)--->多线程占用太多内存---->用线程池 +NIO,同步非阻塞 + +Netty 开发大多用netty4 +长连接(移动端消息推送,MQ),短连接(http协议) + +TCP协议 +粘包(如果基本上是同一时间发送,多个数据合成一个数据包) +拆包 +防止粘包方法 1.消息定长 2.用特殊分隔符来区分比如:, + +序列化 将对象序列化成二级制形式(字节数组),用于网络传输和持久化 +反序列化 将二级制还原成对象 + +SpringBoot 面试问的基本是很基本的东西,没什么东西问,一些api,常用的注解 +@EnableAutoConfiguration 让springboot进行spring框架的配置 +@ComponentScan +@ControllerAdvice @ExceptionHandler + +项目使用到多数据源 +利用分包(包名不同来区分) + +事务 +springboot集成事务,在方法上加上@Transactional即可 + +分布式事务 +使用springboot+jta+atomikos来处理(适用于传统项目) +---先建2个数据源,创建2个类读取数据源属性,创建2个类来管理,atomikos来管理 + +springboot主流还是用yml比较多,用properties比较少了 + +微服务架构与面向服务架构区别: +面向服务架构(SOA)银行,企业级 xml格式传输 ESB服务 需要序列化和反序列化 重量级 +微服务架构 更加细分,http+json+restful 轻量级 + +SpringCloud-----一套微服务解决方案,RPC远程调用 +调用服务原理:其他服务先注册到注册中心,然后通过httpClient底层技术来调用 + +ribbon负载均衡 原理 方案 + +路由网关 原理 + +分布式配置中心 原理 + +面试题 +雪崩效应 微服务如何解决--hystrix 原理 熔断模式-再服务降级,隔离模式,限流模式 +springboot和springcloud区别:1springboot简化xml配置,自带tomcat容器,集成web组件springmvc +springcloud 微服务框架,依赖springboot,用springmvc框架作为rpc接口调用 + +Dubbo---分布式服务框架(远程服务调用的分布式框架) + +dubbo-admin 服务治理 + +JVM +jvm面试题1 内存结构---最重要4个:方法区,堆,栈,本地方法栈 +jvm参数调优:1.减少垃圾回收机制次数 2.减少单次垃圾回收机制时间 +a.堆内存初始值与最大值保持一致,减少次数 b.设置新生代与老年代比例,1/3或者1/4比较好 + +垃圾回收机制--不定时,清理堆内存不可达对象(是jvm里的一个进程) +finalize() 在垃圾回收机制前调用的 + +内存溢出:程序需要4g内存,但是系统只能给3g,满足不了需求,就产生内存溢出 +内存泄露:定义了很多静态变量或者new了对象,没被使用,但是还在被引用,gc无法回收 +(反正就是GC回收不了数据,导致内存浪费,内存泄露最终会导致内存溢出) +防止内存泄露--1.像hashmap,arraylist等集合对象,被声明为static + 2.成员变量初始化时要置空 3.监听器不再使用要取消注册 + + +垃圾回收机制算法 +1.引用计数法--垃圾回收时,如果对象被使用+1,不使用-1,为0时回收,默认15次 +2.标记清除法--先标记可达或不可达,再逐个删除不可达对象(这个不好,产生碎片) +3.标记压缩法--在标记清除法基础上优化,把不可达压缩到一起再删(连续性,没碎片) +4.复制算法--S0和S1区轮流清空,每次清除一个区的不可达对象,把可达对象复制到另一个区 +5.分代算法--分为新生代和老年代 +--标记清除和标记压缩都是在老年代;复制算法在新生代 + +垃圾回收时会有停顿现象,因为所有线程会终止,防止又产生新的垃圾 + +垃圾回收器 串行回收期,并行回收期 + +jvm调优总结: +1.堆内存初始值和最大值越大,吞吐量越大(而且初始值最好和最大值一样) +2.最好使用并行回收器,比串行吞吐量大,速度快 +3.新生代和老年代比例最好是1:2或者1:3 +4.减少GC对老年代的回收 + +MySql优化(sql语句面试题,最难也就到分组,having) +1.数据库设计合理(3范式 原子性、唯一性、不能字段冗余) +2.添加索引(普通,主键,唯一,全文索引)---查询速度加快,但是会占用磁盘空间 +添加,删除操作也会变慢 +3.分库分表 +4.读写分离 +5.存储过程 +6.mysql最大连接数(修改my.ini文件)、mysql服务器升级、清理碎片化 +7.sql语句调优 + +索引(经常要查询的字段建索引) 原理--B-tree树,折半、二分查找 +--缺点 生成索引文件,占用内存,增加、删除时索引文件需要更新 + +SQL语句调优---先定位到哪些是慢查询语句 +1.使用索引(查询用得多,而且在where里作为条件,通常主键索引) +2.like关键字, like '%aa%'--这样会全部扫描,如果要使用like,应该like'aa%' +3.or关键字 只要其中一个没索引,就不用索引查询 +4.判断是否为null,用is null不要用= null(=null不用索引) +5. >=101 、>100 不要用>=这样会扫描2次 + +mysql存储引擎 都支持b树数据结构,缓存 +innodb(用得多)--事务机制,行锁定 +myisam--批量添加效率高,表锁定,支持全部检索(因为) +memory +企业开发中,挺少建主外键根据主外键来,但是用hibernate需要,要建关联关系 + +主从复制--主服务器(读写) 从服务器(读) +1.先分别在两台机器安装数据库 2.在my.conf配置主从服务器id,开启日志文件(二进制sql执行文件) +3.从服务器还要加多一行同步的数据库 binlog_do_db=test +4.主服务器给从服务器做远程连接账号授权 5.在从服务器中添加复制功能 + +读写分离--通常用中间件来实现 +1.配置server.xml 2.配置schema.xml 3.配置rule.xml + +MyBatis--ORM框架 +Hibernate通过对象 MyBatis通过sql语句 +SQL注入问题--sql拼接产生的,通过预编译解决 + +Spring--对象交给容器管理,不用我们来new +springIOC原理:使用dom4j解析xml文件+java反射 +步骤1.读取xml文件 2.解析xml,遍历bean,获得类的全路径 3反射获得类,初始化类,赋值 + +spring的bean对象默认是单例singleton + +springioc 作用:创建对象和处理对象的依赖关系 +创建对象--1.调用无参构造器 2.有参构造器 3.工厂创建对象(静态或非静态) +依赖注入--1.通过构造函数 2.set方法注入 3.p名称空间 4.注解(通常是这种方式) + @Autowire默认是按照类型装配bean(这个注解属于spring) @Resource按名称装配,这个属于j2ee1.6出现的 + +代理模式--作用类似于中介 +静态代理:需要生成代理类 +动态代理:不需要生成代理类---jdk动态代理(反射机制) cglib动态代理(字节码) + +AOP--面向切面(一种思想) 使用场景:权限控制、事务管理、日志 +SpringAOP--cglib和jdk动态代理综合使用 +每个bean实例化前经过AbstractAutoProxyCreator的postProcessAfterInitialization() + +事务--原理:aop编程+环绕通知+异常通知 +ACID--原子性(最小单元(方法)所有操作要么全部成功过,要么全部失败回滚); +一致性、隔离性(并发产生的事务互不影响)、持久性 +分类---编程事务(手动事务)、声明事务(xml或注解) + +7种事务传播行为 +常用4种:1.REQUIRED--当前事务就合并在一起(合并为同一个事务),如果当前没事务, +就新建一个(最常见) 2.REQUIRED_NEW--自己新建另一个事务,如果当前有事务,挂起当前事务 +3.SUPPORTS--当前有事务就合并在一起,没有事务就以非事务执行 +4.NOT_SUPPORTED--非事务方式执行,如果当前有事务,挂起 + +Bean的生命周期 +1.实例化(new对象) 2.初始化属性(属性注入到bean) 3.调用定制一些的初始化方法 +4.bean就可以提供服务 5.销毁(web项目一般不会主动去销毁(刚启动spring会 +很慢就是去生成bean),服务器关闭会销毁) + +springMVC--核心 对Servlet进行了包装 +流程(原理)客户端请求-->DispatcherServlet-->HandlerMapping(交给handlermapping +根据配置,注解找到具体的处理器)-->HandlerAdapter(调用合适Controller)--> +ModelAndView(后端逻辑处理完返回Modelandview)-->最后视图解析,渲染返回到对应的视图 + +jVM内置缓存(存放在jvm缓存中(声明为static),关闭jvm才消失) +--缺点 占用内存,容易内存溢出,线程安全问题,多服务器数据不能共享 +oscache(针对数据库访问,mybatis默认二级缓存) +ehcache(针对jsp页面缓存,hiberante默认二级缓存) + +jvm缓存和nosql:最大区别就不能共享session数据 + +关系型数据 mysql、oracle、sqlserver--持久化、主外键、sql语句,存放在硬盘上 +nosql(非关系型数据库或缓存数据库)--值放在内存中(跟jvm内置缓存类似) +--特征:存储在内存中、key,value存放,分布式多服务器能共享数据,效率高 + +Redis 减轻数据库压力(查内存快) +应该场景:token生产、session共享、分布式锁、自增id、验证码 +5中基本类型:string、set(集合)、list(列表)、hash(散列)、zset(有序集合) +语法string:set string111 redis;get string111 +list:lpush list11 redis(插入到列表头部);lrange list11 0 10(获取指定范围内的元素) +set(无序,不能重复结合):sadd set11 redis;smembers set11 +zset(有序,不能重复集合):zadd zset11 1 redis;zadd zset11 2 mongodb;zrange zset11 0 10 WITHSCORES +hash():hmset hash11 name redis;hgetall hash11 + +redis存对象--用string类型 json格式 + +Redis高可用机制(容错机制) +主从复制机制(根据快照文件同步)--作用:数据备份、读写分离、集群、宕机容错 只能一个主数据库 + 在从服务器的redis.conf修改下文件就行 +持久化机制 +rdb redis默认,在一段时间内数据有一定数量才存储,有可能发生数据丢失 +aof实时存储(一般用这种多) +哨兵机制 + 主服务器挂了,在从服务器投票选举一台作为主服务器 + (如果全部都宕机,用keepalived脚本来监听,自动重启(一直重启不成功,发邮件通知)) +事务 MULTI 开始一个事务 EXEC 提交事务 + +ActiveMq +消息中间件 解决高并发、异步通讯、两种通讯方式:点对点、发布/订阅 +消息模型 1.点对点通讯方式:生产者-->消息队列-->消费者(一对一) 队列可以持久化 +2.发布订阅 生产者-->主题-->消费者(一对多) 场景不多,通常是用第三方推送 + +保证JMS可靠消息 +--重试机制后,不能会重复消费(通过全局id) + 分为带事务和不带事务--里面各有自动签收和手动签收 + +ActiveMq如果消费者抛出异常,默认自动重试 + +分布式事务产生原因 --跨数据库,跨服务 + +分布式事务解决方案 +2pc(两段提交协议) 、3pc(三段提交协议)、TCC、MQ(补偿机制、重试机制)、其他补偿方式(回调) + +CAP理论 数据一致性、服务可用性、分区容错 +Base理论(柔性事务) 基本可用、软状态、最终一致性 +ACID为刚性事务 + +LCN框架 原理 + + +事务隔离级别 串行化>可重复读(mysql默认)>读已提交>读未提交 +未提交读(脏读),没隔离好,一个事务处理过程中读取到另一个未提交的事务的数据 +不可重复读 当前事务读取了前一事务提交的数据,两次结果不一样 + diff --git "a/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/\344\274\240\346\231\272\346\222\255\345\256\242javaweb\345\237\272\347\241\200\345\255\246\344\271\240.txt" "b/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/\344\274\240\346\231\272\346\222\255\345\256\242javaweb\345\237\272\347\241\200\345\255\246\344\271\240.txt" new file mode 100644 index 0000000..116416c --- /dev/null +++ "b/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/\344\274\240\346\231\272\346\222\255\345\256\242javaweb\345\237\272\347\241\200\345\255\246\344\271\240.txt" @@ -0,0 +1,102 @@ +传智播客 基础 视频复习 +2018.1.16 +servlet生命周期 +1.servlet实例化,初始化 2.服务请求 3销毁 +2.最常用实现方式:继承httpservlet,重写doget()和dopost() +3.servlet自动加载:1 -----数值越小,优先级越高 +4.路径问题 绝对路径:以/开头 客户端绝对路径/web/demo1 服务端绝对路径/demo1(不需要写项目名) + 相对路径:不能以/开头 +5.servletConfig对象----和配置有关 +6.servletContext对象----域对象(这个是重点) + 一个web应用对应一个servletContext对象 + 一个web应用下有多个servlet程序 + 一个web应用下的所有servlet程序共享同一个servletContext对象 + + new FileInputStream("src/db.property")----这种是相对路径,如tomcat服务器,就是在tomcat/bin + 读取资源文件(*****) + InputStream getResourceAsStream(String path)--通过文件的地址获取输入流 + String getRealPath(String path)---通过文件的地址获取文件的绝对磁盘路径,如c:\tool\tomcat + +7.last-modefied ---- 控制缓存 + +response对象 +1.客户端做出响应使用response对象 + 响应行 + 状态码:setStatus(304) + 响应头 + setHeader("aa","bb") + addHeader("bb","adsf");addHeader("bb","wew"); + 响应体 + getOutputStream();--获得字节输出流 getWriter()--获得字符输出流 + + response对象案例 + 1.重定向 response.setRedirect("/sdsfs/sfds")--这个是response对象已经 + 封装好的方法 底层方法还是response.setStatus(302);response.setHeader("location",) + 2.刷新页面 + response.setHeader("refresh,"5;url=/aaa/sfdsf/index.html")--5秒后刷新跳转页面 + 效果等同于在页面上-- + 3.禁用浏览器缓存 + 设置3个头信息 + response.setHeader("Cache-Control","no-cache");response.setHeader("Pragma","no-cache");response.setDateHeader("Expires","0"); + 4.中文乱码 + 字节流乱码 response.setHeader("content-type","text/html;charset=UTF-8");"sdfsf".getBytes("UTF-8"); + 字符流乱码(response缓冲区的编码默认是iso-8859-1) response.setCharacterEncoding("UTF-8);response.setHeader("Content-Type","text/html;charset=UTF-8"); + + 上面语句可以总结写成:response.setContentType("text/html;charset=UTF-8"); + 5.下载 + 设置头信息 response.setHeader("content-disposition","attachement;filename=aaa.jpg") + 6.实现验证码 + +request对象 + getRemoteAddr();--获取ip地址,比如投票限制ip + getContextPath();--获取虚拟路径 + + request请求乱码(request缓冲区乱码) + post请求--request.setCharacterEncoding("UTF-8") + get请求--1.修改tomact目录下的server.xml文件;2.比较常用 new String("sss".getBytes("ISO-8859-1"),"UTF-8") + 重定向和请求转发 + request.getRequestDispatcher("/get").forward(request, response); + response.sendRedirect("/day10/query") + request.getParamter() + +EL表达式 + 获取 域对象 的内容 ====> request.getAttritube + +会话 + cookie + session + +JSP9个内置对象 + requset HttpservletRequest + response HttpServletResponse + appliaction ServletContext + session HttpSession + config ServletConfig + + out JspWriter + page Object(基本上不用) + exception Throwable(需要在页面先声明isErrorPage="true",才能使用) + pageContext PagaContext(只在当前页面使用,范围比request还小;作用很大,可以获取其他8个对象,如getRequest()) + +4个域对象 +servletContext(整个Web应用);request;session(一个会话);pageContext + +javaBean +定义:1.无参的构造方法 2.属性私有化 3.私有化属性要通过public类型暴露给其他程序 + +配置全局的错误页面,在web.xml里配置 + + 404 + 404.jsp + + 500 + 500.jsp + + + +redis +安装 1.下载stable版本 2.解压 3.make命令编译 +命令 操作各种类型的数据 +事务 比较鸡肋的功能,比较少用 +持久化 rdb和aof,rdb(数据快照),aof是记录操作的命令 + diff --git "a/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/\350\232\202\350\232\201\350\257\276\345\240\202(\346\257\217\347\211\271\345\255\246\351\231\242)-2\346\234\237-JVM\345\217\202\346\225\260\350\260\203\344\274\230.docx" "b/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/\350\232\202\350\232\201\350\257\276\345\240\202(\346\257\217\347\211\271\345\255\246\351\231\242)-2\346\234\237-JVM\345\217\202\346\225\260\350\260\203\344\274\230.docx" new file mode 100644 index 0000000..a67bf9c Binary files /dev/null and "b/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/\350\232\202\350\232\201\350\257\276\345\240\202(\346\257\217\347\211\271\345\255\246\351\231\242)-2\346\234\237-JVM\345\217\202\346\225\260\350\260\203\344\274\230.docx" differ diff --git "a/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/\350\232\202\350\232\201\350\257\276\345\240\202(\346\257\217\347\211\271\345\255\246\351\231\242)-2\346\234\237-NIO\351\253\230\347\272\247\347\274\226\347\250\213\344\270\216Netty\345\205\245\351\227\250.docx" "b/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/\350\232\202\350\232\201\350\257\276\345\240\202(\346\257\217\347\211\271\345\255\246\351\231\242)-2\346\234\237-NIO\351\253\230\347\272\247\347\274\226\347\250\213\344\270\216Netty\345\205\245\351\227\250.docx" new file mode 100644 index 0000000..c2fa4f1 Binary files /dev/null and "b/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/\350\232\202\350\232\201\350\257\276\345\240\202(\346\257\217\347\211\271\345\255\246\351\231\242)-2\346\234\237-NIO\351\253\230\347\272\247\347\274\226\347\250\213\344\270\216Netty\345\205\245\351\227\250.docx" differ diff --git "a/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/\350\232\202\350\232\201\350\257\276\345\240\202(\346\257\217\347\211\271\345\255\246\351\231\242)-2\346\234\237-Netty\351\253\230\347\272\247.docx" "b/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/\350\232\202\350\232\201\350\257\276\345\240\202(\346\257\217\347\211\271\345\255\246\351\231\242)-2\346\234\237-Netty\351\253\230\347\272\247.docx" new file mode 100644 index 0000000..ba39f71 Binary files /dev/null and "b/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/\350\232\202\350\232\201\350\257\276\345\240\202(\346\257\217\347\211\271\345\255\246\351\231\242)-2\346\234\237-Netty\351\253\230\347\272\247.docx" differ diff --git "a/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/\350\232\202\350\232\201\350\257\276\345\240\202\347\211\210\346\234\254-SpringBoot.docx" "b/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/\350\232\202\350\232\201\350\257\276\345\240\202\347\211\210\346\234\254-SpringBoot.docx" new file mode 100644 index 0000000..d231762 Binary files /dev/null and "b/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/\350\232\202\350\232\201\350\257\276\345\240\202\347\211\210\346\234\254-SpringBoot.docx" differ diff --git "a/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/\350\246\201\346\261\202.txt" "b/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/\350\246\201\346\261\202.txt" new file mode 100644 index 0000000..2f3cc76 --- /dev/null +++ "b/\350\217\234\351\270\237\350\246\201\351\243\236\345\255\246\344\271\240\347\254\224\350\256\260/\350\246\201\346\261\202.txt" @@ -0,0 +1,46 @@ +
+ +
+ +action的值是url,如可以直接写成aa.html,点提交就会跳转到该页面。 +也可以跑到后台,通过后台控制跳转 +这种方式是直接在form上定义,点击提交按钮就会提交 +另外一种方式,是用js来写提交函数 + +document.form1.username.value; + +如果是web项目,直接在webRoot-web-inf-lib添加 +如果是java项目,先在项目根目录下创建source folder,复制jar包 +,然后add to buildpath + +cmd窗口,netstat -ano可以查找pid, + +Junit4 单元测试 +跟src同级目录添加一个source folder,在测试类的方法前加上@Test注释 +Integer i1 = 128;Integer i2 = 128; +i1 == i2;//false i1.equals(i2);//true + +反射:很多框架的东西,都是通过配置文件,通过反射解析,创建实例,获得方法 + + +今日复习点:dom4j 用saxReader来获得解析器;断点调试;tomcat服务器 +查看占用端口的应用程序:cmd窗口 netstat -ano,找到pid,任务管理器结束进程 + + + + +servlet:生命周期---创建实例>初始化>提供服务>销毁 + + + +渐变灰滤镜-----平衡天空和地面曝光(本来是光差比较大) + +java基础,spring,hibernate,mybatis,struts,sql语句 + + + + + + + +