
Java基础
文章平均质量分 88
还是转转
https://github.com/howely
展开
-
在Spring中注入动态代理Bean
下面仿照Mapper的实现原理来自定义注解和代理工厂,实现自定义注入动态代理Bean。Class原创 2024-04-28 18:05:26 · 2191 阅读 · 4 评论 -
redis原理和使用-基本特性
上一篇blog中介绍了redis的分布式安装和集群方式,本文将介绍redis支持的数据结构,持久化方式和数据过期策略。redis支持的数据结构Redis支持的数据结构类型有:String(字符串),List(列表),Set(集合),Hash(哈希),Zset(有序集合)。各种数据类型的操作如下:增加删除查询返回长度Stringset或msetdelget...原创 2020-05-05 17:39:52 · 288 阅读 · 0 评论 -
堆外内存的使用
本文主要介绍了堆外内存的原理,使用和回收。原创 2020-04-28 21:26:35 · 605 阅读 · 0 评论 -
网络IO模型
BIO服务端: public class SocketServer { public static void main(String[] args) throws Exception { // 监听指定的端口 int port = 8080; ServerSo...原创 2019-07-23 11:22:00 · 209 阅读 · 1 评论 -
对象相等比较
String的相等比较对于String类型而言,一般用“==”或者equales做相等比较,前者比较字符串的引用,后者比较字符串的值。字符串常量的值存储于常量池中,只要值相同,那么引用的就是同一个字符串常量,也就是说,==和equals效果一样。字符串对象存储于堆中,不同的对象在堆上的内存地址是不一样的。因此,创建两个值相等的String对象,其引用的地址是不相等的。也就是说,用 == 比较...原创 2019-03-08 13:34:45 · 1306 阅读 · 0 评论 -
Xml外部实体注入漏洞(XXE)与防护
Xml外部实体注入(XXE)除了json外,xml也是一种常用的数据传输格式。对xml的解析有以下几种常用的方式:DOM,SAX,JDOM,DOM4J,StAX等。然而这几种解析方式都可能会出现外部实体注入漏洞,如微信支付的回调就出现过(见参考资料2)。XML文档结构包括xml声明,DTD文档类型定义(可选)和文档元素,如下图所示: DTD的作用是定义XML文档的合法构建模块,可以...原创 2018-09-12 13:58:59 · 26063 阅读 · 5 评论 -
Java8新特性
Java8(又称为JDK.8)是2014年3月发布的一个重要版本,新增了许多重要特性,如Lambda表达式,方法引用,函数式接口,Stream API,Date Time API,新工具等。下面将简要介绍。Lambda表达式在使用1.8以上级别的编译器时,如果可以使用Lambda表达式,IDE会有提示。举个栗子如下:public static void main(String[...原创 2018-08-23 15:12:44 · 249 阅读 · 0 评论 -
前端参数请求和后端参数接受
参数请求与接收HTTP协议中定义了很多与服务端交互的方法,其中最基本的有四种,分别是GET,POST,PUT,DELETE,对应增删改查四种操作,最常用的是GET和POST。请求头类型Content-Type主要有:application/x-www-form-urlencoded,multipart/form-data和application/json。其中application/x...原创 2018-08-06 22:09:33 · 15720 阅读 · 0 评论 -
设计模式(3)
2.3 行为型模式行为型模式一共有11种,分别是模板方法模式(Template Method),策略模式(Strategy),命令模式(Command),中介者模式(Mediator),观察者模式(Observer),迭代器模式(Iterator),访问者模式(Visiter),责任链模式(Chain of Responsibility),备忘录模式(Memento),状态模式(State)和...原创 2018-08-01 20:11:32 · 177 阅读 · 0 评论 -
设计模式(2)
2.2 结构型模式结构型模式一共有七种。其中,适配器模式和装饰模式统称为包装模式,装饰模式和代理模式的类图基本相同,但目的不同。这些有相似目的或者有相似结构的模式需要对其概念辨析清楚,才能较好地掌握。下面将对结构型模式分别进行介绍。2.2.1 适配器模式适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法一起工作的两个类能够一起工作。说白了就是功能提...原创 2018-07-17 20:41:05 · 210 阅读 · 0 评论 -
设计模式(1)
1 简介设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的是为了提高代码的可重用性、可读性和可靠性。设计模式代表了最佳的实践,通常被有经验的软件开发人员所采用,可以解决很多软件开发过程所面临的问题。设计模式是众多软件开发人员在长时间大量的实践中总结出来的。使用设计模式的根本原因是为了代码复用,增加可维护性。设计模式使用最广泛的地方是在框架中。因为...原创 2018-07-05 19:43:22 · 261 阅读 · 0 评论 -
JDK8版本时间和日期API简介
在Java8之前的版本中,Java处理日期、日历和时间的方式一直为社区所诟病,将Java.util.Date设定为可变类型,以及SimpleDateFormat的非线程安全使其应用非常受限。所以Java8引入了全新的处理时间日期的API。全新API的好处之一是明确了日期时间概念,例如:瞬时(Instant)、长短(duration)、日期、时间、时区和周期。不同于老版本,新API基于ISO标准日历...原创 2018-05-03 20:31:09 · 843 阅读 · 0 评论 -
@Value值注入及配置文件组件扫描方式
spring配置文件对应的是父容器,springMVC配置文件产生的是子容器,前者一般配置数据源,事务,注解等,当然还可以进一步将一些配置细化到其他xml中;后者一般配置控制层相关的,如静态资源,视图解析器等。系统启动的时候,先初始化父容器,然后初始化子容器。这里会涉及一个问题,如果配置组件扫描时都配置全组件扫描,就会导致service组件会被扫描两次,造成事务无法处理。所以最好在springMVC原创 2017-05-22 23:08:00 · 2568 阅读 · 2 评论 -
线程池
为了避免系统频繁地创建和销毁线程,可以让创建的线程进行复用。就像数据库连接一样,为了避免每次数据库查询时都重新建立和销毁数据库连接,可以使用数据库连接池维护一些数据库连接,让它们长期保持在一个激活状态,当系统需要使用数据库时,并不是重新创建一个新的连接,而是从连接池中获得一个可用的连接即可,反之当连接需要关闭时并不是真的把连接关闭,而是将这个连接“还”给连接池即可。通过这种方式可以节约不少创建和销毁原创 2017-03-31 20:28:31 · 1108 阅读 · 0 评论 -
线程安全对象简介
基本的线程安全对象有Vector,HashTable,还有经过Collections.synchronizedCollection()方法包装的集合对象。Java并发包中提供的安全类型有ConcurentHashMap,ConcurentLinkedQueue,CopyOnWriteArrayList,还有BlockingQueue的实现类型。另外还有Java原子包中提供的AutormicInteg原创 2017-03-30 22:49:12 · 3011 阅读 · 0 评论 -
虚拟机类加载机制
虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型。与那些在编译时需要进行连接工作的语言不用,在java里,类型的加载连接和初始化过程都是在程序运行期间完成的。这种策略虽然会令令加载时稍微增加一些性能开销,但是会为java应用程序提供高度的灵活性,java里天生可以动态扩展的语言特性就是依赖运行期动态加载和动态链接这个特点实原创 2017-03-17 17:39:20 · 222 阅读 · 0 评论 -
JVM内存模型与性能调优
jvm内存模型与内存错误Java虚拟机管理的内存将包含以下几个运行时数据区域:程序计数器、方法区,栈区,堆区,本地方法栈。(1)程序计数器是一块比较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来读取下一条需要执行的字节码指令。每个线程都有一个独立的程序计数器,以保存线程的状态。各线程的计数器之间互不影响,独立存储,我原创 2017-03-17 17:30:50 · 1023 阅读 · 0 评论 -
垃圾回收算法简介
垃圾回收算法原创 2017-03-02 22:05:48 · 331 阅读 · 0 评论