- 博客(64)
- 问答 (1)
- 收藏
- 关注
原创 JUC之ReentrantLock
JUC之ReentrantLock引言承接上篇JUC之AbstractQueuedSynchronizer 我们分析一下最常用的锁 ReentrantLock,即可重入锁。上篇我们分析了aqs的acquire方法和release方法。接下来我们分析ReentrantLock是如何通过aqs实现锁的。Lock先看一下锁的定义。public interface Lock { /*...
2019-05-28 16:35:15 288
原创 JUC之AbstractQueuedSynchronizer
AbstractQueuedSynchronizer从锁说起juc.locks包下提供了常见的锁相关的工具,用来替代synchronized关键字(jdk1.5之前synchronized效率较低)和加强一些锁功能,比如重入锁,公平非公平锁,读写锁等等。AbstractQueuedSynchronizer简称aqs是juc.locks包中锁相关的一个最核心的类,ReentrantLock等锁...
2019-05-21 14:57:10 285
原创 JUC之striped64
striped64简介striped64是java8用来并发计数新加的组件,在并发环境下有更好的性能,64指的是计数64bit的数,即Long类型的数和Double类型的数。striped64是个抽象类,jdk提供了四个实现类,LongAdder LongAccumulator DoubleAdder DoubleAccumulator 我们拿数据说话,分别在并发情况下用synchronize...
2019-04-17 17:19:12 572
原创 JUC之atomic
Atomic简介atomic包下原子操作类提供了一种用法简单、性能高效 、线程安全地更新一个变量的方式。atomic包下一共有12个相关的类,分为4组,分别用于原子更新基本类型,原子更新数组,原子更新引用,原子更新字段。使用原子更新基本类型AtomicBoolean AtomicInteger AtomicLong常用方法,以AtomicInteger为例int ge...
2019-04-17 17:17:40 316
原创 JUC之volatile
前言juc是java并发编程的核心,里面的类有很多设计思想以及编程的技巧值得我们借鉴,个人认为,一个优秀的java程序员必须熟练掌握juc.volatile简介volatile在java中是一个关键字,用于修饰类和实例变量它确保对一个变量的更新以可以预见的方式告知其他线程。当一个域声明为volatile类型后,编译器在运行时会监视这个变量:而且对它的操作不会与其他的内存操作一起被重排...
2019-04-17 17:14:52 208
原创 python装饰器
python装饰器定义装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。装...
2019-01-08 23:10:44 147
原创 poi导致内存泄露分析
poi导致内存泄露分析背景最近线上的机器偶尔会出现cpu打满的情况,内存也很吃紧,导致影响系统的正常运行。如下:可以看出,已经严重影响到线上程序的运行了。分析用jmap打出对应的dump文件并用MAT工具打开。很明显发生了内存泄露。观察一下支配树。可以看出,占用内存最多的是char[]数组对象,总共有700+万个。其次是XSSFSheet,共应用了300+mb的对象。...
2018-12-06 12:01:48 3508
原创 Redis最佳实践
Redis最佳实践背景知识SERVER为单线程处理模式,在处理用户请求的过程中,还会定期插入定时任务,比如:1)过期KEY的删除2)链接超时检查3)AOF文件重写4)扩容存放数据的dic容量这些定期任务大概100ms会触发一次。当有大量的KEY同时过期时,删除过期KEY的任务可能会执行约20ms后才会退出。 大KEY(线上看到过list 的elements超过百万的)删除时会阻塞比...
2018-12-06 10:45:18 902
原创 一次redis调优——连接池优化
redis链接池优化现象现象很明显,新建连接数很高,但是每秒的链接数却不高。我们知道链接的建立是很耗性能的,所以优化的目标是降低新建链接数。我们明明用了链接池了,为什么还会有这么多新建的链接呢?看看当前链接池的配置:参数值说明MinEvictableIdleTimeMillis60000逐出连接的最小空闲时间NumTestsPerEvictionRun...
2018-11-29 20:51:50 20632 6
原创 前后端分离项目部署(部署在同一台服务器)
前后端分离项目部署(部署在同一台服务器)博主现在参与的项目是前后端分离的,前端是用vue写的并用npm构建的,后端是用java写的用maven构建的,但是前端和后端在同一个项目中,之前的部署方式是前端代码在本地调试好后,编译完之后,提交在git上,然后用持续集成工具(基于jenkins)进行编译,部署。这样无疑会影响效率,而且很容易出错,有没有一种方法能一键编译前后端代码并部署呢。编译前脚本...
2018-11-29 19:50:40 56982 1
原创 python 中的迭代器,生成器,可迭代对象。
python 中的迭代器,生成器,可迭代对象。可迭代对象又叫iterable,顾名思义,就是可以迭代的对象,换句话说,可以通过for 来遍历的对象比如集合对象:list,tuple,dict,set,str判断一个对象是不是可迭代对象可以通过isinstance(obj, Iterable) 来判断from collections import Iterableprint(isins...
2018-11-09 01:47:11 268
原创 python中copy和deepcopy
python中copy和deepcopypython中的copy分为浅copy和深copy,即copy和deepcoy对于浅copy来说相当于换了一层皮,可以理解为windows给一个软件加了一个额外的快捷方式。对于深copy来说相当于脱胎换骨头,可以理解为windows重新安装了一套一模一样的软件。下面我们用代码验证一下用浅copyimport copya = [100, 2, 3...
2018-11-08 01:17:32 475
原创 python中is和==
python中is和==python判断两个对象是否相等可以用is和 == 来判断,那么这两者之间有什么区别呢。假如有两个对象a和bis比较的是两个对象的地址是否相同,我们可以理解为 a is b ==> id(a) == id(b)==则比较的是两个对象的值是否相同,可以理解为 a == b ==> a.eq() == b.eq(),实际上 == 就是通过调用两个对象的__e...
2018-11-08 00:33:42 281
原创 分布式锁初探
分布式锁初探为什么需要分布式锁?需要保证在分布式场景下只有一个线程同时在执行一个代码片段或者一个资源同时只有一个线程在使用。常见的场景: 分布式任务,秒杀。需要什么样的分布式锁?高可用有失效时间(避免死锁)可重入(结合具体业务)阻塞(结合具体业务)性能高公平锁(需要?)实现基于数据库实现基于唯一索引我们知道,数据库可以通过唯一索引来保证数据的唯一性,我们可以利用数据...
2019-06-28 17:18:15 257
原创 es安装常见问题
es安装常见问题汇总(持续更新)1. max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536] max number of threads [1024] for user [lishang] likely too low, increase to at le...
2019-02-18 22:19:46 504
原创 vm虚拟机nat模式静态ip配置
vm虚拟机nat模式静态ip配置配置虚拟机网络配置网关ip配置centos文件/etc/sysconfig/network-scripts/ifcfg-eth0这里的网关GATEWAY填写上步设置的网关地址配置dns/etc/resolv.conf重启网络服务service network restart...
2019-02-18 16:06:00 331 1
原创 sonar常见bug类型及解决方法
sonar常见bug类型及解决方法(持续更新)Cast one of the operands of this multiplication operation to a “long”bug代码:Thread.sleep(5 * 1000);原因:用int型整数计算可能会溢出修改后代码:Thread.sleep(5 * 1000L);Close this “PreparedSt...
2018-11-06 17:58:22 41968 1
原创 python模块打包和安装
python模块打包和安装为了让写好的代码方便给别人或者自己使用,最好的方法就是将自己的代码打包。python中代码打包很简单。打包先看下代码的目录结构途中的项目是一个简单的示例为了打包,我们需要在项目的根目录下,也就是practice目录下新建一个setup.pyfrom distutils.core import setupsetup( name='mt',#需要打...
2018-11-06 12:09:12 18942 2
原创 spring源码--IOC容器的实现:BeanFatory后置处理
当BeanFatory解析完资源文件并将bean的信息注册进BeanFatory之后,spring接下来对BeanFactory做了统一的后置处理,el表达式的解析,以及基于@Configuration等注解的bean的解析注册也是在这期间发生的。public void refresh() throws BeansException, IllegalStateException { sy...
2018-11-03 00:01:46 242
原创 PyCharm django.core.exceptions.ImproperlyConfigured: settings are not configured
用PyCharm运行django项目脚本报错django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_M...
2018-10-29 17:47:33 1719
原创 centos7 安装python3
centos7 安装python31. 查看当前python版本centos7 默认安装了python2.7.5,使用python -V查看当前python版本。由于yum等软件使用的是python2.7.5版本,直接卸载python2会导致yum等软件不能使用,所以我们要安装python3时同时还需要有python2。2.准备安装环境可以直接通过yum安装python3,但是yum上的...
2018-10-22 14:55:45 575
原创 slf4j logback log4j slf4j-log412 log4j-over-slf4j 关系详解
引言对于j2ee 开发者来说,难免会引入各种框架,而当需要查看框架打印的日志的时候,你会发现每个框架引用的日志框架又不相同,什么slf4j,logback,log4j… 头都大了,处理的一不小心,轻则日志打印不出来,重则项目起不来,甚至会造成内存泄露。那么他们之间到底是什么关系呢?java中的日志框架上图可以大体概况java的日志框架结构,slf4j和jcl作为日志的门面,存在于最上层。我...
2018-09-25 16:00:49 4813 1
原创 java.io.IOException: invalid constant type: 15 解决方法
错误java.io.IOException: invalid constant type: 15at javassist.bytecode.ConstPool.readOne(ConstPool.java:1027)at javassist.bytecode.ConstPool.read(ConstPool.java:970)at javassist.bytecode.ConstPool....
2018-09-25 14:33:57 2482
原创 spring源码--IOC容器的实现:Bean的解析和注册
引言上篇分析spring载入resource的过程,接下来我们继续分析spring是如何解析xml并注册Bean的相关信息到BeanFactory中的。解析和注册承接上篇,上篇在XmlBeanDefinitionReader的doloadBeanDefinitions()方法中,我们看到了spring将Resource资源转换为Document的入口方法。protected...
2018-09-21 18:41:18 138
原创 java.lang.AbstractMethodError: org.hibernate.validator.internal.engine.ConfigurationImpl.getDefaultP
问题org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerAdapter' defined in class path resource [org/springframework/web/servlet/config/annotati...
2018-09-20 12:06:11 6154 1
原创 spring-data-mongodb 和spring 版本不兼容导致的错误
错误org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongoTemplate': Bean instantiation via constructor failed; nested exception is org.springframework.beans.Bean...
2018-09-20 12:04:28 9462
原创 java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/exc/InvalidDefinitionException
问题org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerAdapter' defined in class path resource [org/springframework/web/servlet/config/annotati...
2018-09-20 12:04:20 864 1
原创 Lombok从入门到放弃
引言lombok做为时下比较流行的java工具包,可以使我们编写类的时候省去很多冗余的代码。比如setter和getter方法,万恶的Logger log = LoggerFactory.getLogger(this.getClass()),以及toString方法等等。详细的使用介绍就不多讲了,只需要通过在类或者方法上加入注解。官方文档也有说明。坑重点说说使用过程中的坑吧,这东西方便...
2018-07-17 20:15:08 2765
原创 spring源码--IOC容器的实现:资源文件的加载过程
引言上一篇从总体了解的spring IOC容器的过程–大致可以分为资源定位,解析bean,初始化bean三个过程,那我们就分析一下spring如何对资源定位以及加载的。加载过程我们还是以ClassPathXmlApplicationContext为例,上篇说到,资源的加载是由AbstractApplicationContext的obtainFreshBeanFactory()方法开...
2018-07-13 11:26:08 225
原创 spring源码--IOC容器的实现:容器初始化
引言之前大致分析了spirngIOC容器的整体设计思路,接下来我们来分析一下spring是如何加载和解析bean的。Bean加载流程spring容器的初始化大致可以分为3个步骤:资源定位–>解析配置–>初始化。对应到一个bean来说,首先需要找到配置信息资源对应的位置,然后解析配置信息,最后初始化bean。 我们以ClassPathXmlApplicationCont...
2018-07-10 14:13:50 266
原创 centos7 下配置多ip
通常我们的电脑都只有一个网卡和一个ip地址,但是某些时候我们可能需要有多个ip,但是只有一个网卡,怎么办呢?这时候虚拟ip就出场了。 简单的说,就是在一个网卡上绑定多个ip地址,当然网卡关闭之后,所有的ip就不能用了(这不是废话吗 哈哈)。 我们先来看看网卡信息-bash-4.1# ifconfiglo Link encap:Local Loopback ...
2018-06-11 18:18:23 6069
原创 spring源码--IOC容器的实现:概述(2)
引言上一篇分析了springIOC相关的核心接口,下面分析一下这些接口中用到的一些相关的类。boolean BeanFactory .isTypeMatch(String name, ResolvableType typeToMatch) ResolvableType 可以看做spring对class类的增强,提供了一些spring需要的一些方法。比如: – boolean isA...
2018-06-11 16:00:24 305
原创 spring源码--IOC容器的实现:概述
引言spring做为java程序员必学的框架,从学校的课堂上,到实际工作中,都可以看到它的身影。之前看过一篇文章,说对于spring的源码只需要了解架构,不需要关注具体的实现,不敢苟同。如果对于java程序员最重要的框架都不关注具体实现,那么还有什么代码值得去关注呢?有人说spring让java程序员丧失了程序设计的能力,只需要关注service,dao这些东西,那么它给我们提供这些便利的背后...
2018-06-05 12:34:53 250
原创 centos7 修改runlevel
linux默认的运行登记信息存放在 /etc/inittab共有7个级别,分别表示 - 0表示关机状态 - 1表示单用户模式 - 2表示没用网络的命令行级别 - 3表示命令行级别 - 4表示保留行级别 - 5表示图形化界面 - 6表示正常状态下关机重启centos7之前只需要修改/etc/inittab文件即可 centos7之后由systemd统一管理,并且...
2018-05-22 00:46:42 2034
原创 centos7 下修改网络配置
修改ip地址编辑 /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet BOOTPROTO=static 静态ip DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATA...
2018-05-22 00:15:40 115783 9
原创 LeetCode(11) Container With Most Water(盛水最多的容器)
盛水最多的容器问题: Given n non-negative integers a1, a2, …, an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i...
2018-04-09 00:07:04 158
原创 LeetCode(10) Regular Expression Matching解题报告
正则式匹配问题: ‘.’ Matches any single character. ‘*’ Matches zero or more of the preceding element. The matching should cover the entire input string (not partial). The function prototype s
2018-01-24 17:00:50 143
原创 LeetCode(9) Palindrome Number解题报告
判断一个整数是否为回文串问题: Determine whether an integer is a palindrome. Do this without extra space.翻译: 判断一个整数是否为回文串,不要使用额外的空间。解题方案:对于位数是偶数位的整数,我们只需要将整数平均分为两部分:高位部分和低位部分,将低位部分反转并和高位部分比较,
2018-01-24 15:38:22 134
原创 centos7下hadoop安装
centos7下hadoop安装jdk安装1.centos下默认安装的是openjdk,需要先卸载。先检查是否含有openjdk的包 java -version rpm -qa | grep java2.如果发现有安装好的OpenJDK以及安装包的话那么首先依次执行卸载。 卸载命令: rpm -e –nodeps tzdata-java-2012c-1.el6.noarch
2017-12-25 21:58:09 3981
空空如也
Android系统应用的aidl怎么获取,为什么我下载的sdk中,没有aidl文件?
2017-06-13
TA创建的收藏夹 TA关注的收藏夹
TA关注的人