- 博客(45)
- 收藏
- 关注
原创 NoSql与RDBMS的对比
NoSql出现的原因是因为有很多应用不需要使用RDBMS的特性(强一致性以及join查询),而这些特性还成为了阻碍(如join限制了分片等),以下对比了两种数据库的特性,以便于更好地进行技术选型。特性RDBMSNoSql强一致事务支持,ACID特性不支持,BASE特性SQL语句(跨表join)支持不支持水平扩展(分片)较难支持,但也有proxy等方案可以支持较容易支持,MongoDB天然支持分片数...
2018-03-16 17:59:58 1196
原创 实现简单的代码热替换
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 1617
原创 Mysql备忘录
子查询分类(按是否与外部查询相关)关联子查询:每行外部查询都会触发一次关联子查询.非关联子查询:子查询可以独立运行,在整个查询中只查询一次.分类(按位置)select 位置的子查询:要求该子查询必须返回单个值(单行+单列).from 位置的子查询:有视图的意味在里面,相当于返回一张新表.where 位置的子查询:最复杂.demouser表...
2016-09-04 23:35:36 426
原创 logback学习笔记
日志级别Trace < Debug < Info < Warn < Error.Configuration节点属性 scan:若为true,则监听配置文件变化,变化后重新加载scanPeriod:监听变化的周期,单位为毫秒。子节点 logger:用来设置某一个包或者具体的某一个类的日志打印级别以及指定root:一个特殊的logger,当一条日...
2016-08-29 18:53:38 813
原创 Apache Comons+Google Guava
Apache CommonsCommons lang3//包含以下便捷工具类1.StringUtilsStringUtils.isBlank(""); // null -> true," " -> trueStringUtils.isEmpty(""); //null -> true,"" -> true," " -&
2016-08-29 00:33:57 1771
原创 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 303
原创 java插入式注解
最近在公司遇到了使用的类库lombok,好奇底层实现,探索得知是使用插入式注解实现的. 插入式注解是在代码编译时,通过特殊的插入式注解解释器,对语法树进行改造,使得根据注解添加实例域/方法成为可能. 以下为代码://简单的一个注解/** * @author doggy * Created on 2016-07-21. */@Retention(Retenti...
2016-07-22 00:55:37 1443
原创 SpringMVC注解
先谈SpringMVC的访问过程一个SpringMVC的请求到来时,会先由DispatcherServlet进行拦截.DispatcherServlet调用Handler Mapping进行Controller选择,如post转发给Controller的method,静态资源直接返回等等.将请求参数传给Controller,Controller对数据进行处理.Controlle...
2016-07-10 17:30:06 3613
原创 JVM解析与分派
jvm中关于方法调用的指令有invokestatic,invokespecial,invokevirtual,invokeinterface以及invokedynamic五种。 其中invokestatic与invokespecial指令在解析完成(编译完成)后就能确定所要调用的方法。 指令 产生情况 invokestataic 调用静态方法 invok...
2016-07-07 00:58:35 987
原创 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 337
原创 Spring切面
基本概念通知(Advice):定义了一个切面该干什么(what)以及什么时候应用(when).spring的通知类型有五种: before:在方法调用之前.after:在方法调用之后,无论方法是否正常返回.after-returning:在方法正常返回之后应用.after-throwing:在方法出现异常时调用.around:该通知将包住整个方法.连接点(join point):所有可
2016-07-05 11:43:00 817
原创 spring注解
注解的使用,首先编写一个注册文件Configure.java,并用@Configuration注解,然后使用注解容器类加载bean即可.@Configuration@ComponentScan(basePackages = {"music"},excludeFilters = {@ComponentScan.Filter(value = MF.class)})public class Conf
2016-07-04 00:54:52 2970
原创 linux基础
设备 字符设备,表示的是每次接受一个字数输入,串行输入字符的设备,如键盘.块设备,表示的是类似于硬盘/内存等可以随机地址存取的设备.特殊设备.特殊设备列表/dev/sdtin:标准输入,也就是终端界面输入,cat命令的默认数据源.# cat [/dev/stdin] > file //从/dev/stdin数据源读取数据,并输出重定向到file.# some input# c
2016-06-26 17:55:17 419
原创 线程安全之可见性、有序性以及原子性
可见性:一个线程对主内存的修改可以及时的被其他线程观察到。有序性:一个线程观察其他线程中的指令执行顺序,由于指令 重排序的存在,该观察结果一般杂乱无序。原子性:提供了互斥访问。 特性 操作 可见性 可以由final(不会修改)、volatile(强制更新+读取主内存)以及synchronized(在unlock时会刷新所有已修改数据到主内存,lock时会从主内存重新加载数据)实现
2016-06-25 18:46:49 3029
原创 java volatile关键字的讨论
//一个volatile的用例//Thread Ainit();initlized= true;//Thread Bwhile(!initlized){ sleep();}//volatile变量的作用如下,保证了线程B使用initlized变量时,从主线程读取,而不是使用工作线程的变量(变量可见性)。保证了线程A中的initlized=true会在init()方法后执行(禁
2016-06-25 17:35:56 548
原创 invokedynamic与lambda表达式
本文主要是探讨lambda表达式是如何被虚拟机执行的.invokedynamic的执行 在虚拟机中,每条invokedynamic指令出现的位置,都称为一个动态调用点.该指 令接受一个u2的参数,该参数指向常量池中的一个InvokeDynamic_info. 每个InvokeDynamic_info由两部分组成,分别是指向NameAndType以及指向BootStrapMethod的
2016-06-24 16:58:33 2656 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 2389
原创 一个简单的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 1030
原创 Hibernate与数据库事务
Hibernate异常1.Hibernate5/JPA抛出的异常都是RuntimeException异常.2.如果一个持久化上下文运行在一个JTA事务下,那么抛出的大部分JPA异常(严重异常)会自动将当前事务状态设置为Rollback除了几个异常,分别是(NoResultException;NonUniqueResultException;QueryTimeoutException;LockTi
2016-06-10 13:23:22 658
原创 java异常体系
基类是Throwable,直接子类有Error以及Exception.其中Error表示的是,系统级别的错误,是一个unchecked错误,不可抛出,不可catch,尽量在系统级别处理.Exception分为checked Exception与unchecked Exception.其中unchecked Exception等价于是RunTimeException及其子类,该类异常可以直接抛出处
2016-06-10 13:22:45 441
原创 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 585
原创 Clojure小教程(更新中)
什么是函数式编程?特点1:函数是一等公民,即与其他基本类型处于等价地位,可以被返回,可以被赋值也可以作为参数.python js clojure都支持这点.特点2:更多的表达式,减少过程.即每个语句尽量都是计算并返回计算结果.所有的函数都要有返回值(可以为nil).特点3:没有副作用(side-effect),即函数就是单纯的执行计算,不改变外部变量.(改变外部变量最简单的就是修改一个全局变量
2016-06-10 13:19:50 1006
原创 JDK1.8新特性
javac -source 1.7 -target 1.8 T.java 表示源文件版本为1.7,编译成的字节码使用1.8lambda表达式,即由用户来提供行为的具体实现./** * @author Sunset * Created on 2016/05/15. */public class T { public static void main(String[]
2016-06-10 13:19:01 2206
原创 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 283
原创 shell简单编程
赋值与循环分支$x 用于取变量x的值$1 表示第一个参数,$#表示参数个数,shift移动一个参数。let i=$x+$y,为整数操作赋值,所以必须有两个以上操作数.当只有一个操作数时使用,i=$x.#!/bin/bashecho "please input num:"read numecho "the num is $num"#声明变量,不能有空格sum=0i=0# while
2016-06-10 13:17:38 303
原创 JPA持久化上下文与对象状态
hibernate 认为一个有id的新对象为detached.自动脏检查可以通过继承org.hibernate.CustomEntityDirtinessStrategy并设置hibernate.entity_dirtiness_strategy来自定义.JPA提供一个持久化上下文作为一级缓存,提供自动脏检查.对应某个id的实例在持久化上下文中只有一个对象. Hibernate,find时总是
2016-06-10 13:17:03 3684 1
原创 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 1579
原创 many-to-many
//-----------------------------关联表---------------------------------@Entity@Table(name = "CATEGORY_ITEM")@org.hibernate.annotations.Immutablepublic class CategorizedItem {//使用符合主键 @Embeddable
2016-06-10 13:15:42 363
原创 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 614
原创 OneToMany/ManyToOne关联
@ManyToOne 以及 @OneToMany//一般选择在多端进行管理,一端放弃,使用级联保存等,即多端添加一个外键列//Item <-1----------*-> Bid@Entityclass Item{ //该集合方便查询,orm的意义. // mappedBy表明其放弃管理关联,由多端进行管理 //cascade表明了级联操作,PERSIST使用时必须建立起B
2016-06-10 13:14:37 488
原创 Hibernate映射集合(JDK以及嵌入式值类)
JDK内置的集合类型有Set、List、Collection、Map四种//Set与Collection的区别在于是否允许重复元素,java未提供Collection的实现。//任意的值类型集合映,都需要@ElementCollection,其有两个属性fetch以及targetClass,其中targetClass在集合不是泛型集合时是必须指定的。//通过@CollectionTable来指
2016-06-10 13:14:00 513
原创 hibernate级联删除错误
@OneToMany配置了cascade=CascadeType.REMOVE,但是在delete时还是报了一个外键引用,删除错误。 原因是,在delete时未从数据库重新加载对象(get/load)。导致删除对象时,该对象只有主键存在,关联集合为null,所以不执行级联删除。 所以在删除一个对象时,一定要从数据库中加载出来再删除!!!!!
2016-06-10 13:13:05 428
原创 HIbernate继承映射策略
策略选择: 1)不需要多态关联以及从父类查询时,使用@MappedSuperclass/TABLE_PER_CLASS,偏向于TABLE_PER_CLASS,因为万一有少量需要关联、查询可以在牺牲性能的前提下满足(使用union)。 2)当需要多态以及从父类查询(较多),而且子类较父类的属性变化不大(新增实例域少),可以考虑使用SINGLE_TABLE。 3)当需要多态以及从父类查询(较多),
2016-06-10 13:12:10 698
原创 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 291
原创 hibernate映射值类型
JDK基本类型@Transient:用于将某个属性设为瞬时,其不会被映射到数据库,默认的所有属性都将映射到数据库@Access:用于设置访问属性的策略,当值为@Access(AccessType.PROPERTY)时使用setter,否则使用field。可用于类/具体属性上@Column:用于进行属性-列名映射以及指定约束(非空、唯一、是否可更新等)@Formula:用于在query时,从数
2016-06-10 13:09:28 1536
原创 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 612
原创 Hibernate主键生成策略
/**在所有策略中,只有assigned策略的主键是自己定义的,其余在调用save/persist保存到数据库时会自动生成一个id,所以在这之前设置的id没有意义,其将被覆盖。正常情况下enhanced-sequence可以满足选择,最好选择pre-insert类型的策略,特殊情况可以自己分配,需要分布式合并数据库可以使用uuid2*//* *JPA自带三种生成策略 *
2016-06-10 13:06:47 427
原创 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 4415
原创 序列化与反序列化
序列化基础:即使用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 353
原创 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 350
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人