自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 post

var token;var loginBody = {};loginBody.method = "com.yuyuka.billiards.api.openid.login";loginBody.channelCode = "h5_api_get";loginBody.timestamp = "12123";loginBody.bizContent = "{\"openId\":\"ob...

2019-12-28 16:31:11 249

原创 json的泛型反编译,解决类型擦粗问题。

List<Check> value = (List)GsonFactory.getGson().fromJson(rawResponse.getContent(), (new TypeToken<List<Check>>() { }).getType()); return new Response(value, r...

2020-03-21 15:30:54 351

原创 golang源码

type m struct { /* 1. 所有调用栈的Goroutine,这是一个比较特殊的Goroutine。 2. 普通的Goroutine栈是在Heap分配的可增长的stack,而g0的stack是M对应的线程栈。 3. 所有与调度相关的代码,都会先切换到g0的栈再执行。 */ g0 *g // gorou...

2020-03-21 15:29:44 330

原创 spring ioc aop springmvc springboot的学习

以前没学spring的时候开发项目是这样的实体类—>class User{ }daoclass–> UserDao{ … 访问db}service—>class UserService{ UserDao userDao = new UserDao();}actionclass UserAction{UserService userService = new UserSe...

2020-01-23 21:31:35 346

原创 一些常常考的算法题

时间复杂度:看一个代码执行的最长次数是多少空间复杂度:看一个素组分配的最大空间变量,并且这数组被使用,那就是n。快速排序:private static void quickSort(int[] array, int low, int high) { if (low >= high) { return; } int ...

2020-01-18 20:22:54 178

原创 golang搭建项目教程

golang与Java的不同:go的特性体现在通道和高并发,可做中间件,云计算,而java是业务性语言,搭建微服务架构。项目下的vendor目录GOROOT/srcGOPATH/src依赖包加到本地:go get github.com/go-sql-driver/mysqlgovendor:go get只能算下载器而已,govendor提供下载,更新,移除、添加等多种管理命令。g...

2020-01-18 20:22:41 1202

原创 java的一些基础啊

多线程中使用静态方法或者静态类会不会有线程安全问题呢?public class Test{ public static String hello(String str) { String tmp = ""; tmp = tmp + str; return tmp; }}静态方法如果没有使用静态变量,则没有线程安全问题。为什...

2020-01-17 22:33:53 79

原创 zookeeper

简单来说Zookeeper=文件系统+监听通知机制。zookeeper功能非常强大,可以实现诸如分布式应用配置管理、统一命名服务、状态同步服务、集群管理等功能,我们这里拿比较简单的分布式应用配置管理为例来说明。假设我们的程序是分布式部署在多台机器上,如果我们要改变程序的配置文件,需要逐台机器去修改,非常麻烦,现在把这些配置全部放到zookeeper上去,保存在 zookeeper 的某个目录节...

2020-01-10 22:54:59 173

原创 kafka 深入理解

Kafka Stream :它表示一个无限的,不断更新的数据集。流是一个有序的,可重放(反复的使用),不可变的容错序列,数据记录的格式是键值对(key-value)。通过Kafka Streams编写一个或多个的计算逻辑的处理器拓扑。其中处理器拓扑是一个由流(边缘)连接的流处理(节点)的图。流处理器是处理器拓扑中的一个节点;它表示一个处理的步骤,用来转换流中的数据(从拓扑中的上游处理器一次...

2020-01-09 19:51:50 330

原创 设计模式

观察者模式使用场景:一个对象对其他对象有影响的时候1. 汇率对出口成本或进口利率或者公司利润率影响package observer;import java.util.*;public class RMBrateTest{ public static void main(String[] args) { Rate rate=new RMBrate();...

2020-01-09 00:03:05 215

原创 kafka

学习kafka必会名词producer:生产者,就是它来生产“鸡蛋”的。consumer:消费者,生出的“鸡蛋”它来消费。topic:你把它理解为标签,生产者每生产出来一个鸡蛋就贴上一个标签(topic),消费者可不是谁生产的“鸡蛋”都吃的,这样不同的生产者生产出来的“鸡蛋”,消费者就可以选择性的“吃”了。相当于“队列”broker:就是篮子了。kafka是一个高吞吐的分布式消息系统...

2020-01-04 17:46:59 1452

原创 redis学习

redis的数据结构redis支持五种数据格式:string:字符串list:列表hash:散列表set:无序集合zset:有序集合stringlen:保存SDS字符串长度buf[]:保存字符串每个元素free:记录了buf数组中未使用字节数量...

2020-01-03 20:29:55 619

原创 mysql学习

索引原理想理解索引原理必须清楚一种数据结构,平衡树(非二叉树),b tree或者 b+ tree,也有用hash桶做数据结构。我们平时的表会加上索引,建表的时候如果不指定主键,数据库会拒绝建表语句的执行,加上了主键,磁盘上的存储结构由整齐排列的结构变成了树状结构,也就是变成了一个索引。就是所谓的聚集索引。这样就经过三次查找就能找到了,但是会降低写,因为增删改都会破坏树结构,重新平衡。非...

2020-01-02 13:18:26 123

原创 并发的异常

中断一个线程Thread.interrupt()时会触发下面一种情况:如果线程在调用 Object 类的 wait()、wait(long) 或 wait(long, int) 方法,或者该类的 join()、join(long)、join(long, int)、sleep(long) 或 sleep(long, int) 方法过程中受阻,则其中断状态将被清除,它还将收到一个 Interrupt...

2019-12-31 00:17:16 274

原创 线程池ThreadPool

我们如果拼房创建销毁线程的话,大大浪费时间效率,更是浪费内存,线程完成后死亡,线程对象变垃圾,如何让线程执行完后不立即销毁,二十重复使用,继续执行其他任务呢?答案就是线程池线程池的上层接口Executor,定义了和新方法是execute(Runnable command)最后被ThreadPoolExecutor类实现,该方法是用来传入任务的,而且ThreadPoolExecutor是线程池的核...

2019-12-30 00:01:54 194

原创 并发容器

exchanher交换数据,代码如下:package concurrent;import java.util.concurrent.Exchanger;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.*;public class Exch...

2019-12-29 19:40:29 97

原创 ConcurrentLinkedQueue与BlockingQueue与LinkedBlockingQueue与ConcurrentLinkedQueue

ConcurrentLinkedQueue性能好于BlockingQueueConcurrentLinkedQueue重要方法:add()和offer()都是加入元素的方法,在ConcurrentLinkedQueue中,这两个方法没有任何区别。poll()和peek()都是取头元素节点,区别在于前者会删除元素,后者不会入队列过程public void put(E e) throws...

2019-12-29 01:23:47 396

原创 Concurrency

尽可能的使用ConcurrentHashMap和ConcurrentSkipListMapputIfAbsent(K key,V value):不存在key对应的值,将value以key假如map,否则返回旧值if (!map.containsKey(key)) return map.put(key, value);else return map.get(key);看下面单例...

2019-12-27 00:01:53 206

原创 锁的问题总结

所有的锁都有性能消耗,高并发下,锁带来上下文切换,资源同步等消耗非常可观。,线程在锁上消耗比线程本身还多,应该尽可能少用锁,如果不可避免,那就用非阻塞算法解决问题,但不是绝对的。内部锁:java通过synchronized保持原子性,独占锁,锁请求互斥,跟高级锁(Lock/ReadWriteLock),synchronized简单,lock必须在finally代码里用,Lock的资源已经用到了...

2019-12-26 23:42:51 165

原创 Semaphore和读写锁

Semaphore计数信号量,计数器不为0放线程,达到0,所有线程都呗阻塞,每一次请求,计数器减一,每次释放计数器加一,达到了0,新许可挂起。package xylz.study.concurrency.lock;import java.util.concurrent.Semaphore;import java.util.concurrent.locks.Lock;import java...

2019-12-26 01:20:00 376

原创 Concurrency

释放锁Release/TryReleaseunlock操作实际上调用了AQS的release操作,释放持有的锁public final boolean release(int arg) { if (tryRelease(arg)) { Node h = head; if (h != null && h.waitStatus != 0)...

2019-12-25 00:13:09 128

原创 并发编程经验总结

AtomicMarkableReference描述<Object,Boolean>,原子修改Object或者Boolean值,在缓存或状态描述比较有用,修改Object/Boolean可有效的提高吞吐量AtomicStampedReference维护<Object,int>,用原子方式更新,对对象的并发技术,可以携带对象Object引用,对对象和计数进行原子操作。Ato...

2019-12-23 12:36:09 215

原创 高并发内存模型

编译器生成的指令顺序与源代码顺序不通编译器把变量保存在寄存器而不是内存处理器可以采用乱序并行方式来执行指令缓存可能改变写入变量提交到主内存次序保存在处理器本地缓存的值对其他处理器不可见在多线程环境中,维护程序串行性导致很大性能开销,对于并发程序线程来说,大部分时间执行各自任务,线程协调会减低运行速度。每个处理器有自己缓存,并定期与主内存协调。重排序调度器采用不恰当方式交替执行不同线...

2019-12-21 00:26:32 139

原创 并发高级 同步工具篇

类库包含了许多类例如FutureTask、Semaphore、BlockingQueue等,但是这些玩意又个共同的概念,那就是不能从空的队列中删除元素,这些操作执行之前,必须等队列进入非空状态,或者任务进入已完成状态。可阻塞状态变量必须由对象的锁来保护,使他们在测试前提条件同时保持不变,如果前提条件没满足,必须释放锁,以便其他线程修改状态对象。否则,前提条件永远无法变真。比如在生产者-消费者设...

2019-12-20 12:20:44 134

原创 并发编程 高级主题篇

显示锁ReentrantLock实现了Lock接口,内置锁无法中断一个正在获取锁的线程,无法再获取一个锁无限等待下去。必须在获取该锁的代码块释放,却无法实现非阻塞结构的加锁规则。使用Lock锁,必须在finally中释放锁,否则,如果在被保护的代码中抛出了异常,锁将永远无法释放。必须考虑在try中抛出异常的情况用ReentrantLock保护对象状态如果没有用finally来释放Lock,很...

2019-12-19 23:06:35 114

原创 并发程序测试

测试availableItems表示可删除元素个数 初始0 availableSpaces表示可插入缓存元素个数,初始值等于缓存大小。take先从缓存获得许可,不为空删除下一个元素,put执行顺序相反测试前先保证缓存为先不空后不满,N个元素插入N个缓存,可以成功不会阻塞,测试先是否填满后是否为空...

2019-12-19 00:00:38 81

原创 死锁和代码的性能可伸缩性问题

如下会发生死锁,当A和B线程调用transferMoney的时候等着A向B转账,和B向A转账,就会产生死锁A和B都持有锁以下代码定义了锁的顺序,消除了死锁可能行,System.identityHashCode返回Object.hashCoded,但是极少数情况下会有值相等的情况,所以有一个Tie-Breaking,保证了每次随机有一个线程获得这个锁,比如A先来,获得tieLock锁,再获得fr...

2019-12-18 00:26:20 191

原创 线程池的使用

RemderPageTask向Executor提交页眉和页脚,绘制页面,然后将页眉页脚合并起来,单线程会经常发生死锁。子啊线程池中,如果所有正在执行的任务的线程等待其他处于工作队列的任务而阻塞,出现线程饥饿死锁,除非线程池够大。·* CPU数目 比如平均每个线程CPU运行时间为0.5s,而线程等待时间(非CPU运行时间,比如IO)为1.5s,CPU核心数为8,那么根据上面这个公式估算得到:...

2019-12-17 21:16:24 328

原创 并发编程第二部分结构化并发应用程序

以上代码串行执行,但是handleRequest执行很慢,可用以下方案啊,每次请求都创建一个线程,结构上类似于单线程版本,但是每次accept的时候都可以交给线程去处理,然后接受下一个连接由此我们可以得出小结论任务处理过程从主线程分离出来 ,主循环能更快等到下一个到来的连接,这样程序完成前面请求后接受新请求,提高响应性任务并行处理,服务多个请求,例如等待i/o,获取锁,获取资源可用性,...

2019-12-15 01:17:00 161

原创 并发编程第一部分

atomicReference类型提供了较为奇葩的一些方法,如下图int addAndGet(int delta):以原子方式将给定值与当前值相加。 实际上就是等于线程安全版本的i =i+delta操作。boolean compareAndSet(int expect, int update):如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值。 如果成功就返回true,否则返...

2019-12-11 21:23:35 165

原创 并发编程学习

并发编程三要素1.原子性:全做or全不做2.可见性:变量一改多也改3.有序性:代码先后执行线程五大状态创建->就绪->运行(CPU调度)->阻塞->死亡悲观锁:操作必加锁,线程阻塞乐观锁:操作不加锁,失败就重试,知道成功线程协作waitnotifynotifyallsleep:让出cpu使用权,不释放锁yield:暂停一定时间 ...

2019-12-09 00:25:01 183

原创 JVM学习

jvm内存区域与内存溢出异常

2019-12-04 15:30:56 134

原创 spring ioc aop 事务 springmvc springboot学习

1. 实体类—>class User{ }2. daoclass–> UserDao{ … 访问db}3. service—>class UserService{ UserDao userDao = new UserDao();}4. actionclass UserAction{UserService userService = new UserService();}用...

2019-12-03 21:17:37 128

原创 postman

{ "method":"com.yuyuka.billiards.api.authorized.match.add", "channelCode":"h5_api_get", "timestamp":"123123", "bizContent":"{\"id\":89,\"totalBonus\":3000,\"headImageAdd\":http://cripple.oss-cn-be...

2019-11-28 21:02:11 174

原创 mybatis技术总结

List<List<String>> listYNameByKenan = new ArrayList<List<String>>(); for (int i = 0; i < listSelectByKenan.size(); i++) { List<String> list_kenanName = new Arra...

2019-11-27 21:20:36 150

原创 面试入门

hc = head count招人指标,公司有需要招人就是hc,没有就是hr混自己的业绩,hr是有业绩的,每个月要面多少人拉多少人,现在国内hr越做越混回去了,以前目的性很强,挖人招人留意人才市场老人筛有潜力的新人,现在把hr当会计做,踢人招人面人往报表上做,至于需不需要他们才不管。好的hr实际上需要听得更多应该是中层管理的意见,hc就是哪里缺人,这是中层管理才能准确把握的,现实环境现...

2019-11-23 13:07:16 96

原创 idea用git提交代码并合并

1 切换到master2拉一下切换到分支,再重复拉一次3.点这个4 选择有master的打勾,因为我已经提交完了,所以这里没有master,刚刚提交的时候是有的,No commit打勾,然后Merge5 切换到master然后提交代码...

2019-11-11 18:39:57 930

原创 crud2

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/html"><head> <#import '/common/common.ftl' as commonMacro> <@commonMacro.commonStyle /></head><bod...

2019-11-08 21:05:05 156

原创 简单的crud

我写的广告模块,架构是这样的admin层的resources有一些前端的页面,调用controller层controller调用Dtodto相当于数据库domain层api就是接口相当于dao层api通过restful进行映射到service层,service架构是这样的这里我通过逆向工程生成了dao层 domain层以及xml文件上面的api映射service里的provi...

2019-11-06 12:31:36 302

原创 java Debug 技巧

debug遵循从上到下的原则,先从前端页面开始排查错误,到其调用的controller层,然后才是service的数据库层然后debug service的服务

2019-11-05 19:51:54 159

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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