
基础
文章平均质量分 56
淘气的高老板
污,孤傲,高冷,薄情,悲天悯人的高老板
展开
-
Java泛型,如何获取T的class
public class TypeReference<T> { private final Type type; protected TypeReference(){ Type superClass = getClass().getGenericSuperclass(); type = ((ParameterizedType) superClass).getActualTypeArguments()[0]; } publi.原创 2021-07-21 11:26:53 · 1935 阅读 · 0 评论 -
图解mysql体系结构
存储引擎是基于表的,而不是数据库原创 2021-07-05 22:59:23 · 284 阅读 · 0 评论 -
maven tomcat8 远程部署(支持tomcat7)
①修改tomcat的conf文件夹下的tomcat_user.xml ②启动tomcat③修改pom.xml的org.apache.maven.pluginsmaven-compiler-plugin3.5.1org.apache.tomcat.maventomcat7-maven-plugin2.2原创 2016-07-31 10:11:25 · 6853 阅读 · 0 评论 -
JAVA 8 并发增强 (2)乐观读
/* * J8添加了StampedLock类,它用来实现乐观读。 首先调用tryOptimisticRead方法,此时会获得一个“印戳”。然后读取值并检查“印戳” * 是否仍然有效(例如其他线程已经获得了一个读锁)。如果有效,就可以使用这个值。如果无效,就会获得一个读锁(它会阻塞所有的写锁) */public class Vector { private int size; priva原创 2016-08-09 14:50:52 · 845 阅读 · 0 评论 -
MyISAM和InnoDB等mysql引擎
查询mysql的引擎SHOW engines可以看到InnoDB有主键有事物,行锁。Innodb带是带主键的表,插入删除的时候是行锁,myIsam是表锁。 就是创建表的时候声明了innodb,并设置了primary key,那么数据库在写id==xxx的数据的时候,只有读id=xxx的操作需要等待,读id=nnn可以正常读, 如果用myisam,写某一行的时候,对整张表人异一行的操作都需要等待。原创 2017-05-19 13:04:43 · 277 阅读 · 0 评论 -
Comparable和Comparator的区别和联系
1 两个接口的定义public interface Comparator<T> { int compare(T o1, T o2); boolean equals(Object obj);//object的}public interface Comparable<T> { public int compareTo(T o);}2 区别<T extends Compara原创 2017-05-17 18:36:53 · 513 阅读 · 0 评论 -
JVM8(4)java虚拟机内部结构
JVM规范描述的是一种抽象化的虚拟机的行为,而不是任何一种广泛使用的虚拟机实现。 要去“正确地”实现一台Java虚拟机,其实并不像大多数人所想的那样高深和困难——只需要正确读取class文件中每一条字节码指令,并且能正确执行这些指令所蕴含的操作即可。 所有在虚拟机规范之中没有明确描述的实现细节,都不应成为虚拟机设计者发挥创造性的牵绊,设计者可以完全自主决定所有规范中不曾描述的虚拟机内部细节,原创 2017-05-17 14:35:29 · 2497 阅读 · 0 评论 -
maven:Fatal error compiling: 无效的目标 发行版: 1.8 -> [Help 1]
使用mvn clean install命令的时候出现如下的错误:[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project demo-core-common: Fatal error compiling: 无效的目标 发行版原创 2017-05-27 01:29:08 · 15850 阅读 · 0 评论 -
Spring boot(18) 深入理解SpringBoot
Manifest-Version: 1.0Implementation-Title: boot Maven WebappImplementation-Version: 0.0.1-SNAPSHOTArchiver-Version: Plexus ArchiverBuilt-By: BAOStart-Class: com.bao.boot.AppImplementation-Vendor-原创 2017-05-16 11:43:03 · 1017 阅读 · 0 评论 -
如何获得方法的default修饰符?JVM规范并没有java8的defalut修饰符
java8的很多特性是java虚拟机层面实现的,比如lamda表达式,而不是编译器是实现。但是java8新增的default修饰符,其实就是在接口定义的非抽象的public的修饰符。我们看下API: Modifier.toString(int mod)输出不了defalut修饰符, 而实际上也没有定义defalut修饰符。String java.lang.reflect.Modifier.toSt原创 2017-05-06 17:04:25 · 923 阅读 · 0 评论 -
javaAPI深入理解(1)如何截短一个List以及List.subList()方法的坑
removeRange(int, int);这个方法AbstractList并没有暴露出来,我们应该如何得到一个截短的list?1 如何得到一个list某个范围的子集sublist首先想到sublist(int, int)方法 注意此方法参数左闭右开。 测试如下1.1 修改sublist会影响原来的list LinkedList<String> ll = new LinkedList<>(原创 2017-05-04 13:41:44 · 41032 阅读 · 3 评论 -
java1.8几个漂亮的API设计(2)排序和比较
比较types.sort(Comparator.comparing(ArticleType::getCreate_time)); public static <T, U extends Comparable<? super U>> Comparator<T> comparing( Function<? super T, ? extends U> keyExtrac原创 2017-03-17 16:36:56 · 1715 阅读 · 0 评论 -
Linux(1) 配置防火墙
配置表的位置/etc/sysconfig/iptables重启service iptables restart查看防火墙状态service iptables status启动service iptables start关闭service iptables stop原创 2016-08-15 17:58:21 · 480 阅读 · 0 评论 -
设计模式(1)Iterator模式
设计模式(1)Iterator模式编辑文章 Iterator是java集合框架的成员,使用了设计模式中的Iterator模式我们从API中将这种方式提炼出来,并且了解List的设计Iterator核心设计1 定义接口Iteratorpublic interface Iterator<E> { boolean hasNext(); E next();}Iterable 用来给原创 2017-03-31 11:19:26 · 459 阅读 · 0 评论 -
spring boot(8) 配置外部tomcat(2) dependencyManagement的方式
①修改POMwar1.3.5.RELEASEUTF-81.8org.springframework.bootspring-boot-dependencies${spring-boot.version}pomimport②修改启动类,继承SpringBootServletInitializerpublic class原创 2016-07-29 17:24:47 · 2059 阅读 · 0 评论 -
框架基础(1)使用LinkedHashMap实现LRU缓存
public class LRUCache extends LinkedHashMap { private static final long serialVersionUID = 3755413498196039249L; private static final float DEFAULT_LOAD_FACTOR = 0.75f; private static final int原创 2017-03-10 14:26:10 · 550 阅读 · 0 评论 -
Java 并发与多线程规范(4) 自旋锁是可重入的吗?CAS与自旋锁的关系,CAS的ABA问题,以及乐观锁,悲观锁,互斥锁,读写锁的整理
CASCAS,自旋锁跟compare and set有关系,但是并不是CAS就是自旋锁。我们看一段代码:/* 不同线程检测最大值 */ AtomicLong largest = new AtomicLong(); long obsvValue = 0; /* 错误的方式,此更新不是原子性的 */ largest.set(Math.max原创 2017-07-19 15:06:32 · 2059 阅读 · 0 评论 -
在linux和Windows使用curl,使用POST提交JSON数据
在linux&需要用\&转义GET:curl http://119.29.151.177/account/password/find?channel=2201\&account=abcPOST:curl -X POST http://demo.wiliamy.com/account/password/find?channel=2201\&account=abc在windos power she原创 2017-05-08 15:33:09 · 8265 阅读 · 2 评论 -
clean codes和bug集锦
一些经常出现的bug的地方NPE空指针基本类型 获取包装类型的结果 JSONObject jsonObj = … boolean isFastigium = jsonObj.getBoolean(“fastigium”); 应该改为 boolean isFastigium = jsonObj.getBooleanValue(“fastigium”);将异常信息转为字节数组 except原创 2017-12-06 10:33:06 · 379 阅读 · 0 评论 -
mysql遇到的一些常用的查询小问题, 时间戳FROM_UNIXTIME date_format
count中的属性过滤 xxx or nullSELECT DATE_FORMAT(create_time,'%Y-%m-%d') as r_create_time, COUNT((process_state=1 and unknow=1) or null) unknown, COUNT((process_state=1 and unknow=0 and ignore_s原创 2017-09-04 18:29:20 · 568 阅读 · 0 评论 -
Exception
我们先自定义个运行时异常package redis.clients.jedis.exceptions;public class JedisException extends RuntimeException { private static final long serialVersionUID = -2946266495682282677L; public JedisException(St原创 2017-07-12 22:12:50 · 364 阅读 · 0 评论 -
JVM(2)不同的垃圾回收器的比较
4款Java垃圾回收器——错误的选择导致糟糕的性能对大多数开发人员而言有两件事情是个谜——垃圾回收以及异性。由于我对后者也不是特别了解,我想我还是试着说说前者吧,尤其是随着Java 8的到来,这个领域也发生了许多重大的变化及提升,其中最重要的莫过于持久代(PermGen)的删除以及一些令人振奋的新的优化(后面会陆续提及这些)。说起垃圾回收,许多人都了解它的概念,也在日常的编程中有所原创 2015-05-05 14:00:37 · 837 阅读 · 0 评论 -
动手实现mvc(1),Java桥接方法(待续)
在阅读Spring boot的mvc源码的时候,发现Spring mvc 检查了好多method.isBridge()来判断是否是桥接方法。 桥接方法是Java编译后再生成的方法。 举例:1. 没有生成桥接方法public interface ITest{ <T> T test (T t);}public class Test implements ITest { @Over原创 2017-10-14 20:40:56 · 357 阅读 · 0 评论 -
JVM(5) JVM 参数详解
晚上忽然发现自己的MAC从运行程序到看到Spring boot日志时间超过20秒。新建个空的boot空工程也需要10秒才会看到boot的启动日志。 最后设置了gc日志看了下有无异常情况。 从jvisualvm看下 Java HotSpot(TM) 64-Bit Server VM (25.131-b11) for bsd-amd64 JRE (1.8.0_131-b11), built o原创 2017-08-11 00:04:29 · 813 阅读 · 0 评论 -
Java 文件与字节流(InputStream.available()在本地文件和网络文件的异同)
1 文件到字节流1.1 IOIO:输入流,直接写完close即可InputStream in = new FileInputStream(fileName); DataInputStream stream = new DataInputStream(in); IO:输出流,直接读完close即可,即使FileOutputStream(String name, boolean append)可以有原创 2017-07-20 14:39:04 · 1810 阅读 · 0 评论 -
幂表
2的幂 准确值(X) 近似值 X字节转换成MB,GB等 7 128 8 256 10 1024 一千 1K 16 65536 64K 20 1048576 一百万 1MB 30 1073 741 824 十亿 1GB 32 4294 967 296 4GB 40原创 2017-08-11 20:27:55 · 421 阅读 · 0 评论 -
REDIS 学习(1)linux环境,以及REDIS的启动,关闭和连接,以及在不重启的情况下开启AOF
官网:http://www.redis.io/download一,根据官网提示,下载并编译$ wget http://download.redis.io/releases/redis-3.2.0.tar.gz$ tar xzf redis-3.2.0.tar.gz$ cd redis-3.2.0$ make二,启动$ src/redis-server三原创 2016-06-15 11:34:17 · 1962 阅读 · 0 评论 -
远程调用rpc的时候 远程的异常如何处理
远程调用rpc的时候 远程的异常如何处理?返回 错误码+错误描述 这个和RPC协议定义有关系了,一般RPC协议会有错误码的,比如0是正常,其他是错误码,并且附带errMsg 如果 远程rpc是层层调用的,就层层返回,可以加入分布式 追踪系统RPC timeout原创 2017-07-17 00:03:50 · 10422 阅读 · 1 评论 -
Java 并发与多线程规范(3)happen before和volatile总结,ArrayList和CopyOnyWriteList的区别
volatile的语义volatile 的语义是memory barrier可以参考一下Java 内存模型。线程在启动后,读取内存Heap 值复制到自己的工作缓存,比如寄存器、N级缓存等。寄存器、N级缓存在CPU,如果需要其他线程感知的话,需要同步是主存中,如果其他线程看到变量是volatile的话,回去主存加载。Heap 就存放在主存中,也就是内存中。volatile 实际上是强制线程去主存中读取原创 2017-07-19 11:42:53 · 728 阅读 · 0 评论 -
Java 多线程规范(2)线程池详解
十四,线程池详解线程池示例public class ThreadPoolTool { public static final ThreadPoolExecutor THREAD_POOL_EXECUTOR = new ThreadPoolExecutor( 0, Integer.MAX_VALUE, 60L,原创 2017-07-18 21:51:05 · 1009 阅读 · 0 评论 -
在linux下配置tomcat的虚拟路径
我喜欢将war文件放在tomcat下的webapps路径下然后,配置成自动部署和虚拟路径虚拟路径在linux下的例子 appBase="webapps" unpackWARs="true" autoDeploy="true"> xianjian"/> prefix="access." suf原创 2016-01-16 09:31:21 · 6711 阅读 · 0 评论 -
java基础,单例总结
三,记录式单例/** * 记录式单例 */public class SingleTon3 { private static Map map = new HashMap(); static { SingleTon3 single = new SingleTon3(); map.put(single.getClass().getName(), single); } priv原创 2015-09-06 10:57:13 · 555 阅读 · 0 评论 -
tomcat 解决 POST请求传参数过长受限制的问题
问题描述:公司某个后台修改文章发表的时候,比如文章标题title,文章内容content,当文章内容过大的时候,连title传过来的参数也成null了。问题分析:POST请求本身并未限制传入参数大小,是tomcat 容器设置了接收参数大小的限制解决过程:vim server.xml<Connector port="8080" protocol="HTTP/1.1" co原创 2016-08-01 18:33:18 · 28211 阅读 · 11 评论 -
JAVA 网络编程(1) SOCKET 普通示例
serverpublic class Server { public static void main(String[] args) { // 创建一个ServerSocket监听8080端口 try (ServerSocket server = new ServerSocket(8080); Socket socket = server.accept(); Buff原创 2016-08-18 00:12:07 · 405 阅读 · 0 评论 -
判断是不是同一天,同一周
public static boolean sameDay(Date d0,Date d2){ if(null == d0 || null == d2){ return false ; } Calendar c0 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); c0.setTime(d0);原创 2014-04-29 18:47:37 · 1500 阅读 · 0 评论 -
Nginx(2) 启动,停止,信号控制
一,启动,停止,检查配置文件和重启启动 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf停止kill -QUIT pid 温和停止kill -TERM pid 快速停止kill -INT pid 快速停止强制停止pkill -9 nginx验证配置文件是否没错原创 2016-08-05 11:43:29 · 772 阅读 · 0 评论 -
Nginx(4) 配置维护页面
如果,nginx所配置的tomcat全都没有启动,则会返回502,nginx默认把500,502,503,504都配置成了50x.html我们要做的事将502配置一个502.html作为维护页面即可 error_page 500 503 504 /50x.html; location = /50x.html { root h原创 2016-08-08 16:59:48 · 6051 阅读 · 0 评论 -
Nginx(3) NGINX + TOMCAT +JAVA 做负载均衡集群
一,配置多个tomcat,为了简便起见,我配置了两个tomcat,他们的server.xml如下配置apache-tomcat-8.5.4 <Connector port="8084" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />原创 2016-08-05 16:29:15 · 719 阅读 · 0 评论 -
Nginx(1) Linux 快速安装,启动nginx
nginx是一种高效的支持高并发的轻量级服务器,它还可以用来做反向代理和负载均衡。Linux配置nginx的步骤如下:一,到https://nginx.org/en/download.html 页面下载最新的稳定版本的包( 我下的是nginx-1.10.1.tar.gz)并上传至Linux某个目录后解压。 然后进入解压后的目录执行./configure原创 2016-08-04 23:23:30 · 2324 阅读 · 0 评论 -
Linux 安装 域名服务
①安装http,在可以连接互联网的条件下 yum -y install httpd php php-mysql ②修改配置文件 vim /etc/httpd/conf/httpd.conf NameVirtualHost *:80serverName 200.200.200.177 ServerName service.gaotianyue.com原创 2016-08-04 18:53:29 · 693 阅读 · 0 评论