自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

maohoo的博客

—— 勿以浮沙筑高台

  • 博客(45)
  • 收藏
  • 关注

原创 日常填坑 ——单一模块导致服务器整体性能下降问题排查

旁边的小伙伴昨天加班到今天的凌晨三点,睡在了公司,早晨我到工位时,和我说改了一晚上的上传接收逻辑(也是前一位离开的小伙伴交接的,属于顺位坑主),终于线上问题是修复了,但是只要一上传,整个项目前台页面就会响应不过来,一片白,拜托我帮他找一找问题,修复下,他已经连续通宵加班两天了,说完就骑着小电驴拖着疲惫的身躯回家了。上传答题卡模块对于一个教育行业的公司来讲,还是一个重要核心模块,之前我还确实没有看...

2019-03-08 16:32:48 324 1

原创 日常填坑 ——linux服务器,mongodb吃内存,导致服务器缓慢

通过free -h 命令,发现服务器可用内存不足,并发现大量的内存被占用到buff/cache中。一类,直接可以通过命令进行释放sync; echo 3 > /proc/sys/vm/drop_caches可以看到,cached的19G内存已经释放。这种情况还算比较乐观的情况,一般也不用过度分析buff/cached占比这么高的原因,比较中轨中轨的解决方案是,写一个定时脚本进行...

2019-02-26 17:05:46 3052 1

转载 老生常谈,HashMap的死循环【基于JDK1.7】

转自占小狼博客问题如果是在单线程下使用HashMap,自然是没有问题的,如果后期由于代码优化,这段逻辑引入了多线程并发执行,在一个未知的时间点,会发现CPU占用100%,居高不下,通过查看堆栈,你会惊讶的发现,线程都Hang在hashMap的get()方法上,服务重启之后,问题消失,过段时间可能又复现了。这是为什么?原因分析在了解来龙去脉之前,我们先看看HashMap的数据...

2018-08-09 10:47:08 14230 23

原创 HashMap源码和JDK1.8以后的一些变化

内部实现JDK1.8以后 HashMap的数据结构发生了一些改变,从单纯的数组加链表结构变成数组+链表+红黑树.如图 其中的Node是HashMap的静态内部类,实现了Map.Entry接口,本质就是一个KV映射,上图中的小圆圈就是一个Nodestatic class Node<K,V> implements Map.Entry<K,V> { fin...

2018-08-08 16:11:46 2058 1

原创 读书笔记《JAVA并发编程的艺术》 第五章 Java中的锁 5.6.2 Condition的实现分析

5.6.2 Condition的实现分析ConditionObject是同步器AbstractQueuedSynchronizer的内部类,因为Condition的操作需要获取相关联的锁,所以作为同步器的内部类也较为合理。 关于Condition的实现,主要包括:等待队列、等待和通知。等待队列 等待队列是一个FIFO的队列,在队列中的每个节点都包含了一个线程引用,该线程就是在Cond...

2018-08-08 11:23:28 241

转载 《算法和数据结构》之哈希表(hash table)

转自:www.cnblogs.com/vamei/archive/2013/03/24/2970339.html概念哈希表(hash table)是从一个集合A到另一个集合B的映射(mapping)。映射是一种对应关系,而且集合A的某个元素只能对应集合B中的一个元素。但反过来,集合B中的一个元素可能对应多个集合A中的元素。如果B中的元素只能对应A中的一个元素,这样的映射被称为一一映射。...

2018-08-07 15:47:48 3540

原创 《算法和数据结构》之队列

基本概念队列(Queue)是一种先进先出(FIFO)的结构,类似于生活中的“独木桥”、“排队”等对于Queue,核心api如下: 方法 描述 void enQueue(T s) 向队列中添加一个新的元素 T deQueue() 移除队列中最早添加的元素 boolean isEmpty() 队列是否为空 int size(...

2018-08-07 14:45:02 413

原创 读书笔记《JAVA并发编程的艺术》 第五章 Java中的锁 5.5 LockSupport工具 5.6 Condition接口

5.5 LockSupport工具作用:阻塞或者唤醒一个线程。package java.util.concurrent.locks; 方法名称 描述 void park() 阻塞当前线程,调用unpark()或者被中断,才能从park()中返回 void parkNanos(long nanos) 阻塞当前线程,最长不超过nanos纳秒 ...

2018-08-07 11:09:08 235 1

原创 读书笔记《JAVA并发编程的艺术》 第五章 Java中的锁 5.3 重入锁 5.4 读写锁

5.3 重入锁重入锁(ReentrantLock)就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁。5.3.1 实现重进入线程再次获取锁:锁需要去识别获取锁的线程是否为当前占据锁的线程,如果是,则再次成功获取。锁的最终释放:线程重复N次获取锁,随后需要第N次释放锁后,才算释放,这期间需要维护一个计数器。5.3.2 公平与非公平获取锁的区别公平锁保证了锁的获取...

2018-08-06 13:59:55 198

原创 读书笔记《JAVA并发编程的艺术》 第五章 Java中的锁 5.2 队列同步器 5.2.2

5.2.2 队列同步器的实现分析1: 同步队列(一个FIFO的双向队列) (1)设置头节点:是通过获取同步状态成功的线程来完成的,所以不需要使用CAS来保证线程安全。 (2)设置尾节点:加入队列需要保证现场安全,所以同步器提供了一个基于CAS的设置尾节点的方法:compareAndSetTail()2: 独占式同步状态获取与释放在获取同步状态时,同步器维护了一个同步队列,获取状...

2018-08-03 13:09:45 243

原创 读书笔记《JAVA并发编程的艺术》 第五章 Java中的锁 5.2 队列同步器 5.2.1

5.2 队列同步器同步器(AbstractQueuedSynchronizer)是实现锁或者说任意同步组件的关键,在锁的实现中聚合同步器,利用同步器实现锁的语义。 同步器和锁的关系:锁是面向使用者的,它定义了使用者与锁交互的接口(比如可以允许两个线程并行访问),隐藏了实现细节;同步器面向的是锁的实现者,它简化了锁的实现方式,屏蔽了同步状态管理、线程的排队、等待与唤醒等底层操作。5.2.1...

2018-08-02 15:18:22 202

原创 读书笔记《JAVA并发编程的艺术》 第五章 Java中的锁 5.1 Lock接口

5.1 Lock接口1:Lock接口出现之前,Java主要靠synchronized关键字实现锁功能。它提供了显式地获取和释放锁的便捷性,但是也缺少了synchronized的隐式获取和释放锁的便捷性,程序员可以在不同场景进行选择。 Lock的使用也很简单,示例代码如下:Lock lock = new ReentrantLock();lock.lock();try {}finall...

2018-08-02 14:10:39 231

原创 读书笔记《JAVA并发编程的艺术》 第四章 Java并发编程基础 4.3 线程间的通信

4.3 线程间的通信4.3.1 volatile和synchronized关键字关键字volatile可以用来修饰字段(成员变量),就是告知程序任何对该变量的访问均需要从共享内存中获取,而对它的改变必须同步刷新到共享内存,它能保证所有线程对变量访问的可见性。 关键字synchronized可以修饰方法或者以同步块的形式来进行使用,它主要确保多个线程在同一个时刻,只能有一个线程处于方法...

2018-08-01 10:33:36 190

原创 读书笔记《JAVA并发编程的艺术》 第四章 Java并发编程基础 4.2 启动和终止线程

4.2 启动和终止线程4.2.1 构造线程JDK1.8中java.lang.Thread类中的init方法源码:private void init(ThreadGroup g, Runnable target, String name, long stackSize, AccessControlContext acc) { if (name ...

2018-07-31 11:27:38 152

原创 《算法和数据结构》之栈

1:基本概念栈类似于生活中的死胡同,遵循后入先出的原则,即LIFO(Last In First Out)。/** * The Stack class represents a last-in-first-out * (LIFO) stack of objects. It extends class Vector with five * operations that allow...

2018-07-30 17:27:48 1171

原创 读书笔记《JAVA并发编程的艺术》 第三章 Java内存模型 3.7 happens-before

3.7 happens-before3.7.1 JMM的设计设计意图程序员对内存模型的使用编译器和处理器对内存模型的实现由于这两个因素相互矛盾,JSR-133专家组在设计JMM时的核心目标就是找到一个好的平衡点:一方面,要为程序员提供足够强的内存可见性保证;另一方面,对编译器和处理器的限制要尽可能地放松。3.7.2 happens-before的定义《JSR-13...

2018-07-30 10:51:48 268

原创 读书笔记《JAVA并发编程的艺术》 第三章 Java内存模型 3.6 final域的内存语义

3.6 final域的内存语义3.6.1 final域的重排序规则在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。示例代码如下:public clas FinalExample{ int i ; ...

2018-07-26 11:19:31 162

原创 读书笔记《JAVA并发编程的艺术》 第三章 Java内存模型 3.5 锁的内存语义

3.5 锁的内存语义3.5.1 锁的释放–获取建立的happens-before关系锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。3.5.2 锁的释放后和获取的内存语义当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中。当线程获取锁时,JMM会把该线程对应的本地内存置为无效。 总结:锁释放与volatile写有相同的语义...

2018-07-26 09:56:33 170

原创 读书笔记《JAVA并发编程的艺术》 第三章 Java内存模型 3.4 volatile的内存语义

3.4 volatile的内存语义3.4.1 volatile的特性理解volatile特性的一个好方法是对volatile变量的单个读、写,看成是使用同一个锁对这些单个读、写操作做了同步。class VolatileFeaturesExample{ volatile long v1 = 0L; //使用volatile声明64位的long型变量 public v...

2018-07-25 16:33:11 192

原创 读书笔记《JAVA并发编程的艺术》 第三章 Java内存模型 3.3 顺序一致性

3.3 顺序一致性3.3.1 数据竞争与顺序一致性JMM对正确同步的多线程程序的内存一致性做了如下的保证: 如果程序是正确同步的,程序的执行将具有顺序一致性(Sequentially Consistent)—— 即程序的执行结果与该程序在顺序一致性内存模型中的执行结果相同。3.3.2 顺序一致性内存模型一个线程中的所有操作必须按照程序的顺序来执行(不管程序是否同步)所有线...

2018-07-25 13:34:00 189

原创 读书笔记《JAVA并发编程的艺术》 第三章 Java内存模型 3.2 重排序

3.2 重排序重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。3.2.1 数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。 数据依赖性分为以下三种:写后读写后写读后写这里所说的数据依赖性仅针对于单个处理器中执行的指令序列和单个线程中执行的操作。3.2.2 as-if-serial语...

2018-07-24 17:07:35 222

原创 读书笔记《JAVA并发编程的艺术》 第三章 Java内存模型 3.1 内存基础

读书笔记《JAVA并发编程的艺术》 第三章 Java内存模型 3.1 内存基础3.1.1 - 3.1.2 Java并发基础与内存模型在并发编程里,需要处理两个问题:线程之间如何通信及线程之间如何同步。通信指的是线程之间以何种机制来交换信息。在命令式编程里中,线程之间的通信机制有两种:共享内存和消息传递。 Java的并发采用的是共享内存模型。 Java线程之间的通信由Java内存模型...

2018-07-24 13:22:45 415

转载 挨踢部落直播课堂第十期:亿级数据量高并发下数据库水平切分的结构设计

转自:http://tn.51cto.com/article/373内容介绍1.大数据量时,数据库架构设计原则2.数据库水平切分架构设计方向3.用户中心,帖子中心,好友中心,订单中心水平切分架构实践下面是58沈剑老师的演讲实录大家好,我是58沈剑,架构师之路的小编,后端程序员一枚,平时比较喜欢写写文字。今天和大家分享,数据量很大的情况下,如何进行数据库架构设计(主要是水平切

2018-01-29 14:41:08 547

原创 @maohoo Intellij idea Version Control File Status Colors ( 版本控制文件状态颜色 )

Added —— 添加Added in not active changelist —— 在不活跃的变更列表中添加Changelist conflict —— 变更列表中存在冲突Copied —— 复制的文件Deleted —— 删除的文件Deleted from file system —— 从文件系统中已删除Have changed descendants ——

2018-01-23 10:43:16 1027 1

原创 @maohoo idea git 目录颜色不随文件颜色改变?

配置完毕后,效果如下:

2018-01-23 10:16:28 5085

原创 @maohoo windows使用git时出现:warning: LF will be replaced by CRLF

windows中的换行符为 CRLF, 而在linux下的换行符为LF,所以在执行add . 时出现提示,解决办法:$ git config --global core.autocrlf false //禁用自动转换 解决之后,comit时可能会出现下面的提示,选择Commit As Is就可以了。

2018-01-23 09:53:11 214

原创 @maohoo Intellij idea 去掉@AutoWired注入bean报错

有时开发项目时,会遇到注入的bean报红,但是并不影响运行,熟悉的朋友会意识到是IDE自身检查级别的原因。所以需要调整IDE对于@Autowired的检查级别File — Settings 需要从Error改为Warning

2018-01-19 16:57:10 4017 1

转载 spring cloud-Feign使用中遇到的问题总结

转载:http://blog.csdn.net/liuchuanhong1/article/details/54728681问题一:在前面的示例中,我们讲过[java] view plain copy@RequestMapping(value = "/user/{id}", method = RequestMeth

2018-01-17 11:42:25 2184

原创 @FeignClient with top level @RequestMapping annotation is also registered as Spring MVC handler

Generally the problem is that: when you annotate an @feignclient interface with @requestmapping annotation the handler will be also registered within Spring MVC.Example:@FeignClient("localapp")

2018-01-17 11:02:19 955

原创 @maohoo Intellij idea 打包生成可执行jar

如果某些场景需要将一个小功能包装成一个bat的批处理程序,可以将java项目打包成一个jar,但是用intellij idea 如何打可执行jar包呢?第一步:选择操作入口Ctrl + Alt + Shift + S第二步:左侧选中“Artifacts”,右侧点击“+”,打包类型为JAR,并且在第二级菜单选择“From modules....”

2018-01-05 14:03:30 589

原创 @maohoo Intellij idea GitLab插件的使用说明

上篇文章讲到了 Intellij idea 中GitLab projects插件的安装,要如何使用此插件进行项目的克隆以及分享呢?前置条件:A: 项目托管在GitLab平台上;B: 个人拥有对应的GitLab权限;001: 将GitLab上已经存在的项目克隆到本地空间第一步如下:首次进入会要求配置GitLab Server Url (服务器地

2018-01-05 13:48:22 5766 3

原创 @maohoo Intellij idea 插件推荐:GitLab插件

如果团队中使用GitLab管理代码,推荐使用idea的插件GitLab,方便项目代码的管理插件名称为 GitLab Projects ,安装步骤如下(1) Ctrl + Alt + S  (2) 选中 “Plugins”--- Browse repositories (3) 搜索 “GitLab Projects”,并在右侧点击安装,过程会重

2018-01-05 13:09:19 10539

原创 @maohoo Spring boot 配置Tomcat 根目录,解决web资源目录找不到的问题

项目背景:spring cloud + zuul 场景描述:涉及文件上传,时报服务器500错误,具体报错信息是spring  boot 内嵌的tomcat实例根目录找不到解决方案:spring boot 项目中,增加如下配置指定tomcat的基目录,否则spring boot内嵌的tomcat容器会创建一个临时目录,但是此目录有一个定期清除策略,会影响web容器资源的使用。se

2018-01-02 10:12:39 7114

原创 @maohoo 两个完整正则,如何搭建"或"的关系?

所以最终的正则为 : "(?:\\$.*?\\$|\\\\\\[.*?\\])"

2017-10-24 09:28:05 620

原创 @maohoo 线程的六种状态

查看Thread类的源码,可以看到其包含一个内部枚举State, 从而发现线程拥有六个状态:(1)New : 新建;线程刚刚被创建,但是并未被启动,即未调用start()方法。(2)Runnable : 可运行;可以在java虚拟机中运行的状态,但是它可能在运行自己的代码,也可能没有,这取决于操作系统处理器。(3)Blocked :  被

2017-10-12 13:54:09 309

原创 @maohoo LaTex转Image

package com.hunter.latexdemo;import org.scilab.forge.jlatexmath.TeXConstants;import org.scilab.forge.jlatexmath.TeXFormula;import org.scilab.forge.jlatexmath.TeXIcon;import javax.imageio.ImageIO

2017-10-10 16:29:01 713

转载 JavaScript中undefined和null的区别

转载:http://www.css88.com/archives/6236#more-6236关于undefined在JavaScript中,undefined这个词有多重含义。首字母大写的Undefined表示的是一种数据类型,首字母小写的undefined表示的是属于这种数据类型的唯一的一个值。但这两种undefined都只能存在于文档或规范中,不能存在于JavaScript代

2016-09-23 11:07:09 383

原创 @maohoo JavaSE回顾之集合篇(二) HashMap 和 HashSet

HashSet和HashMap之间有很多的相似之处。对于HashSet而言,系统采用Hash算法决定集合元素的存储位置,这样可以保证快速存、取集合元素;对于HashMap而言,系统将value当成key的“附属物”,系统根据Hash算法来决定key的存储位置,这样可以保证快速存、取集合的key,而value总是紧跟着key存储。虽然集合号称存储的是java对象,但是实际上并不是真正的把Java

2016-09-21 10:15:04 277

转载 slf4j的包使用说明

http://www.slf4j.org/全称:Simple Logging Facade for Java 简单日志门面(Facade)SLF4J是为各种loging APIs提供一个简单统一的接口,从而使得最终用户能够在部署的时候配置自己希望的loging APIs实现。 Logging API实现既可以选择直接实现SLF4J接口的loging APIs如: logback

2016-09-13 10:43:58 10850

原创 @maohoo Oracle 函数使用之Decode

decode(字段或字段的运算,值1,值2,值3)这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多 该函数的含义如下:if(字段或字段的运算 == 值1){return 值2;} else {       return 值3;} 注意:

2016-09-12 20:50:28 241

空空如也

空空如也

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

TA关注的人

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