- 博客(45)
- 收藏
- 关注
原创 NoSql与RDBMS的对比
NoSql出现的原因是因为有很多应用不需要使用RDBMS的特性(强一致性以及join查询),而这些特性还成为了阻碍(如join限制了分片等),以下对比了两种数据库的特性,以便于更好地进行技术选型。特性RDBMSNoSql强一致事务支持,ACID特性不支持,BASE特性SQL语句(跨表join)支持不支持水平扩展(分片)较难支持,但也有proxy等方案可以支持较容易支持,MongoDB天然支持分片数...
2018-03-16 17:59:58
1322
原创 实现简单的代码热替换
package com.hotswap; import java.io.File; import java.io.FileInputStream; import java.io.IOException; /** * Created by huangzhw on 2016/9/8. */ public class HotSwapTest { public static void ma...
2016-09-08 19:24:09
1725
原创 Mysql备忘录
子查询 分类(按是否与外部查询相关) 关联子查询:每行外部查询都会触发一次关联子查询. 非关联子查询:子查询可以独立运行,在整个查询中只查询一次. 分类(按位置) select 位置的子查询:要求该子查询必须返回单个值(单行+单列). from 位置的子查询:有视图的意味在里面,相当于返回一张新表. where 位置的子查询:最复杂. demo user表 ...
2016-09-04 23:35:36
512
原创 logback学习笔记
日志级别 Trace < Debug < Info < Warn < Error. Configuration节点 属性 scan:若为true,则监听配置文件变化,变化后重新加载 scanPeriod:监听变化的周期,单位为毫秒。 子节点 logger:用来设置某一个包或者具体的某一个类的日志打印级别以及指定 root:一个特殊的logger,当一条日...
2016-08-29 18:53:38
939
原创 Apache Comons+Google Guava
Apache Commons Commons lang3 //包含以下便捷工具类 1.StringUtils StringUtils.isBlank(""); // null -> true," " -> true StringUtils.isEmpty(""); //null -> true,"" -> true," " -&
2016-08-29 00:33:57
1855
原创 Java与数据结构
使用java实现的一些数据结构 堆 import java.util.ArrayList; import java.util.List; /** * Created by huangzhw on 2016/7/27. */ public class T { public static void main(String[] args) {...
2016-07-28 16:54:27
358
原创 java插入式注解
最近在公司遇到了使用的类库lombok,好奇底层实现,探索得知是使用插入式注解实现的. 插入式注解是在代码编译时,通过特殊的插入式注解解释器,对语法树进行改造,使得根据注解添加实例域/方法成为可能. 以下为代码: //简单的一个注解 /** * @author doggy * Created on 2016-07-21. */ @Retention(Retenti...
2016-07-22 00:55:37
1516
原创 SpringMVC注解
先谈SpringMVC的访问过程 一个SpringMVC的请求到来时,会先由DispatcherServlet进行拦截. DispatcherServlet调用Handler Mapping进行Controller选择,如post转发给Controller的method,静态资源直接返回等等. 将请求参数传给Controller,Controller对数据进行处理. Controlle...
2016-07-10 17:30:06
3691
原创 JVM解析与分派
jvm中关于方法调用的指令有invokestatic,invokespecial,invokevirtual,invokeinterface以及invokedynamic五种。 其中invokestatic与invokespecial指令在解析完成(编译完成)后就能确定所要调用的方法。 指令 产生情况 invokestataic 调用静态方法 invok...
2016-07-07 00:58:35
1099
原创 JDK动态代理
一个动态代理的实例 package com;import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;/** * @author doggy * Created on 16-7-3. */ public class Tes
2016-07-05 11:57:41
374
原创 Spring切面
基本概念 通知(Advice):定义了一个切面该干什么(what)以及什么时候应用(when).spring的通知类型有五种: before:在方法调用之前. after:在方法调用之后,无论方法是否正常返回. after-returning:在方法正常返回之后应用. after-throwing:在方法出现异常时调用. around:该通知将包住整个方法. 连接点(join point):所有可
2016-07-05 11:43:00
950
原创 spring注解
注解的使用,首先编写一个注册文件Configure.java,并用@Configuration注解,然后使用注解容器类加载bean即可. @Configuration @ComponentScan(basePackages = {"music"},excludeFilters = {@ComponentScan.Filter(value = MF.class)}) public class Conf
2016-07-04 00:54:52
3054
原创 linux基础
设备 字符设备,表示的是每次接受一个字数输入,串行输入字符的设备,如键盘. 块设备,表示的是类似于硬盘/内存等可以随机地址存取的设备. 特殊设备. 特殊设备列表 /dev/sdtin:标准输入,也就是终端界面输入,cat命令的默认数据源. # cat [/dev/stdin] > file //从/dev/stdin数据源读取数据,并输出重定向到file. # some input # c
2016-06-26 17:55:17
455
原创 线程安全之可见性、有序性以及原子性
可见性:一个线程对主内存的修改可以及时的被其他线程观察到。 有序性:一个线程观察其他线程中的指令执行顺序,由于指令 重排序的存在,该观察结果一般杂乱无序。 原子性:提供了互斥访问。 特性 操作 可见性 可以由final(不会修改)、volatile(强制更新+读取主内存)以及synchronized(在unlock时会刷新所有已修改数据到主内存,lock时会从主内存重新加载数据)实现
2016-06-25 18:46:49
3115
原创 java volatile关键字的讨论
//一个volatile的用例 //Thread A init(); initlized= true;//Thread B while(!initlized){ sleep(); } //volatile变量的作用如下,保证了线程B使用initlized变量时,从 主线程读取,而不是使用工作线程的变量(变量可见性)。保证了线程A 中的initlized=true会在init()方法后执行(禁
2016-06-25 17:35:56
618
原创 invokedynamic与lambda表达式
本文主要是探讨lambda表达式是如何被虚拟机执行的. invokedynamic的执行 在虚拟机中,每条invokedynamic指令出现的位置,都称为一个动态调用点.该指 令接受一个u2的参数,该参数指向常量池中的一个InvokeDynamic_info. 每个InvokeDynamic_info由两部分组成,分别是指向NameAndType以及指向BootStrapMethod的
2016-06-24 16:58:33
2775
1
原创 java继承之属性与方法访问
以下讨论都是基于从子类实例进行属性/方法访问出现的情况.建议先看文章-jvm解析与分派 1.从父类方法(未重写)访问属性时,永远都只使用父类属性.public class Test { public static void main(String[] args) throws Exception{ F f = new S(); f.prt();// --> 返
2016-06-11 16:23:44
2486
原创 一个简单的epoll使用例子
核心代码,所有代码在这里下载#include "unixnet.h" #include "chat.h" #include "sys/epoll.h"/** * 改进说明:使用epoll进行事件回调,多用户可以处于输入命令状态(不再阻塞在登陆处) */int main (int argc, char *argv[]) { int listen_fd; socklen_t cli_
2016-06-10 13:25:02
1064
原创 Hibernate与数据库事务
Hibernate异常 1.Hibernate5/JPA抛出的异常都是RuntimeException异常. 2.如果一个持久化上下文运行在一个JTA事务下,那么抛出的大部分JPA异常(严重异常)会自动将当前事务状态设置为Rollback除了几个异常,分别是(NoResultException;NonUniqueResultException;QueryTimeoutException;LockTi
2016-06-10 13:23:22
707
原创 java异常体系
基类是Throwable,直接子类有Error以及Exception. 其中Error表示的是,系统级别的错误,是一个unchecked错误,不可抛出,不可catch,尽量在系统级别处理. Exception分为checked Exception与unchecked Exception.其中unchecked Exception等价于是RunTimeException及其子类,该类异常可以直接抛出处
2016-06-10 13:22:45
515
原创 mysql MVCC之InnoDB实现
先给出几个概念mysql中的RR隔离级别不会出现幻读。 MVCC控制过程中,mysql会往每条数据附加三个列,分别是 DB_TRX_ID(最后更新(insert/update/delete)数据的事务id与 一个标志位标识该记录是否为删除记录)、DB_ROLL_PTR(回滚指 针)与DB_ROW_ID(自增,用于标识数据的更新时间). 每个事务开始时系统会分配一个事务号,该事务号递增。 MV
2016-06-10 13:22:17
644
原创 Clojure小教程(更新中)
什么是函数式编程? 特点1:函数是一等公民,即与其他基本类型处于等价地位,可以被返回,可以被赋值也可以作为参数.python js clojure都支持这点. 特点2:更多的表达式,减少过程.即每个语句尽量都是计算并返回计算结果.所有的函数都要有返回值(可以为nil). 特点3:没有副作用(side-effect),即函数就是单纯的执行计算,不改变外部变量.(改变外部变量最简单的就是修改一个全局变量
2016-06-10 13:19:50
1091
原创 JDK1.8新特性
javac -source 1.7 -target 1.8 T.java 表示源文件版本为1.7,编译成的字节码使用1.8 lambda表达式,即由用户来提供行为的具体实现. /** * @author Sunset * Created on 2016/05/15. */ public class T { public static void main(String[]
2016-06-10 13:19:01
2272
原创 java泛型
支持泛型类以及泛型方法 class MyGen<T,E>{ //<X>类型声明在返回值前,若未在类中声明,则必须在方法里声明 public static <X> X myCast(Object o){ return (X)o; } } //类型推导,由前面的引用进行 String s = MyGen.myCast("lalala"); //显式调用 Strin
2016-06-10 13:18:13
321
原创 shell简单编程
赋值与循环分支 $x 用于取变量x的值 $1 表示第一个参数,$#表示参数个数,shift移动一个参数。 let i=$x+$y,为整数操作赋值,所以必须有两个以上操作数.当只有一个操作数时使用,i=$x.#!/bin/bash echo "please input num:" read num echo "the num is $num" #声明变量,不能有空格 sum=0 i=0 # while
2016-06-10 13:17:38
343
原创 JPA持久化上下文与对象状态
hibernate 认为一个有id的新对象为detached. 自动脏检查可以通过继承org.hibernate.CustomEntityDirtinessStrategy并设置hibernate.entity_dirtiness_strategy来自定义. JPA提供一个持久化上下文作为一级缓存,提供自动脏检查.对应某个id的实例在持久化上下文中只有一个对象. Hibernate,find时总是
2016-06-10 13:17:03
3801
原创 jpa 脚本生成数据库以及数据完整
<prop key="hibernate.hbm2ddl.import_files_sql_extractor"> org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor</prop> <!--系统执行create语句的时间点之前(then),当时间点选择为metadata则使用自动生成,设置为scrip
2016-06-10 13:16:17
1641
原创 many-to-many
//-----------------------------关联表--------------------------------- @Entity @Table(name = "CATEGORY_ITEM") @org.hibernate.annotations.Immutable public class CategorizedItem { //使用符合主键 @Embeddable
2016-06-10 13:15:42
411
原创 Hibernate OneToOne关联
单向-共享主键 //Address不包含任何到User的信息 //使用optional=false,确定addr非空,这样hibernate不用检查addr是否为空,才能使用懒加载 //使用@PrimaryKeyJoinColumn使用Address的主键作为User的外键以及主键 //添加时需要先添加Address再添加User,并手动设置user.setId(addr.getId()) @Ent
2016-06-10 13:15:15
692
原创 OneToMany/ManyToOne关联
@ManyToOne 以及 @OneToMany //一般选择在多端进行管理,一端放弃,使用级联保存等,即多端添加一个外键列 //Item <-1----------*-> Bid @Entity class Item{ //该集合方便查询,orm的意义. // mappedBy表明其放弃管理关联,由多端进行管理 //cascade表明了级联操作,PERSIST使用时必须建立起B
2016-06-10 13:14:37
544
原创 Hibernate映射集合(JDK以及嵌入式值类)
JDK内置的集合类型有Set、List、Collection、Map四种 //Set与Collection的区别在于是否允许重复元素,java未提供Collection的实现。 //任意的值类型集合映,都需要@ElementCollection,其有两个属性fetch以及targetClass,其中targetClass在集合不是泛型集合时是必须指定的。 //通过@CollectionTable来指
2016-06-10 13:14:00
550
原创 hibernate级联删除错误
@OneToMany配置了cascade=CascadeType.REMOVE,但是在delete时还是报了一个外键引用,删除错误。 原因是,在delete时未从数据库重新加载对象(get/load)。导致删除对象时,该对象只有主键存在,关联集合为null,所以不执行级联删除。 所以在删除一个对象时,一定要从数据库中加载出来再删除!!!!!
2016-06-10 13:13:05
474
原创 HIbernate继承映射策略
策略选择: 1)不需要多态关联以及从父类查询时,使用@MappedSuperclass/TABLE_PER_CLASS,偏向于TABLE_PER_CLASS,因为万一有少量需要关联、查询可以在牺牲性能的前提下满足(使用union)。 2)当需要多态以及从父类查询(较多),而且子类较父类的属性变化不大(新增实例域少),可以考虑使用SINGLE_TABLE。 3)当需要多态以及从父类查询(较多),
2016-06-10 13:12:10
735
原创 mysql自定义函数
//注意规避mysql关键字,可能需要重定义结束符号符delimiter $$ //声明函数:参数类型以及返回类型 create function insertY(start int(11),end int(11)) returns varchar(255) //开始函数实现 begin //定义一个变量 declare i int(11); //给变量赋值
2016-06-10 13:10:23
318
原创 hibernate映射值类型
JDK基本类型 @Transient:用于将某个属性设为瞬时,其不会被映射到数据库,默认的所有属性都将映射到数据库 @Access:用于设置访问属性的策略,当值为@Access(AccessType.PROPERTY)时使用setter,否则使用field。可用于类/具体属性上 @Column:用于进行属性-列名映射以及指定约束(非空、唯一、是否可更新等) @Formula:用于在query时,从数
2016-06-10 13:09:28
1664
原创 hibernate实体映射的一些可选优化/配置
//自动为所有的实体类名/实例域名添加引用``,避免数据库的关键字冲突!!! //在hibernate5以及配置了dialect之后有效 <prop key="hibernate.auto_quote_keyword">true</prop>//使用KK作为搜索类名导入到HQL中,即from KK @Entity(name="KK")//使用命名策略,为映射到的数据库起别名,注意到linux环境下,
2016-06-10 13:08:19
656
原创 Hibernate主键生成策略
/** 在所有策略中,只有assigned策略的主键是自己定义的,其余在调用save/persist保存到数据库时会自动生成一个id,所以在这之前设置的id没有意义,其将被覆盖。 正常情况下enhanced-sequence可以满足选择,最好选择pre-insert类型的策略,特殊情况可以自己分配,需要分布式合并数据库可以使用uuid2 */ /* *JPA自带三种生成策略 *
2016-06-10 13:06:47
466
原创 jta+spring4+hibernate5/jpa2配置
spring配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.
2016-06-10 13:04:58
4504
原创 序列化与反序列化
序列化基础: 即使用ObjectOutputStream与ObjectInputStream进行对象与字节流的转换,一般需要提供一个序列化id。 tip:默认序列化时若一个域被修饰为transient,则不序列化该实例域。 import java.io.*; public class Test { public static void main(String[] args) throws E
2016-06-10 12:58:02
385
原创 NIO实例
服务端程序 package main;import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.c
2016-06-10 12:56:08
386
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅