自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 使用@RequestBody传对象参数时碰到的坑

工作中需要使用到http接口传一个对象数组,网上找到某博客:springmvc参数为对象,数组但是测试还是不对,报错:2019-02-21 23:44:37.168 WARN 34133 --- [nio-7001-exec-6] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message: org.spr...

2019-02-22 12:13:52 19550

原创 一次zxid打满之后引发的故障

某天早上,还没到公司就被通知系统定时任务都挂了,紧急对所有应用都重启之后,我们把问题定位在了zk上。问题背景:系统使用定时任务调度框架为开源tbSchedule,使用zk作为任务注册中心,这个框架对异常状况处理能力比较弱,与zk对连接中,出现网络超时、session过期等情况没有稳定的恢复和重连方案。zk除了做tbschedule的注册中心外,还给一个业务系统做分布式并发调度控制提供zk...

2018-11-27 16:12:29 1570 4

原创 mybatis刚从@Annotation向xml转换时遇到的一些坑

老碰到少了逗号“,”的情况,导致sql出错,但是这类问题又不容易察觉到,幸好如果有异常堆栈打出的话,这类问题还是比较好发现的。比较麻烦的事是在某厂,当时碰到的这个服务本地无法启动,但是本人初来乍到,一是不熟悉整个系统,找不到启动失败原因在哪儿,而且据说这个问题对于团队老人们都比较难解决,项目又忙,暂时只能通过部署在远程服务器上测试了,二是项目工期压力大,deadline近在眼前,没有时间解决...

2018-11-11 15:49:53 341

原创 通过ps -ef | grep java查看到java进程相应jvm启动参数

/opt/taobao/java/bin/java-server-Xms4g-Xmx4g-XX:MetaspaceSize=512m-XX:MaxMetaspaceSize=512m-Xmn2g-XX:MaxDirectMemorySize=1g-XX:SurvivorRatio=10-XX:+UseConcMarkSweepGC-XX:CMSMaxAbortablePrecl...

2018-10-24 11:21:14 2671

原创 记某一次阿里面试的实时笔试题

某次面试阿里云,要求实时写一个小程序,要求如下: 1.两个线程,一个线程生产者,一个线程是消费者 2.生产者生产票,超过10张就休息,被消费了就继续生产。 3.消费者消费票,票没了之后就休息,有票了接着消费。 题目看着很简单,但却包含了很多考点:消息队列、线程、线程通信、锁。 具体看看我写的源码,这是后期几经修改后的内容。import java.util.LinkedList;im...

2018-09-04 11:54:20 3944 1

原创 海量数据处理实例

在bat等大公司,基本所有业务的数据量级都很庞大,那么如何在保证数据完整性的情况下快速处理成了一个通用的难题,这里列举几个例子,大致反应一些处理思想。 1.一个文件中,每一行有一个整数,有上亿行,目的:统计出现次数超过三次的整数写入到另一个文件中。 分析: (1)首先数据在文件中,既然要统计,那么有一个原则就是减少IO次数。 (2)其次数据量上亿,内存中肯定不可能全放下。 (3)需要统计...

2018-09-04 11:53:34 655

原创 分布式事务与解决方案

分布式事务:分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。 ACID: 原子性(Atomicity)、 一致性(Consistency)、 隔离性(Isolation)、 持久性(Durability) CAP: 一致性(Concistency)、 可用性(Availability)、 分区容忍性(Partition...

2018-09-03 17:22:01 125

原创 osi七层模型与TCP/IP五层模型

https://blog.csdn.net/zhangym199312/article/details/78346652

2018-09-03 16:43:39 253

原创 排序算法汇总

冒泡:俩俩相比然后互换位置 选择:从前往后比较,一直找到最小的一个挪到最左边 插入:从前往后,把每个数往前面合适的地方插入 归并:把待排序队列分为n个有序的子队列,再合并他们 快速:冒泡排序的进化,第一个数据把做全量对比,把比这个数小的放到它左边,大的放到右边,然后分别对左右两部分再进行快排,递归计算完成排序。...

2018-09-03 16:33:00 89

原创 架构上一些专有名词定义

服务降级:在服务负荷超出整体负载能力时,保证重要或基本服务正常运行,非重要服务延迟使用或暂停使用。 服务熔断:当下游服务因访问压力过大而相应变慢或失败,上游服务为了保护系统整体的可用性,切断对下游服务的调用。服务熔断会有三个状态: Closed:熔断器关闭状态,调用失败次数积累,到了阈值(或一定比例)则启动熔断机制; Open:熔断器打开状态,此时对下游的调用都内部直接返回错误,不走网络,但...

2018-09-03 15:39:44 183

原创 秒杀系统架构优化思路

秒杀系统架构优化思路

2018-09-03 15:28:21 145

原创 分布式锁之redis锁及实现

分布式锁有几种常用的实现方式:zookeeper、memcached、redis、mysql。这里介绍一下redis的实现方式,并在最后附上了一个Demo小工具: 众所周知,reids锁是通过setnx + expire的方式实现的,setnx保证只有在key不存在时才能set成功,expire保证锁在非正常释放的情况下不会形成死锁。基本原理就是这个,但实际操作中我们需要注意几个问题: ...

2018-06-07 17:27:28 534

原创 创建线程的三种方式

1. 继承Thread类创建线程2. 实现Runnable接口3. 实现callable接口

2018-06-03 16:23:39 144

原创 Copy-On-Write写时复制机制与Java中CopyOnWriteArrayList容器源码实现

Copy-on-Write机制简称COW,是一种并发设计策略。其基本思路是多线程同时共享同一个内容,当某个线程想要修改这个内容的时候,才会真正的把内容copy出去形成一个新的内容然后修改,其它的线程继续读旧的内容,直到修改完成。这是一种延时懒惰策略。 Copy-on-Write有那么几个应用场景: linux系统中内存的管理和分配。参考:写时复制机制 redis快照持久化(bg...

2018-06-03 15:16:05 782 1

原创 hashmap技术概览与扩容在Java7与Java8中的不同实现

hashmap技术概览

2018-06-01 16:33:36 1366 1

原创 ReentrantReadWriteLock源码解析

ReentrantReadWriteLock是ReadWriteLock的一个实现类,具有和ReentrantLock相似的语义。但注意:并不是Lock、或者ReentrantLock的子类或实现,但ReadLock和WriteLock实现了Lock接口。 ReadWriteLock源码如下:/** * A ReadWriteLock维护一对关联的locks ,一个用于只读操作,一个用于写...

2018-05-24 11:44:28 138

原创 Semaphore源码解析

Semaphore:一个计数信号量。 在概念上,信号量维持一组许可证。 如果有必要,每个acquire()都会阻塞,直到许可证可用,然后获取它。 每个release() 释放一个许可证回去,潜在地释放一个阻塞获取方。 类似与限流算法中的令牌桶算法。 但是,Semaphore并没有使用实际的许可证对象; Semaphore只保留可用数量的计数,并相应地执行。 信号量通常用于限制线程数,而不是访问...

2018-05-20 22:39:08 156

原创 CountDownLatch源码解析

CountDownLatch:允许一个或多个线程等待其他线程中执行完成的同步辅助工具。 CountDownLatch使用一个给定的计数初始化。await方法阻塞,直到由于countDown()方法的调用而导致当前计数达到零,之后所有等待线程被释放,并且任何后续的await 调用立即返回。 这是一个一次性的现象 - 计数器无法重置。 如果您需要重置计数器的版本,可以考虑使用CyclicBar...

2018-05-20 21:39:22 109

原创 可重入锁ReentrantLock源码解析

ReentrantLock:一个可重入互斥Lock具有与使用synchronized方法和语句访问的隐式监视锁相同的基本行为和语义,但具有扩展功能。比如实现公平锁、超时处理、锁中断。 A ReentrantLock由最后一个成功锁定且尚未解锁的线程拥有 。当锁不是由另一个线程拥有时,调用lock的线程将成功获取锁。 如果当前线程已经拥有该锁,该方法将立即返回。 当前线程是否持有该锁可以使用...

2018-05-20 21:10:47 314

原创 AQS(抽象队列同步器)

一、什么是 AQS ? AQS即AbstractQueuedSynchronizer的缩写,是并发编程中实现同步器的一个框架。 AQS基于一个FIFO双向队列实现,被设计给那些依赖一个代表状态的原子int值的同步器使用。我们都知道,既然叫同步器,那个肯定有个代表同步状态(临界资源)的东西,在AQS中即为一个叫state的int值,该值通过CAS进行原子修改。 在AQS中存在一个...

2018-05-20 19:29:52 467 3

原创 jdk中rt.jar的作用

最近看java.util.concurrent包的内容,发现java.time.、java.util.、java.nio.、java.lang.、java.text.、java.sql.、java.math.*等等都在rt.jar包下,才发现自己对平时经常用到的jdk的源码来源并不是很清晰。 我们在配置java环境变量时会配置JAVA_HOME、Path、Classpath,其中Class...

2018-05-20 11:17:41 23902 18

原创 Java8中java.time包

Java8新增了date和time的util包,懒得多谢,截个图吧,其实大部分可以从类名大概知道包的作用,画红框的是常用的,如:LocalDate、Localtime这些类。写的不够全不够细,详细内容参考链接:JAVA 8:健壮、易用的时间/日期API 上面还有几个子包: java.time.chrono 年表包:里面包含很多年表,包括日本年表、泰国年表、民国、伊斯兰历等。 ...

2018-05-18 18:22:11 3125

原创 Lambda表达式学习与实践

最近项目从Java7升级Java8,感觉新的代码已经可以完全拥抱Java8的新特性了:Lambda表达式、函数式接口、流API、默认方法和新Date/Time Api。这里整理一点Lambda表达式的使用场景和示例。 首先声明两个重要的概念: Lambda表达式不是Java独有的概念,它代表的是一个匿名函数,是基于数学中的λ演算得名,直接对应于其中的lambda抽象(lam...

2018-05-17 21:48:58 289

原创 背包问题、决策树及python实现

背包问题是最优解问题中的一种,我们先来看一下最优解的定义:在特定要求下,按特定需求得出最优结果。 按照这个定义我们做一下下面的分析,有以下一些特征: 特定要求,比如:某一个空间有固定容量,或固定负重 特定需求,需要放入多种类型东西,这些东西有重量、价值、体积等属性 最优结果,比如:最大价值,最多数量, ...

2018-05-16 19:59:33 1083

原创 最优解问题

最短路径(shortest path)游商问题(traveling salesperson problem TSP)装箱问题(bin packing)序列对比(sequence alignment)背包问题(knapsacks)贪婪算法(greedy algorithm):在每一个步骤都最大化你的价值 穷举法(brute force):罗列每一种可能的结果,再对比出最优解 动态...

2018-05-16 11:43:45 1863

原创 记一个mysql使用时in()内字符串长度截断的问题

众所周知,mysql对in内的数量和长度是没有限制的(当然我也是百度才确认的^_^),那么为什么会有in内的内容被截断的问题呢?先看下报错日志如下 .......|mybatis|select user_id,account_type,unmatched_amount,target_match_amount from ast_money_account where yn=0 and user_...

2018-05-15 11:41:57 8374 2

原创 bio,io,nio

io,nio

2018-05-14 22:52:15 144

原创 java juc图谱

juc图谱: 1.collections 2.executor 3.atomic 4.locks 5.tools

2018-05-14 22:40:41 936

原创 回调模式

回调模式: 回调模式并不在23种设计模式中,但是做java的其实是接触比较多的,在java的接口注入中,使用的就是回调模式。 比如集合排序中,使用注入Comparator比较器的方式进行排序:Collections.sort(list,new Comparator () { @Override public int compare(Objec...

2018-05-14 22:20:47 200

原创 策略模式

策略模式:策略模式是指一系列算法定义,并将每一个算法封装起来,而且使他们还可以相互替换。如果一个事情有多种实现方式,比如run这件事情,人用两条腿跑,动物用四条腿跑,使算法独立于使用它的客户独立变化。 参考链接:策略模式 Java or Python实现:...

2018-05-14 22:17:54 88

原创 单例设计模式

单例:保证java程序中,只有一个实例存在,适用于全局统一管理的场景。 (1)饿汉模式:在初始化的时候就创建类实例。适合单例占用内存少,初始化时就会用到的情况。public class Singleton{ private static Singleton instance = null; private Singleton(){} public stat...

2018-05-14 21:45:33 96 1

原创 23种常用设计模式概览

我们一般常用设计大概有23种,创建型的5种,结构型7种,行为型11种。其中又划分是针对类还是针对对象。

2018-05-14 21:42:54 200

原创 算法的复杂度:

算法的负责度代表: 对数级,线性级,平方级,指数级

2018-05-14 21:13:24 156

原创 bug的一些可能性与查找bug的一些方式(MIT总结)

Reversed order of arguments(自变量顺序错误):顺序错误spellings:拼写错误initialization:初始化的时机或方式错误object vs value equality:对象相等还是值相等问题,equal与==aliasing - Deep vs shallow copy:别名问题,常见例子就是数组的深复制和浅复制问题side effe...

2018-05-13 00:00:41 188

原创 Hash为什么快

hash查找的时间复杂度是constant(常量)级的,也就是O(1),它是怎么做到的呢? 先举个例子: 如果在[0,1,3,4,7,9]这个数组中找到某个数字,比如:4 or 6,那么需要遍历这个数组一次,时间复杂度是O(n)。如果使用二分查找法,时间复杂度是logn。 但现在,我们如果在内存中开辟一个连续的空间,并将这个数组按如下位置放入。 0 1 2 3 4...

2018-05-12 17:34:46 1759

转载 springEL表达式详解及应用

什么是SpringEL? Spring3中引入了Spring表达式语言—SpringEL,SpEL是一种强大,简洁的装配Bean的方式,他可以通过运行期间执行的表达式将值装配到我们的属性或构造函数当中,更可以调用JDK中提供的静态常量,获取外部Properties文件中的的配置 为什么要使用SpringEL? 我们平常通过配置文件或Annotaton注入的Bean,其实都可以称为静态...

2018-05-10 17:55:40 23037 5

转载 浮点数精度丢失的原因

问题提出:12.0f-11.9f=0.10000038,”减不尽”为什么?来自MSDN的解释:http://msdn.microsoft.com/zh-cn/c151dt3s.aspx为何浮点数可能丢失精度浮点十进制值通常没有完全相同的二进制表示形式。 这是 CPU 所采用的浮点数据表示形式的副作用。为此,可能会经历一些精度丢失,并且一些浮点运算可能会产生意外的结果。导致此行为的...

2018-05-10 11:10:48 1756

原创 斐波那契数列及Python实现

斐波那契数列,又称为黄金分割数列,因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21……在数学上,斐波那契数列以如下被以递归的方法定义:F(0)=1,F(1)=1,F(n)=F(n-1)+F(n-2)(n>2,n∈N*),在现代物理、准晶体结构、化学等领域都有直接的引用。 ...

2018-05-08 22:05:59 415

原创 CAS:利用处理器原子性来保证juc.atomic原子性

什么是CAS: CAS,Compare and Swap即比较并交换。juc包借助CAS实现了区别与synchronized同步锁的一种乐观锁。乐观锁就是每次去修改数据的时候都乐观的认为数据不会被修改,所以不会上锁,但是在更新的时候会判断一下此期间数据有没有更新。CAS有3个操作数:内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A与内存值V相同时,将内存值V修改为B,否则什么也不...

2018-05-03 21:54:26 495

原创 juc的Atomic

Java从JDK1.5开始提供java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作。 原子变量的底层使用了处理器提供的原子指令,但是不同的CPU架构可能提供的原子指令不一样,也有可能需要某种形式的内部锁,所以该方法不能绝对保证线程不被阻塞。atomic使用的是cas的更新方式,当某个线程在执行atomic的方法时,不会被其他线程打断,而别的线程就...

2018-05-03 21:32:37 259

提示
确定要删除当前文章?
取消 删除