- 博客(32)
- 收藏
- 关注
原创 位运算算法题
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 public int singleNumber(int[] nums) { Map<Integer, Integer> map = new HashMap<>(); //存储元素出现的次数 for (int i = 0; i < nums.length; i++) { map.put(nums.
2022-02-17 18:12:44
281
原创 Jenkins持续集成 自动发布远程tomcat
安装Java环境。 略下载JenkinsJenkins官网下载地址自定义端口启动(默认8080) : nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=端口号&根据提示输入初始密码, 下载推荐插件系统配置添加一些必备插件deploy to containerPublish Over SSHMaven Integration plugin配置maven jdk构建一个maven项..
2020-05-18 14:00:14
340
转载 tomcat异常退出 org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler
转载自http://www.myexception.cn/apache/1781414.html节前某个部门的测试环境反馈tomcat会意外退出,我们到实际环境排查后发现不是jvm crash,日志里有进程销毁的记录,从pause到destory的整个过程:org.apache.coyote.AbstractProtocol pausePausing ProtocolHandlerorg....
2020-04-14 10:43:27
13292
原创 itext5填充PDF表单
官网 https://itextpdf.com/en/products/itext-5-legacy相关包<!-- pdf处理 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <...
2020-03-31 16:29:02
808
原创 单例模式,枚举实现方式
private int age; private String name; public int getAge() { return age; } public Student() { super(); System.out.println("线程 " + Thread.currentThread().getName() + " 初始化" + this.getClass()...
2019-12-27 17:01:30
308
1
原创 解决微信小程序富文本JAVA后端渲染方案(参考html2wxml4j)
基于Jsoup+FastJson。参考html2wxml4j。(仅Java部分, 前端自行百度。。。)<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.11.3</version><...
2019-07-08 17:30:22
841
原创 多线程基础
格式混乱。。。。可至我的有道云查看:http://note.youdao.com/noteshare?id=277d8d512f6f80f111bc7a058aa3cb27&sub=743EACECE382418AAEEE56CA086E5CD1同步(Synchronous)和异步(Asynchronous)同步和异步通常用来形容一次方法调用。同步方法调用一旦开始,调用者必须等到方法调...
2018-12-07 15:54:19
211
原创 spring cloud feign报错 404
注意是否加了server.context-path配置。如果添加了server.context-path配置, 可以在上图路径加上server.context-path。
2018-11-13 09:33:49
1137
原创 springcloud feign请求时报错 Request header is too large
java.lang.IllegalArgumentException: Request header is too large at org.apache.coyote.http11.InternalNioInputBuffer.fill(InternalNioInputBuffer.java:111) at org.apache.coyote.http11.AbstractNioInputB...
2018-11-13 09:23:00
2245
2
原创 java8时间日期API(LocalDate、 LocalTime、 Instant、 Duration 以及 Period)
创建一个LocalDate对象并读取其值LocalDate date = LocalDate.of(2014, 3, 18);int year = date.getYear();Month month = date.getMonth();int day = date.getDayOfMonth();DayOfWeek dow = date.getDayOfWeek();int...
2018-11-05 17:19:50
2116
原创 CompletableFuture: 组合式异步编程
Future 接口Java 8之前使用Future的例子: @Test public void test1() { ExecutorService executor = Executors.newCachedThreadPool(); Future&lt;Double&gt; future = executor.submit(new Callable&lt;Double&gt;() ...
2018-11-02 17:22:28
454
原创 Java8 用Optional取代null
应用 Optional 的几种模式创建 Optional 对象声明一个空的Optional Optional<Car> optCar = Optional.empty();``Optional<Car> optCar = Optional.empty();依据一个非空值创建Optional你还可以使用静态工厂方法Optional.of,依据一个非空值创建一...
2018-10-24 17:24:03
1792
原创 Java8 Lambda、方法引用和stream流示例
public class Apple { private String color; private Double weight; public String getColor() { return color; } public void setColor(String color) { this.color = color; } public Double getWei...
2018-10-23 11:38:10
552
转载 Redis实现分布式锁RedLock
什么是 RedLockRedis 官方站这篇文章提出了一种权威的基于 Redis 实现分布式锁的方式名叫 Redlock,此种方式比原先的单节点的方法更安全。它可以保证以下特性:安全特性:互斥访问,即永远只有一个 client 能拿锁避免死锁:最终 client 都可能拿到锁,不会出现死锁的情况,即使原本锁住某资源的 client crash 了或者出现了网络分区容错性:只要大部分 Re...
2018-10-11 11:25:58
674
原创 Java8 Lambdas及函数式接口的例子& Optional类的方法
使用案例Lambda 的例子对应的函数式接口布尔表达式(List list) -&amp;amp;gt; list.isEmpty()Predicate&amp;amp;lt;List&amp;amp;lt;&amp;amp;gt;&amp;amp;gt;创建对象() -&amp;amp;gt; new Apple(10)Supplier&a
2018-10-09 17:32:19
257
原创 MySQL常用优化
负向查询不能使用索引select name from user where id not in (1,3,4);应该修改为:select name from user where id in (2,5,6);很多时候用 exists 代替 in 是一个好的选择:select num from a where num in(select num from b) 前导模糊查询不能使用...
2018-10-09 16:14:33
396
原创 volatile 关键字
内存可见性由于 Java 内存模型(JMM)规定,所有的变量都存放在主内存中,而每个线程都有着自己的工作内存(高速缓存)。线程在工作时,需要将主内存中的数据拷贝到工作内存中。这样对数据的任何操作都是基于工作内存(效率提高),并且不能直接操作主内存以及其他线程工作内存中的数据,之后再将更新之后的数据刷新到主内存中。这里所提到的主内存可以简单认为是堆内存,而工作内存则可以认为是栈内存。如下图所...
2018-10-09 14:11:21
146
原创 STS(eclipse)参数配置
-startupplugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar--launcher.libraryplugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.700.v20180518-1200-productorg.springsource.sts.i...
2018-10-09 13:50:10
2417
原创 类加载机制
双亲委派模型模型如下图:双亲委派模型中除了启动类加载器之外其余都需要有自己的父类加载器当一个类收到了类加载请求时: 自己不会首先加载,而是委派给父加载器进行加载,每个层次的加载器都是这样。所以最终每个加载请求都会经过启动类加载器。只有当父类加载返回不能加载时子加载器才会进行加载。双亲委派的好处 : 由于每个类加载都会经过最顶层的启动类加载器,比如 java.lang.Object这样的...
2018-10-09 13:44:48
131
原创 ConcurrentHashMap 实现原理
由于 HashMap 是一个线程不安全的容器,主要体现在容量大于总量*负载因子发生扩容时会出现环形链表从而导致死循环。因此需要支持线程安全的并发容器 ConcurrentHashMap 。JDK1.7 实现数据结构 如图所示,是由 Segment 数组、HashEntry 数组组成,和 HashMap 一样,仍然是数组加链表组成。ConcurrentHashMap 采用了分段锁技术,其...
2018-10-09 11:26:55
507
原创 Java 多线程三大核心
原子性Java 的原子性就和数据库事务的原子性差不多,一个操作中要么全部执行成功或者失败。JMM 只是保证了基本的原子性,但类似于 i++ 之类的操作,看似是原子操作,其实里面涉及到:获取 i 的值。自增。再赋值给 i。这三步操作,所以想要实现 i++ 这样的原子操作就需要用到 synchronized 或者是 lock 进行加锁处理。如果是基础类的自增操作可以使用 Atomic...
2018-10-09 09:31:17
153
原创 i++ 或者 ++i 是线程安全的吗。
不论是++i还是i++都不是原子操作,在运行中都可能会有CPU调度产生,造成i的值被修改,造成脏读脏写。volatile不能解决这个线程安全问题。因为volatile只能保证可见性,不能保证原子性。可以用锁。使用synchronized或者ReentrantLock都可以解决这个问题,一般使用synchronized更好,因为JVM团队一直以来都在优先改进这个机制,可以尽早获得更好...
2018-10-08 14:13:32
1527
3
原创 LinkedHashMap 底层分析
众所周知 HashMap 是一个无序的 Map,因为每次根据 key 的 hashcode 映射到 Entry 数组上,所以遍历出来的顺序并不是写入的顺序。因此 JDK 推出一个基于 HashMap 但具有顺序的 LinkedHashMap 来解决有排序需求的场景。它的底层是继承于 HashMap 实现的,由一个双向链表所构成。LinkedHashMap 的排序方式有两种:根据写入顺序排...
2018-10-08 13:44:50
138
原创 HashSet 底层分析
HashSet 是一个不允许存储重复元素的集合,它的实现比较简单,只要理解了 HashMap,HashSet 就水到渠成了。成员变量 private transient HashMap<E,Object> map; // Dummy value to associate with an Object in the backing Map private stati...
2018-10-08 13:38:21
204
原创 HashMap 底层分析
以下基于 JDK1.7 分析。如图所示,HashMap 底层是基于数组和链表实现的。其中有两个重要的参数:容量负载因子容量的默认大小是 16,负载因子是 0.75,当 HashMap 的 size > 16*0.75 时就会发生扩容(容量和负载因子都可以自由调整)。put 方法首先会将传入的 Key 做 hash 运算计算出 hashcode,然后根据数组长度取模计算出在数...
2018-10-08 11:49:30
141
原创 LinkedList 底层分析
如图所示 LinkedList 底层是基于双向链表实现的,也是实现了 List 接口,所以也拥有 List 的一些特点(JDK1.7/8 之后取消了循环,修改为双向链表)。新增方法public boolean add(E e) { linkLast(e); return true; } /** * Links e as last e...
2018-10-08 11:44:11
194
原创 ArrayList/Vector 的底层分析
ArrayListArrayList 实现于 List、RandomAccess 接口。可以插入空数据,也支持随机访问。ArrayList相当于动态数据,其中最重要的两个属性分别是: elementData 数组,以及 size 大小。在调用 add() 方法的时候:public boolean add(E e) { ensureCapacityInternal(size ...
2018-10-08 11:28:21
133
原创 MySQL利用延迟关联或者子查询优化超多分页场景(MySQL offset)
MySQL 分页并不是跳过 offset 行,而是取 offset +N 行,然后返回放弃前 offset 行,返回N 行,所以当 offset 特别大的时候,效率就非常的低下,要么控制返回的总页数,要么对超过特定阈值的页数进行 SQL 改写。例:SELECT a.* FROM 表 1 a, (select id from 表 1 where 条件 LIMIT 100000,20 ) b ...
2018-09-27 14:47:36
1521
1
原创 表达异常的分支时,少用 if-else 方式(可以使用卫语句、策略模式或者状态模式来实现)
避免后续代码维护困难, if-else尽量不要超过3层, 可以尝试使用卫语句、策略模式或者状态模式卫语句:卫语句就是把复杂的条件表达式拆分成多个条件表达式,比如一个很复杂的表达式,嵌套了好几层的if -else语句,转换为多个if语句,实现它的逻辑,这多条的if语句就是卫语句.有时候条件式可能出现在嵌套n次才能真正执行,其他分支只是简单报错返回的情况,对于这种情况,应该单独检查报错返回的分支...
2018-09-27 11:24:35
2197
原创 异步转同步操作 使用 CountDownLatch
进行异步转同步操作,使用CountDownLatch时,每个线程退出前必须调用 countDown方法。注意:1、线程执行代码注意要 catch 异常,确保 countDown 方法被执行到,避免主线程无法执行至 await 方法,直到超时才返回结果。2、子线程抛出异常堆栈,不能在主线程 try - catch 到例:public class Test { private st...
2018-09-26 17:30:29
2932
原创 三元运算符 报错 java.lang.NullPointerException
@Setter@Getter@ToStringpublic class Student { private Integer age; private Integer year; }public static void main(String[] args) { Student stu = new Student(); stu.setAge(1); stu.setYe...
2018-09-25 14:53:54
666
原创 Integer == 和 equals 的区别
当装包对象在IntegerCache.low到Integer.high之间时,结果直接从IntegerCache中获取,否则直接创造一个实例。源码如下:/** * Returns an {@code Integer} instance representing the specified * {@code int} value. If a new {@code Intege...
2018-09-25 14:30:09
415
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人