Java
文章平均质量分 62
一只小小小蜜蜂
这个作者很懒,什么都没留下…
展开
-
遇见JSP
jsp页面的组成:静态内容,指令,表达式,脚本,声明,注释指令:page指令:页面顶端,包含多个page指令include指令:将一个外部的jsp文件嵌入当前页面,同时解析这个页面的jsp指令taglib指令:jsp标签定制行为,使用jsp标签库自定义标签脚本:可以在jsp页面执行的java代码声明:在jsp页面中定义变量和方法表达式:在jsp页面中执行表达式元素原创 2017-06-05 22:51:01 · 299 阅读 · 0 评论 -
Servlet工作原理解析
1 Servlet容器Tomcat容器分四个等级,真正管理servlet的容器是context容器,一个web应用对应一个context容器,也就是servlet运行时的servlet容器。添加一个web应用创建一个standcontext容器,并且给这个context设置必要的参数,url和path分别代表这个应该在tomcat中的访问路径和物理路径。2 web应用的初始化应用的初始化主要是解析...原创 2018-03-12 21:19:47 · 9170 阅读 · 0 评论 -
javaweb高并发优化(慕课)
1 系统分析,主要分析高并发系统瓶颈,关注事物、锁、gc和网络延迟带来影响2 动静分离,将静态资源保存在CDN上,动态资源通过接口获取3使用缓存,从redis中读取速度大于数据库中读取4服务和缓存集群...原创 2018-04-27 17:54:17 · 612 阅读 · 0 评论 -
ByteBuffer
FileChannel in=new FileInputStream("D:\\abr.txt").getChannel(); File file=new File("D:\\abc.txt"); if (!file.exists()){ file.createNewFile(); } ByteBuffer byteBuffer=ByteBuffer.allocate(102...原创 2018-07-16 13:43:58 · 200 阅读 · 0 评论 -
ByteBuffer编码和解码设置
FileChannel fileChannel2=new FileInputStream("D:\\abr.txt").getChannel();Charset charset=Charset.forName("utf-8");ByteBuffer byteBuffer=ByteBuffer.allocate(BIZE);while (fileChannel2.read(byteBuff...原创 2018-07-16 14:06:07 · 3291 阅读 · 0 评论 -
缓存器细节
ByteBuffer由数据和可以高效地访问以及操作这些数据的四个索引组成,这四个索引是:mark(标记)、position(位置)、limit(界限)和capacity(容量)部分方法:capacity():返回缓存区的容量clear():清空缓存区,将position设置0,limit设置为容量,可以调用这个方法覆写缓存区flip():把limit设置为position,positon设置为0,...原创 2018-07-16 14:53:57 · 283 阅读 · 0 评论 -
读书笔记:持有对象
List保存有序可以重复元素ArrayList长于随机访问元素,但在List的中间插入和移除元素时比较慢。LinkedList在list中间插入和移除元素性能高,随机访问速度慢,可以封装队列、栈和双向队列Stack 栈,后进先出的容器set:保存无序不能重复元素HashSet 使用散列,查询速度快TreeSet存储在红黑数据结构,元素保持排序状态Map:hashmap 设计快速访问;treemap...原创 2018-06-28 09:37:01 · 179 阅读 · 0 评论 -
读书笔记:解决共享资源的竞争
1.基本上所有的并发模式在解决线程冲突,都采用序列化访问共享资源的方案,意味着在给定时刻只允许一个任务访问共享资源。通常就是在代码前加上一条锁的语句来实现,这就使得一段时间内只有一个任务可以运行这段代码。因为锁语句产生了一种互斥的效果,所以这种机制也称互斥量。2.java提供关键字synchronized形式,为防止资源冲突提供了内置支持。当任务要执行synchronized关键字保护的代码,...原创 2018-07-18 08:37:14 · 489 阅读 · 0 评论 -
读书笔记:线程间的协作
1.锁机制可以很好的解决线程之间资源的竞争访问,通过wait和notify实现线程间的握手合作wait:调用sleep方法锁并没有施放,调用yield也是同样的情况。当一个任务在方法里遇到了对wait的调用的时候,线程的执行被挂起,对象上的锁被施放,这意味着另外的一个任务可以获取这个锁,因此该对象的其他shnchronized方法可以在wait期间被调用,这一点很重要,因为这些其他的方法通常将...原创 2018-07-18 11:13:51 · 192 阅读 · 0 评论 -
读书笔记:notify和notifyAll
1.由于在技术上可能有多个任务在单个对象上出于wait()状态,因此使用notifyAll()比notify()更安全2.notify()在众多等待同一个锁的任务中只有一个被唤醒,如果使用notify,必须保证被唤醒的是正确的任务;为了使用notify,所有任务必须等待相同的条件,如果有很多任务等待不同的条件,不能知道是否唤醒了正确的任务;当条件发生变化时,必须只有一个任务能从中受益。注:...原创 2018-07-18 11:23:19 · 3492 阅读 · 0 评论 -
读书笔记:数组
为什么是数组?数组就是一个简单的线性序列,元素的访问速度非常快,但是这种速度的代价就是在其生命周期内,数组对象的大小是被固定的;数组可以在编译器来提醒你插入或取出合适的数据类型;数组可以保存基本数据类型,容器是基于自动拆包装包才可以保存基本类型;在保持方面,对象数组保存对象的引用,基本数据类型保存值。数组和泛型没有很好的结合,不能实例化具有参数化类型的数组。Arrays实用功能:复制数组:数组中保...原创 2018-07-12 14:31:00 · 181 阅读 · 0 评论 -
读书笔记:死锁
概念:某个任务在等地另外一个任务,后者又在等待别的任务,一直下去,直到这个链上的任务又在等第一个任务释放锁,这就得到了一个人任务之间互相等待的连续循环,没有哪个线程能够继续,叫死锁。同时满足四个条件就发生死锁:1.互斥条件,任务使用的资源中至少有一个是不能共享的2.至少有一个任务它必须持有一个资源且正在等待获取一个当前被别的任务持有的资源3.资源不能被任务抢占,任务必须把资源当做普...原创 2018-07-18 14:56:12 · 201 阅读 · 0 评论 -
读书笔记:set和map
Set和存储顺序:Set(interface):存入set的元素都必须是唯一的,set不保存重复元素。加入set的元素必须定义equals()方法以保证对象的唯一性。Set和Collection有完全一样的接口。Set接口不保证元素的次序HashSet:为快速查找而设计的Set,存入HashSet的元素必须定义HashCode();TreeSet:保持次序的Set,底层为树结构,使用它可以从set...原创 2018-07-12 16:46:27 · 164 阅读 · 0 评论 -
hashcode和equals
HashCode最重要的因素:1.无论何时,对同一个对象调用hashcode()都应该生成同样的值。2.想要使用hashcode实用,必须速度快,并且有意义,也就是,它必须基于对象的内容生成散列码,散列码不必要是独一无二的,更应该关注的是速度,但是通过hashcode()和equals()这两个方法唯一确定对象的身份。3.由于在生成桶的下标前,hashcode()还需要做进一步的处理,所以散列码的...原创 2018-07-13 09:13:24 · 177 阅读 · 0 评论 -
读书笔记:新类库中的构件
1.CountDownLatch:被用来同步一个或多个的同步任务,强制它们等待由其他任务执行的一组操作完成。可以向CountDownLatch对象设置一个初始计数值,任何在这个对象上调用wait()方法都将阻塞,直到这个计数值到达0。其他任务在结束工作的时候,可以在这个对象上调用countDown()来减小这个计数值。典型用法:把一个任务分割成n个独立的可解决任务,并创建值为0的CountDown...原创 2018-07-19 09:37:11 · 282 阅读 · 0 评论 -
容器的选择
List选择:1.对于有数组组成的ArrayList,无论列表的大小如何,get和set访问速度很快和一致。LinkedList,访问时间对于较大的列表明显增加访问时间2.在ArrayList列表插入元素,必须创建空间并把所有的引用向前移动,这会随着Arraylist的尺寸增加带来负担;LinkedList底层基于链表,会在每一个位置保存前一个元素、后一个元素的引用和自身值,只需要链接新的元素即可...原创 2018-07-13 10:11:48 · 408 阅读 · 0 评论 -
读书笔记:性能调优
1.通常使用Synchronized关键字同步代码,可读性好,如果涉及性能问题,可以使用显式的Lock对象2.免锁容器:通用策略:对容器的修改可以与读取操作同时发生,只要读取者只能看到完成修改的结果即可。修改是在容器数据结构的某个部分的一个单独的副本上执行的,并且这个副本在修改过程中不可视。只有当完成修改时,被修改的结构才会自动的和主数据结构交换,之后读取者就可以看到这个修改了。有Concur...原创 2018-07-19 10:03:53 · 248 阅读 · 0 评论 -
JVM内存管理
1 物理内存和虚拟内存物理内存就是通常所说的RAM(随机存储器),每一个进程在的内存空间在逻辑上是独立的。虚拟内存:使多个进程在同时运行时可以共享物理内存,但物理内存在逻辑依旧保持独立,还可以扩展内存的地址空间。2 Java中需要内存的组件2.1 Java堆:用来保存java对象的内存区域,堆的大小在JVM启动就一次性向操作系统申请完成。-Xmx表示堆的最大大小,-Xms表示初始化大小。内存的管理...原创 2018-03-11 15:22:02 · 191 阅读 · 0 评论 -
Spring事务管理
事务:作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行四大特性原子性:事务是不可分割的原子工作单位,要么全部执行要么全部不执行一致性:事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。隔离性:由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发原创 2017-10-10 15:25:53 · 226 阅读 · 0 评论 -
初涉MySql性能优化
1.为什么要进行数据库性能优化a避免因数据库连接Timeout导致服务器报错(以5开头,服务器内部错误)b节省资源的开销(数据冗余 不合适的数据类型导致存储空间浪费)c提高查询速度2.该怎么优化:可以从SQL及索引 数据库表结构 系统配置和硬件四个方面考虑 4.SQL优化(针对查询优化):开启MySql慢查日志对有效率问题的sql进行监控,然后用mysqldum原创 2017-10-01 13:57:09 · 387 阅读 · 0 评论 -
session和cookie
session和cookie区别:1、session保存在服务端,cookie保存在客户端2、session以key-value形式保存,value是object。cookie保存的文本类型3、session生命周期和会话的生命周期同步,cookie永久存在4、session安全性高,cookie安全性差。原创 2017-06-06 22:54:48 · 173 阅读 · 0 评论 -
笔记:关于注解
1概念:Java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法。2常用分类:源码注解:只有在源码中存在的注解编译时注解:在源码和编译生成的.class文件中存在运行时注解:在运行阶段起作用,甚至可以影响到程序运行的逻辑。元注解:注解的注解@Target: @Target说明了Annotation所修饰的对象范围:Annotation可被用于 package原创 2017-06-07 10:48:02 · 204 阅读 · 0 评论 -
遇见Servlet
1、定义:servlet是运行在服务端的小程序,一个servlet就是一个java类,可以通过请求响应的编程模型来访问驻留在服务器内存中的小程序2、Tomcat容器等级 从大到小依次是Enginer Host Servlet 和Context,Servlet容器管理context容器,一个context容器对应一个web工程3、servlet的实现:继承HttpServlet 重写相原创 2017-06-04 09:17:27 · 401 阅读 · 0 评论 -
Spring依赖注入常用的两种方式
Spring中依赖注入:定义对象之间的彼此依赖,常用的两种注入方式:setter方法和构造器1、setter方法:在容器中声明变量并插入对应setter和getter方法,在对应xml文档中配置,代码片段:public class AnimalSer { private Cat cat; public Cat getCat() { return cat; } publ原创 2017-06-19 20:57:20 · 856 阅读 · 0 评论 -
Spring注入值到bean四中方式
Bean代码如下public class Cat implements HelloWorld{ private String name; private int age; public Cat(String name, int age) { super(); this.name = name; this.age = age; } public Cat(){ super原创 2017-06-19 21:40:00 · 297 阅读 · 0 评论 -
Spring内部bean实例
使用情形:在spring框架中,bean A只作为另外一个bean B的属性,那么可以把A作为B的内部bean实例。内部bean实例支持setter注入和构造器注入。Cat对象是AnimaSer对象的一个内部bean实例AnimaSer类代码:public class AnimalSer { private Cat cat; public AnimalSer( ){ s原创 2017-06-19 21:55:29 · 310 阅读 · 0 评论 -
Spring bean的作用域
Spring框架中,bean 的作用域有如下五种:1.单例:每个spring的Ioc容器返回来一个bean实例(框架默认)2.原型:当每次请求时候都返回来一个bean实例3.请求:每个http请求返回来一个bean实例4.会话:每个http会话返回来一个bean实例5.全局会话:返回全局会话的一个http实例(常应用于多个模块的超大系统)后三者多用于web开发。1、声明原创 2017-06-19 22:50:23 · 282 阅读 · 0 评论 -
Spring中List Set Map 和Date注入
1、bean类代码:package learnBean;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.HashSet;import interfaceSpring.HelloSpring;public class BeiJingBean im原创 2017-06-20 12:25:12 · 457 阅读 · 0 评论 -
Spring Bean的继承
在Spring框架中,继承是为了支持一个bean共享另外一个bean的属性、值或配置。子Bean可以继承到父Bean的属性、配置或值,也可以有选择的覆盖某些值或属性xml语法如下: 注:parent标签指定父bean的id,id是子bean的id,并把父bean的name属性重新赋值。原创 2017-06-20 20:17:02 · 323 阅读 · 0 评论 -
Spring bean初始化和销毁方法
在Spring框架中,有三种方式可以给bean添加初始化和销毁方法,分别是实现InitializingBean和DisposableBean接口、xml文档中配置和使用@PostConstruct和@PreDestroy注解。Bean代码如下:package bea;import javax.annotation.PostConstruct;import javax.annotati原创 2017-06-20 20:57:44 · 510 阅读 · 0 评论 -
Spring自动组件扫描
Spring框架是能够自动扫描、检查和预定义的项目并实例化bean,从而免去繁琐的bean类声明在xml文件中。1、Bean类代码:import org.springframework.stereotype.Repository;@Repositorypublic class customDao { @Override public String toString() {原创 2017-06-20 23:32:01 · 301 阅读 · 0 评论 -
java接口回调
两个类:Dog和Cat,一个接口CallBack。1 Dog类,实现接口CallBack接口:public class Dog implements CallBack { private Cat cat; public Dog(Cat li){ this.cat=li; } public void ask(String s){原创 2017-08-03 14:33:34 · 319 阅读 · 0 评论 -
Junit单元测试笔记
JUnit是用于编写和运行测试的开源java框架,如下特点:1、提供了注释,以确定测试方法,常用注解有@Test、@Before、@BeforeClass、@After、@AfterClass等@Testpublic void method() 测试注释指示该公共无效方法它所附着可以作为一个测试用例。 @Beforepublic void method() Before原创 2017-07-26 17:32:45 · 294 阅读 · 0 评论 -
SpringAOP使用注意三点
1.不要把业务逻辑代码放入aop中,应该放入非功能性的需求,比如 权限控制 缓存控制 事物控制审计日志 性能监控 分布式追踪 异常处理2.无法拦截static final private方法3.无法拦截内部方法调用原创 2017-09-14 22:17:41 · 711 阅读 · 0 评论 -
myBatis读书笔记
一、ORM映方式:1 数据表映射类2 数据库表的行映射对象(对象实例)3 数据库的列(字段)映射对象属性二、SqlSessionFactory单个数据库映射关系经过编译后的内存镜像。每一个MyBatis的应用程序都以一个sqlSessionFactory对象实例为核心,一旦被创建,应该在执行期间一直存在,线程安全,采用单例模式。三、SqlSession对象应用程序和原创 2017-09-02 17:51:57 · 298 阅读 · 0 评论 -
RESTful风格WebService简介
RESTful是一种设计风格不是标准,关注核心是要处理的资源,通过RUL触发执行。是一种比RPC(远程调用)更轻量级、更安全的服务端和客户端交互方式,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。可有多种实现方式,如java中spring一、幂等性和安全:1.幂等性数学概念: f(f(x)) = f(x),x被函数f作用一次和无限次结果一样,即幂等,反之非幂等。原创 2017-09-22 13:02:19 · 3789 阅读 · 0 评论 -
笔记-Mysql索引
原创 2018-11-14 09:31:17 · 220 阅读 · 0 评论