互联网
文章平均质量分 89
????0528
这个作者很懒,什么都没留下…
展开
-
转载
1、服务端 package contacts; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.nio.ByteBuffer; import java....转载 2018-09-11 18:56:28 · 204 阅读 · 0 评论 -
java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁
之前做过一个测试,详情见这篇文章《多线程 +1操作的几种实现方式,及效率对比》,当时对这个测试结果很疑惑,反复执行过多次,发现结果是一样的: 1. 单线程下synchronized效率最高(当时感觉它的效率应该是最差才对); 2. AtomicInteger效率最不稳定,不同并发情况下表现不一样:短时间低并发下,效率比synchronized高,...转载 2018-04-09 16:08:09 · 208 阅读 · 0 评论 -
spring事务管理器设计思想
在最近做的一个项目里面,涉及到多数据源的操作,比较特殊的是,这多个数据库的表结构完全相同,由于我们使用的ibatis框架作为持久化层,为了防止每一个数据源都配置一套规则,所以重新实现了数据源,根据线程变量中指定的数据库连接名称来获取实际的数据源。一个简单的实现如下:public class ProxyDataSource implements DataSource {/** 数据源池配置 */...转载 2018-03-16 22:39:03 · 1238 阅读 · 1 评论 -
阿里巴巴常考面试题及汇总答案
一、String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?答: 1、String是字符串常量,StringBuffer和StringBuilder都是字符串变量。后两者的字符内容可变,而前者创建后内容不可变。2、String不可变是因为在JDK中String类被声明为一个final类。3、StringBuffer是线程安全的,而Str...转载 2018-03-16 22:19:21 · 728 阅读 · 0 评论 -
浅谈mysql的索引设计原则以及常见索引的区别
索引定义:是一个单独的,存储在磁盘上的数据库结构,其包含着对数据表里所有记录的引用指针.数据库索引的设计原则:为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引。那么索引设计原则又是怎样的?1.选择唯一性索引唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如...转载 2018-03-16 22:30:45 · 114 阅读 · 0 评论 -
redis主从复制和集群实现原理
redis主从复制redis主从配置比较简单,基本就是在从节点配置文件加上:slaveof 192.168.33.130 6379主要是通过master server持久化的rdb文件实现的。master server 先dump出内存快照文件,然后将rdb文件传给slave server,slave server 根据rdb文件重建内存表。redis复制过程如下:1、slave server启动...转载 2018-03-16 22:33:12 · 287 阅读 · 0 评论 -
memcache、redis原理对比
一、问题: 数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求。 二、解决方案: 1.通过高速服务器Cache缓存数据库数据 2.内存数据库 (这里仅从数据缓存方面考虑,当然,后期可以采用Hadoop+HBase+Hive等分布式存储分析平台)三、主流解Cache和数据库对比: 上述技术基本上代表了当今在数据存储方面所有的实现方案,其中...转载 2018-03-16 22:32:55 · 114 阅读 · 0 评论 -
Java多线程系列目录(共43篇)
最近,在研究Java多线程的内容目录,将其内容逐步整理并发布。(一) 基础篇01. Java多线程系列--“基础篇”01之 基本概念02. Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式03. Java多线程系列--“基础篇”03之 Thread中start()和run()的区别04. Java多线程系列--“基础篇”04之 synchronized关键字05. Java多线程...转载 2018-03-16 22:32:34 · 266 阅读 · 0 评论 -
Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS
首先介绍一些乐观锁与悲观锁: 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。再比如Java里面的同步原语synchronized关键字的实现也是悲观锁。 乐观锁:顾名思义,就是很乐观,每次去拿数据的时候...转载 2018-03-16 22:22:01 · 131 阅读 · 0 评论 -
ConcurrentHashMap源码剖析
ConcurrentHashMap是Java5中新增加的一个线程安全的Map集合,可以用来替代HashTable。对于ConcurrentHashMap是如何提高其效率的,可能大多人只是知道它使用了多个锁代替HashTable中的单个锁,也就是锁分离技术(Lock Stripping)。实际上,ConcurrentHashMap对提高并发方面的优化,还有一些其它的技巧在里面(比如你是否知道在get...转载 2018-03-16 22:32:18 · 147 阅读 · 0 评论 -
自旋锁、阻塞锁、可重入锁、悲观锁、乐观锁、读写锁、偏向所、轻量级锁、重量级锁、锁膨胀、对象锁和类锁
1、自旋锁自旋锁可以使线程在没有取得锁的时候,不被挂起,而转去执行一个空循环,(即所谓的自旋,就是自己执行空循环),若在若干个空循环后,线程如果可以获得锁,则继续执行。若线程依然不能获得锁,才会被挂起。使用自旋锁后,线程被挂起的几率相对减少,线程执行的连贯性相对加强。因此,对于那些锁竞争不是很激烈,锁占用时间很短的并发线程,具有一定的积极意义,但对于锁竞争激烈,单线程锁占用很长时间的并发程序,自旋...转载 2018-03-16 22:31:57 · 372 阅读 · 0 评论 -
mysql 索引列为Null的走不走索引
要尽可能地把字段定义为 NOT NULL,即使应用程序无须保存 NULL(没有值),也有许多表包含了可空列(Nullable Column)这仅仅是因为它为默认选项。除非真的要保存 NULL,否则就把列定义为 NOT NULLMySQL难以优化引用了可空列的查询,它会使索引、索引统计和值更加复杂。可空列需要更多的储存空间,还需要在MySQL内部进行特殊处理。当可空列被索引的时候,每条记录都需要一个...转载 2018-03-16 22:33:28 · 4552 阅读 · 0 评论 -
java NIO 详解
Java NIO提供了与标准IO不同的IO工作方式: Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Asynchronous IO(异步IO):Java NIO可以让你异步的使用IO,例如:当线程从通道读取数据到缓冲区时,...转载 2018-03-16 22:40:39 · 191 阅读 · 0 评论 -
Java集合及concurrent并发包总结(转)
1.集合包 集合包最常用的有Collection和Map两个接口的实现类,Colleciton用于存放多个单对象,Map用于存放Key-Value形式的键值对。 Collection中最常用的又分为两种类型的接口:List和Set,两者最明显的差别为List支持放入重复的元素,而Set不支持。List最常用的实现类有:ArrayList、LinkedList、Vector及Stack;Se...转载 2018-03-16 22:23:43 · 202 阅读 · 0 评论 -
mycat使用限制
部分 SQL 还不能很好的支持除了分片规则相同、 ER 分片、全局表、以及 SharedJoin,其他表之间的 Join 问题目前还没有很好的解决,需要自己编写 Catlet 来处理 不支持 Insert into 中不包括字段名的 SQL insert into x select from y 的 SQL,若 x 与 y 不是相同的分片规则,则不被支持,此时会涉及到跨分片转移 跨分片的事务,目前...转载 2018-05-03 14:39:27 · 862 阅读 · 0 评论 -
关于Sharding-jdbc
jdbc真是个大坑,如果不是必要进行分库分表的话,就不要使用 sharding-jdbc,因为会有诸多的限制和不方便版本:2.0.0.M3 注意:本篇主要针对spring-mybatis不分库只分表目前Sharding-JDBC还在不断更新中,网上很多资料和答疑都是以前出现但是已修复了的,包括本篇,因此学习资料和问题解答最好是围绕着官方走。推荐加入官方群(在官网里找,提问的人多,答复的人少),可在...转载 2018-05-03 11:35:06 · 8425 阅读 · 0 评论 -
spring boot架构改造
【51CTO.com原创稿件】Spring Cloud 在国内中小型公司能用起来吗?从 2016 年初一直到现在,我们在这条路上已经走了一年多。在使用 Spring Cloud 之前,我们对微服务实践是没有太多的体会和经验的。从最初的开源软件云收藏来熟悉 Spring Boot,到项目中的慢慢使用,再到最后全面拥抱 Spring Cloud。这篇文章给大家介绍我们使用 Spring Boot / ...转载 2018-05-25 14:10:59 · 5528 阅读 · 2 评论 -
@ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常(转载)
零、前言对于与数据库相关的 Spring MVC 项目,我们通常会把 事务 配置在 Service层,当数据库操作失败时让 Service 层抛出运行时异常,Spring 事物管理器就会进行回滚。如此一来,我们的 Controller 层就不得不进行 try-catch Service 层的异常,否则会返回一些不友好的错误信息到客户端。但是,Controller 层每个方法体都写一些模板化的 tr...转载 2018-07-06 10:50:26 · 213 阅读 · 0 评论 -
fastjson的一些坑(转)
问题1: 使用Fastjson生成Json字符串少字段属性我使用Fastjson将节点对象Node生成JSON字符串时少个对象属性,麻烦你看一下是怎么回事,是bug吗?我用Gson就没出现问题!这是节点对象文件Node.java[java] view plain copypackage per.eblink.pojo; public class Node { pri...转载 2018-06-15 15:19:03 · 4236 阅读 · 0 评论 -
LinkedBlockingQueue和ConcurrentLinkedQueue适用场景
适用阻塞队列的好处:多线程操作共同的队列时不需要额外的同步,另外就是队列会自动平衡负载,即那边(生产与消费两边)处理快了就会被阻塞掉,从而减少两边的处理速度差距。当许多线程共享访问一个公共 collection 时,ConcurrentLinkedQueue 是一个恰当的选择。LinkedBlockingQueue 多用于任务队列ConcurrentLinkedQueue 多用于消息队列多个生产...转载 2018-06-01 12:03:15 · 6661 阅读 · 0 评论 -
spring boot 多环境配置的方法(转载)
原文路径是:https://blog.csdn.net/guanfl/article/details/72123338springboot maven 多环境配置1.使用Intellij IDEA创建Spring Boot和Maven项目2.Spring Boot项目下application.yaml(yaml支持中文)或者application.properties(properties不支持中...转载 2018-06-14 13:52:24 · 247 阅读 · 0 评论 -
世上最详细的git原理解释(转载)
原文路径是https://www.cnblogs.com/cb0327/p/5066685.html目录1.提交 代码到远程仓库2.将远程仓库代码更新到本地3.更新到本地仓库时, 出现冲突,解决冲突后记: 正文本文背景,在实际项目中使用git已有一年,发现不少同事虽然会使用常用git指令,但并不理解每个指令对应的作用原理。今天静下心总结下git 的基本理解:代码的存在区域;本文以实际项目出发,理清...转载 2018-06-14 13:49:36 · 39358 阅读 · 8 评论 -
Spring Cloud Config 分布式配置中心使用教程
最后那张图很不错一、简介在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是confi...转载 2018-05-29 19:30:00 · 210 阅读 · 0 评论 -
这个spring cloud网络拓扑图不错
公司目前使用的是dubbo方式实现微服务,想试水改造接口层服务为Spring Cloud, 以下是网络拓补图。 第一层负载均衡可以用nginx或者zuul(即有2层zuul), 本图画的是nginx。 Zuul的作用就是路由转发和过滤, 即将请求转发到微服务或拦截请求; Zuul默认集成了负载均衡功能。 下面创建一个zuul工程: 打开Intelli...转载 2018-05-29 11:10:43 · 8011 阅读 · 2 评论 -
基于状态机的订单系统
前言: 本文针对民宿业务下订单系统状态管理提出了一种解决方案:通过有限状态机极大的简化订单状态的迁移处理,同时使订单状态变得可控。此处的状态机指“有限状态机”1 有限状态机的概念有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型 摘自 - 维基百科FSM(有限状态机)可以使用状态图...转载 2018-05-29 10:55:26 · 13068 阅读 · 0 评论 -
电商系统之订单系统
01概述订单系统作为电商系统的“纽带”贯穿了整个电商系统的关键流程。其他模块都是围绕订单系统进行构建的。订单系统的演变也是随着电商平台的业务变化而逐渐演变进化着,接下来就和大家一起来解析电商平台的“生命纽带”。上帝视角订单系统订单系统的作用是:管理订单类型、订单状态,收集关于商品、优惠、用户、收货信息、支付信息等一系列的订单实时数据,进行库存更新、订单下发等一系列动作。订单系统业务的基本模型涉及用...转载 2018-05-29 10:54:18 · 25773 阅读 · 0 评论 -
Zuul通常用法
微服务架构体系中,通常一个业务系统会有很多的微服务,比如:OrderService、ProductService、UserService...,为了让调用更简单,一般会在这些服务前端再封装一层,类似下面这样:前面这一层俗称为“网关层”,其存在意义在于,将"1对N"问题 转换成了"1对1”问题,同时在请求到达真正的微服务之前,可以做一些预处理,比如:来源合法性检测,权限校验,反爬虫之类...传统方式...转载 2018-05-29 10:50:11 · 15735 阅读 · 0 评论 -
spring cloud使用zuul实现反向代理和负载均衡
首先,这篇文章参考的是http://blog.didispace.com/springcloud5/这位大牛的博客。本人是通过这篇博客来学习zuul的,现在写的博客只是个人在学习时个人的一些感受和理解。谈到spring cloud,就要提及到其核心组件:zuul组件,这个组件其实功能很多,比如反向代理,负载均衡还有权限控制等功能,这篇博客主要写的是zuul的反向代理和负载均衡。首先是进行eurek...转载 2018-05-29 10:43:35 · 2668 阅读 · 0 评论 -
电商演进
本文是学习大型分布式网站架构的技术总结。对架构一个高性能、高可用、可伸缩及可扩展的分布式网站进行了概要性描述,并给出一个架构参考。文中一部分为读书笔记,一部分是个人经验总结,对大型分布式网站架构有较好的参考价值。一、大型分布式网站架构技术1、大型网站的特点用户多,分布广泛大流量,高并发海量数据,服务高可用安全环境恶劣,易受网络攻击功能多,变更快,频繁发布从小到大,渐进发展以用户为中心免费服务,付费...转载 2018-05-25 17:24:27 · 532 阅读 · 0 评论 -
分布式事务一致性
有人的地方,就有江湖有江湖的地方,就有纷争问题的起源在电商等业务中,系统一般由多个独立的服务组成,如何解决分布式调用时候数据的一致性? 具体业务场景如下,比如一个业务操作,如果同时调用服务 A、B、C,需要满足要么同时成功;要么同时失败。A、B、C 可能是多个不同部门开发、部署在不同服务器上的远程服务。在分布式系统来说,如果不想牺牲一致性,CAP 理论告诉我们只能放弃可用性,这显然不能接受。为了便...转载 2018-05-25 17:18:45 · 3721 阅读 · 0 评论 -
面试5
1.关键字transient1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被t...转载 2018-03-16 22:18:34 · 173 阅读 · 0 评论 -
面试4
1,java堆,分新生代老年代,新生代有Eden,from surviver,to surviver三个空间,堆被所有线程共。eden内存不足时,发生一次minor GC,会把from survivor和eden的对象复制到to survivor,这次的to survivor就变成了下次的from survivor,经过多次minor GC,默认15次,达到次数的对象会从survivor进行老年代...转载 2018-03-16 22:17:19 · 106 阅读 · 0 评论 -
缓存使用的一些注意事项
最近在项目中使用了很多缓存技术,包括局部缓存,远程集中式缓存,分布式缓存,在缓存的使用中也发现一些问题,整体总结如下:1 使用局部缓存要注意内存溢出一般局部缓存使用Map来实现,很容易无限制的往Map中填入数据,导致内存溢出。最好的方法就是使用SoftReference引用对象,而不是强引用对象2 在分布式环境下使用局部缓存,如果缓存是同一类数据,比如同一张表的数据库配置,则需要考虑一个同步措施,...转载 2018-03-16 22:38:16 · 563 阅读 · 0 评论 -
ThreaLocal内存泄露的问题
在最近一个项目中,在项目发布之后,发现系统中有内存泄漏问题。表象是堆内存随着系统的运行时间缓慢增长,一直没有办法通过gc来回收,最终于导致堆内存耗尽,内存溢出。开始是怀疑ThreadLocal的问题,因为在项目中,大量使用了线程的ThreadLocal保存线程上下文信息,在正常情况下,在线程开始的时候设置线程变量,在线程结束的时候,需要清除线程上下文信息,如果线程变量没有清除,会导致线程中保存的对...转载 2018-03-16 22:38:33 · 117 阅读 · 0 评论 -
跨行清算系统的实现原理
最近看了很多银联方面的清算系统的设计原理,对于跨行清算系统有了很大的了解,写这篇文章的目的是在于从一个程序员的角度去思考一个跨行清算系统的架构是如何实现的以及整个过程中我们有哪些思想是可以借鉴的。由于金融里面涉及到太多的专业名词,包括借贷,备付金,头寸,调拨等等,这里不会涉及到这些,取而代之的是以大家可以理解的概念去解释。下面简单的介绍一下两种跨行清算系统的实现原理以及特点。一种跨清算系统是我们最...转载 2018-03-16 22:39:22 · 2232 阅读 · 0 评论 -
我对卷积的理解
在学习机器学习和图像处理的过程中,经常会遇到卷积这个概念。我每次遇到这个概念都有点似懂非懂的样子。有时候清楚它的直观解释,但又搞不清公式中是如何体现的。究其原因,还是我没有完全搞懂这个概念。 维基百科上有一个动态图来演示这个概念,但对于我来说还是有些复杂。于是自己在网上找了很多文章来研究,终于有了比较直观的印象,这里就趁热把我理解的解释一下,作为总结。一、一维卷积1.1 数学定义维基百科上,卷积的...转载 2018-03-16 22:39:46 · 551 阅读 · 0 评论 -
如果看了此文你还不懂傅里叶变换,那就过来掐死我吧【完整版】
我保证这篇文章和你以前看过的所有文章都不同,这是 2012 年还在果壳的时候写的,但是当时没有来得及写完就出国了……于是拖了两年,嗯,我是拖延症患者……这篇文章的核心思想就是:要让读者在不看任何数学公式的情况下理解傅里叶分析。傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复杂了,所以很多大一新生上来就懵圈并从此对它深恶痛绝。老实...转载 2018-03-16 22:40:11 · 122 阅读 · 0 评论 -
Java实现HTML页面转PDF解决方案
最近在工作中遇到了一个很囧的事情。要把HTML页面转换成PDF或者tiff图片等其他形式,目前tiff还是一头雾水,如果各位大师有真的可行的想法(不要是别人那边抄的,百度最近搜索的质量严重的打击了我对国货的信心。)希望能够告诉我,先谢了。言归正传。所以,我就做了把HTML转换成PDF的形式。目前可以完美支持一比一转换,下面就把我的解决方案贴出来。首先,当然是找到能够解析PDF的完美组件,百度和谷歌...转载 2018-03-15 15:08:50 · 933 阅读 · 0 评论 -
UML类图与类的关系详解
在画类图的时候,理清类和类之间的关系是重点。类的关系有泛化(Generalization)、实现(Realization)、依赖(Dependency)和关联(Association)。其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition)。下面我们结合实例理解这些关系。基本概念类图(Class Diagram): 类图是面向对象系统建模中最常用和最重要...转载 2018-03-15 15:07:06 · 208 阅读 · 0 评论 -
Redis:存储对象的两种方式(序列化和json字符串)
方式一:序列化操作public class SerializeUtil { /* * 序列化 * */ public static byte[] serizlize(Object object){ ObjectOutputStream oos = null; ByteArrayOutputStream baos = null; ...转载 2018-03-15 15:06:20 · 59955 阅读 · 4 评论