技术
缘自天方
个人小心得,不定期更新
展开
-
递归,递推,迭代的区别
递归:1、程序调用自身的编程技巧称为递归,是函数自己调用自己。2、使用递归要注意的有两点:1)递归就是在过程或函数里面调用自身;2)在使用递归时, 必须有一个明确的递归结束条件, 称为递归出口.3、递归分为两个阶段:1)递推:把复杂的问题的求解推到比原问题简单一些的问题的求解;2)回归:当获得最简单的情况后, 逐步返回, 依次得到复杂的解.4、优点:代码更简洁清晰,可读性更好递归可...转载 2019-01-07 19:48:51 · 2191 阅读 · 0 评论 -
多线程同步锁synchronized(全局锁,对象锁)
synchronized锁住的是代码还是对象 在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。synchronized既可以加在一段代码上,也可以加在方法上。关键是,不要认为给方法或者代码段加上synchronized就万事大吉,看下面一段代码:class Sync { public synchron...转载 2018-07-10 11:16:36 · 1141 阅读 · 0 评论 -
Java 并发:原子类
概述: 关于JAVA原生的并发相关的,差不多都在java.util.concurent包下。里面的东西分成如下几大类: 1.原子类 2.锁相关的 3.多线程相关的 4.线程安全的集合,关于线程安全的集合,参考 http://blog.csdn.net/youyou1543724847/article/details/52734876 5.ThreadLocal 6.并发编程(如volatile,原...转载 2018-07-01 17:22:18 · 156 阅读 · 0 评论 -
java 线程方法join的简单使用
一、作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间的并行执行变为串行执行。具体看代码: public class JoinTest { public static void main(String [] args) throws InterruptedException { ThreadJoinTest t1 = new ThreadJoin...原创 2018-07-01 17:02:56 · 111 阅读 · 0 评论 -
URL地址中的中文乱码问题的解决
引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作为的参数的情况,这种情况下,一般都需要正确的设置和编码中文字符信息。乱码问题就此产生了,该如何解决呢?且听本文详细道来。1. 问题的引出 在Restful的服务设计中,查询某些信息的时候,一般的URL地址设计为: get /basic/service? keyword=历史 , 之类的URL地址。转载 2017-11-20 19:42:52 · 36051 阅读 · 0 评论 -
spring声明式事务 同一类内方法调用事务失效
[问题] Spring的声明式事务,我想就不用多介绍了吧,一句话“自从用了Spring AOP啊,事务管理真轻松啊,真轻松;事务管理代码没有了,脑不酸了,手不痛了,一口气全配上了事务;轻量级,测试起来也简单,嘿!”。不管从哪个角度看,轻量级声明式事务都是一件解放生产力的大好事。所以,我们“一直用它”。 不过,最近的一个项目里,却碰到了一个事务管理上的转载 2017-10-11 10:39:34 · 413 阅读 · 0 评论 -
Windows下Mysql5.7开启binlog步骤及注意事项
1、查看是否开启了binlog:show binary logs; 默认情况下是不开启的。2、开启binlog:修改mysql的配置文件my.ini。添加如下配置: 该文件默认不允许修改,需要右键“管理员取得所有权”之后才能保存修改。 另外,需要注意的是图中的my.ini位于:C:\ProgramData\MySQL\MyS转载 2017-10-10 16:08:00 · 7041 阅读 · 1 评论 -
Linux top命令的用法详细详解
查看多核CPU命令mpstat -P ALL 和 sar -P ALL 说明:sar -P ALL > aaa.txt 重定向输出内容到文件 aaa.txttop命令经常用来监控linux的系统状况,比如cpu、内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解。本文通过一个运行中的转载 2017-09-01 11:23:10 · 418 阅读 · 0 评论 -
StringUtils详细介绍
public static void TestStr(){ //null 和 ""操作~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //判断是否Null 或者 "" //System.out.println(StringUtils.isEmpty(null)); //System.out.println(StringUtils.转载 2017-09-06 21:13:53 · 650 阅读 · 0 评论 -
再谈volatile关键字
在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制。 synchronized 同步块大家都比较熟悉,通过 synchronized 关键字来实现,所有加上synch转载 2017-08-28 16:02:56 · 192 阅读 · 0 评论 -
JVM笔记
JVM 一.虚拟机的基本结构 1.jvm整体架构 类加载子系统:负责从文件系统或者网络中加载class信息,存入方法区中。方法区(Perm):存放加载后的class信息,包括静态方法,jdk1.6以前包含了常量池。参数:-XX:PermSize初始值 -XX:MaxPermSize最大值 Java堆(Hea转载 2017-08-28 16:01:20 · 237 阅读 · 0 评论 -
JVM调优总结
数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。 基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAd转载 2017-08-28 15:59:36 · 370 阅读 · 0 评论 -
分布式锁的几种实现方式
目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致...转载 2018-07-10 13:33:11 · 106 阅读 · 0 评论 -
一致性哈希算法
普通的哈希算法采用简单取模的方式,将缓存服务器进行散列,通常情况下是没有问题的,但是当缓存服务器的个数发生变动时,将会产生较大的影响如上图所示,之前有4台缓存服务器,当增加1台缓存服务器之后,除数的变化(4 -> 5)导致求模结果变化,所有缓存查询均未命中即缓存服务器的个数发生变化时,在一段时间内(缓存重建完毕之前),会有大量缓存查询未命中,导致这段时间内的服务整体性能下降特别严重一致性哈希...转载 2018-07-10 13:33:58 · 734 阅读 · 0 评论 -
阻塞队列
在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。 在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了De...转载 2018-08-12 16:57:05 · 104 阅读 · 0 评论 -
Spring中bean的作用域与生命周期
在Spring中,那些组成应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。简单地讲,bean就是由IoC容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。而bean的定义以及bean相互间的依赖关系将通过配置元数据来描述。 Spring中的bean默认都是单例的,这些单例Bean在多线程程序下如何保证线程安全呢?例如对于Web应...转载 2018-08-11 16:39:07 · 20846 阅读 · 3 评论 -
TCP 长连接/短连接 三次握手/四次握手
建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:先来看看如何建立连接的。首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。那如何断开连接呢?简单的过程如下:在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN,...转载 2018-07-13 18:12:39 · 590 阅读 · 0 评论 -
类加载的三种方式比较
概念类加载器(ClassLoader),顾名思义,即加载类的东西。在我们使用一个类之前,JVM需要先将该类的字节码文件(.class文件)从磁盘、网络或其他来源加载到内存中,并对字节码进行解析生成对应的Class对象,这就是类加载器的功能。我们可以利用类加载器,实现类的动态加载。Class的装载包括3个步骤:加载(loading),连接(link),初始化(initialize)加载:查询并加载类...转载 2018-07-13 13:59:21 · 1181 阅读 · 1 评论 -
Spring中多个工程上多个资源文件ignoreUnresolvablePlaceholders配置
Spring中多个工程下多个资源文件ignoreUnresolvablePlaceholders配置<bean id="propertyConfigurerForAnalysis" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="l...转载 2018-07-06 10:23:55 · 686 阅读 · 0 评论 -
Java动态代理之JDK实现和CGlib实现(简单易懂)
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6542259.html 一:代理模式(静态代理) 代理模式是常用设计模式的一种,我们在软件设计时常用的代理一般是指静态代理,也就是在代码中显式指定的代理。 静态代理由 业务实现类、业务代理类 两部分组成。业务实现类 负责实现主要的业务方法,业务代理类负责对调用的业务...转载 2018-07-12 16:57:55 · 183 阅读 · 0 评论 -
java的动态代理机制详解(适用初学者)
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能,我们更需要学习的是其底层是怎么样的一个原理,而AOP的原理就是java的动态代理机制,所以本篇随笔就是对java的动态机制进行一个回顾。在java的动态代理机制中,有两个重要的类或接口,一...转载 2018-07-12 11:06:41 · 178 阅读 · 0 评论 -
JAVA并发编程J.U.C学习总结
JSR 166及J.U.C什么是JSR:JSR,全称 Java Specification Requests, 即Java规范提案, 主要是用于向JCP(Java Community Process)提出新增标准化技术规范的正式请求。每次JAVA版本更新都会有对应的JSR更新,比如在Java 8版本中,其新特性Lambda表达式对应的是JSR 335,新的日期和时间API对应的是JSR 310。什...转载 2018-07-05 14:32:13 · 260 阅读 · 0 评论 -
JDK动态代理实现原理
之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白。比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的,直到前几个星期才把这些问题全部搞明白了。 废话不多说了,先来看一下JDK的动态是怎么用的。 Java代码 package dynamic.proxy; import java.lang.reflect.InvocationH...转载 2018-07-11 18:38:01 · 117 阅读 · 0 评论 -
maven快照版本和发布版本
在使用maven过程中,我们在开发阶段经常性的会有很多公共库处于不稳定状态,随时需要修改并发布,可能一天就要发布一次,遇到bug时,甚至一天要发布N次。我们知道,maven的依赖管理是基于版本管理的,对于发布状态的artifact,如果版本号相同,即使我们内部的镜像服务器上的组件比本地新,maven也不会主动下载的。如果我们在开发阶段都是基于正式发布版本来做依赖管理,那么遇到这个问题,就需要升级组...转载 2018-07-04 13:17:42 · 363 阅读 · 0 评论 -
一致性哈希算法的两种优化方案
简介上一篇博客我简单的介绍了一致性哈希算法的基本思想。但是一致性哈希算法的提出当然也同样伴随着新的问题出现,那就是当某一个服务器结点挂掉之后,它的任务就会分配到它的下一个服务器结点,那么这就有悖于分布式系统中需要满足平衡性的要求。问题雪崩效应在服务器上会有一些数据会经常被访问,这些数据的访问次数远远高于其他数据,那么这些数据就被称为热点数据,理所当然在分布式服务器中承载这些热点数据的服务器的负载就...转载 2018-07-10 15:11:50 · 692 阅读 · 0 评论 -
dubbo超时与超时后自动重复调用的问题
问题陈述:工作中遇到一个问题,服务一通过dubbo调用服务2,问题是最终结果是服务一最终成功了,但是服务二被执行了两次。问题分析通过分析报文可以发现,服务二被调用了两次,两次访问时间间隔为3秒,并且都成功了。而在服务一这边的日志显示,有一个dubbo服务调用超时的异常,然后虽然超时了,但在3秒多的时候又返回了结果,提示warn,然后按照正常的流程走了下去转载 2017-08-28 10:45:48 · 2485 阅读 · 0 评论 -
48张帮助程序员梳理知识框架结构图谱
汇集整理泛 IT 技术领域(云计算,大数据,运维,安全,开发语言,智能硬件,前端,后端等等)学习技能图谱,帮助程序员梳理知识框架结构,并尝试提供路径指导和精华资源,方便技术人学习成长。 后续技能图谱内容将会持续更新H5技能图谱1.0.pngHadoop技能图谱.jpg转载 2017-08-25 19:43:16 · 4385 阅读 · 1 评论 -
explain讲解
explain显示了MySQL如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。先解析一条sql语句,看出现什么内容EXPLAINSELECTs.uid,s.username,s.name,f.email,f.mobile,f.phone,f.postalcode,f.addressFROM uchome_space ASs,uchome_sp转载 2017-08-25 15:53:57 · 337 阅读 · 0 评论 -
Integer常量池
在Java中有8中基本数据类型,基本类型是分配在栈空间上的,Java为我们提供了分配在堆栈空间的8种基本类型的包装类(Byte、Short、Integer、Long、Float、Double、Boolean、Character),这些包装类的实例对象除了包装的数据不一样外,其他的没有很明显的差别。 就以Integer为例,各个Integer对象的差别在于包装的int类型的值不同而已,假设Jav原创 2017-08-13 17:06:27 · 1510 阅读 · 0 评论 -
闲谈Tomcat性能优化
Tomcat在各位JavaWeb从业者常常就是默认的开发环境,但是Tomcat的默认配置作为生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈.幸好Tomcat还有很多的提升空间.下文介绍一下Tomcat优化,可以分为内存,线程,IO.一:Tomcat内存优化,启动时告诉JVM我要一块大内存(调优内存是最直接的方式)Windows 下的catalina.bat原创 2017-08-05 18:09:09 · 150 阅读 · 0 评论 -
两款codereview工具
我们是使用Eclipse IDE开发的,Eclipse的插件不计其数,不怕找不到,就怕你不找,因此从Eclipse Code Review Plugin 下手。经过调研和试用,我找到两款比较好用的免费插件:ReviewClipse 和 Jupiter 。简单介绍一下这两个工具的特点和在Qone中的使用场景ReviewClipse 官方地址:http:转载 2017-08-05 17:02:01 · 1439 阅读 · 0 评论 -
JVM工作原理
JVM的生命周期 首先分析一下JVM实例和JVM执行引擎实例的区别 JVM实例:JVM实例对应了一个独立运行的java程序 它是进程级别的 JVM执行引擎实例则对应了属于用户运行程序的线程原创 2017-08-13 11:15:11 · 189 阅读 · 0 评论 -
让SpringMVC支持可版本管理的Restful接口
需求移动互联网时代的到来,软件开发的模式也在变化。记得以前做B/S的后台开发,基本上没有Http接口一说,全部是通过渲染模板技术(jsp,freemark)把最终html展示给最终用户。现在完全变了,基于后台接口提供方,我们从来不是针对只是浏览器展示的后台输出,而是各种终端,比如android,ios。所以设计接口的时候一定要小心,一旦放出去的接口可能就永远都难以变动(除非你强制客户端用户转载 2017-08-11 10:46:31 · 2696 阅读 · 0 评论 -
ConcurrentHashMap实现原理
ConcurrentHashMap是Java1.5中引用的一个线程安全的支持高并发的HashMap集合类。这篇文章总结了ConcurrentHashMap的内部实现原理,是对于自己理解后的一些整理。1.HashTable与ConcurrentHashMap的对比HashTable本身是线程安全的,写过Java程序的都知道通过加Synchronized关键字实现线程安全,这样对整转载 2017-08-09 11:16:28 · 152 阅读 · 0 评论 -
Spring实现mysql读写分离
Spring实现mysql读写分离原创 2017-06-11 16:17:34 · 457 阅读 · 0 评论 -
sql 查出一张表中重复的所有记录数据
1、在面试的时候碰到一个 问题,就是让写一张表中有id和name 两个字段,查询出name重复的所有数据,现在列下:select * from xi a where (a.username) in (select username from xi group by username having count(*) > 1)2、查询出所有数据进行分组之后,和重复数据的重复次数的查原创 2017-07-10 20:00:58 · 353 阅读 · 0 评论 -
Spring中@Autowired注解和@Resource注解的区别
spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。 @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是nam原创 2017-07-10 17:15:44 · 308 阅读 · 0 评论 -
mysql 中时间戳和日期相互转换
1*MySQL 将时间戳直接转换成日期时间*FROM_UNIXTIME()是MySQL里的时间函数 select uid,userid,username,email,FROM_UNIXTIME(time,’%Y年%m月%d’) from members 以上例子是sql语句的例子,直接能将mysql的时间戳类型(time)转换成日期格式time为需要处理的参数(该参数是Unix 时间戳),可以是字原创 2017-06-03 09:57:14 · 1927 阅读 · 0 评论 -
Java奇淫巧技之Lombok
背景 我们在开发过程中,通常都会定义大量的JavaBean,然后通过IDE去生成其属性的构造器、getter、setter、equals、hashcode、toString方法,当要对某个属性进行改变时,比如命名、类型等,都需要重新去生成上面提到的这些方法,那Java中有没有一种方式能够避免这种重复的劳动呢?答案是有,我们来看一下下面这张图,右面是一个简单的JavaBean,只定义了两个转载 2017-06-06 13:10:41 · 331 阅读 · 0 评论 -
HashMap实现原理分析
1. HashMap的数据结构数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除转载 2017-08-13 19:14:36 · 150 阅读 · 0 评论