- 博客(29)
- 问答 (1)
- 收藏
- 关注
转载 Java并发编程:同步容器
一.为什么会出现同步容器? 在Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map。 List、Set、Queue接口分别继承了Collection接口,Map本身是一个接口。 注意Collection和Map是一个顶层接口,而List、Set、Queue则继承了Collection接口,分别代表数组、集合和队列这三大类容器。 像ArrayList...
2019-05-27 11:37:48
175
转载 Java并发编程:ThreadLocal
一.对ThreadLocal的理解 ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多。可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。 这句话从字面上看起来很容易理解,但是真正理解并不是那么容易。 我们还是先来看一个例子:classConnectionManag...
2019-05-27 09:46:34
209
转载 Java并发编程:volatile
一.内存模型的相关概念 大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。...
2019-05-26 18:50:29
180
转载 Java并发编程:Lock
一.synchronized的缺陷 synchronized是java中的一个关键字,也就是说是Java语言内置的特性。那么为什么会出现Lock呢? 在上面一篇文章中,我们了解到如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里获取锁的线程释放锁只会有两种情况: 1)获取锁的线程执行完...
2019-05-25 16:41:59
160
转载 Java并发编程:synchronized
一.什么时候会出现线程安全问题? 在单线程中不会出现线程安全问题,而在多线程编程中,有可能会出现同时访问同一个资源的情况,这种资源可以是各种类型的的资源:一个变量、一个对象、一个文件、一个数据库表等,而当多个线程同时访问同一个资源的时候,就会存在一个问题: 由于每个线程执行的过程是不可控的,所以很可能导致最终的结果与实际上的愿望相违背或者直接导致程序出错。 举个简单的例子: ...
2019-05-25 15:41:52
141
转载 Java并发编程:Thread类的使用
一.线程的状态 在正式学习Thread类中的具体方法之前,我们先来了解一下线程有哪些状态,这个将会有助于后面对Thread类中的方法的理解。 线程从创建到最终的消亡,要经历若干个状态。一般来说,线程包括以下这几个状态:创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、time waiting、waiting、消亡(dead)。 当需要新起一...
2019-05-25 15:03:03
244
转载 Java并发编程:如何创建线程
一.Java中关于应用程序和进程相关的概念 在Java中,一个应用程序对应着一个JVM实例(也有地方称为JVM进程),一般来说名字默认为java.exe或者javaw.exe(windows下可以通过任务管理器查看)。Java采用的是单线程编程模型,即在我们自己的程序中如果没有主动创建线程的话,只会创建一个线程,通常称为主线程。但是要注意,虽然只有一个线程来执行任务,不代表JVM中只有一个线...
2019-05-25 14:55:19
169
转载 爱油科技基于SpringCloud的微服务实践
摘要本次分享主要介绍了爱油科技基于Docker和Spring Cloud将整体业务微服务化的一些实践经验,主要包括:微服务架构的分层和框架选型 服务发现和配置管理 服务集成和服务质量保证 基于领域驱动设计 实施DevOps从单体应用到微服务单体应用优点小而美,结构简单易于开发实现 部署门槛低,单个Jar包或者网站打包即可部署 可快速实现多实例部署缺点随着业务...
2019-05-25 14:45:03
241
转载 Java并发编程:进程和线程的由来
一.操作系统中为什么会出现进程? 说起进程的由来,我们需要从操作系统的发展历史谈起。 也许在今天,我们无法想象在很多年以前计算机是什么样子。我们现在可以用计算机来做很多事情:办公、娱乐、上网,但是在计算机刚出现的时候,是为了解决数学计算的问题,因为很多大量的计算通过人力去完成是很耗时间和人力成本的。在最初的时候,计算机只能接受一些特定的指令,用户输入一个指令,计算机就做一个操作。当用户...
2019-05-25 14:43:20
150
转载 Java 5,6,7,8,9,10,11新特性总结
java5 泛型 (Generics) List<Integer> list=new ArrayList<Integer>(); 增强循环(Enhanced for Loop) int[] array = {1, 2, 3, 4, 5}; for (int i : array) { System.out.println(i); ...
2019-05-23 09:20:46
147
转载 Spring Cloud-微服务架构集大成者
本文不是讲解如何使用Spring Cloud的教程,而是探讨Spring Cloud是什么,以及它诞生的背景和意义。1 背景2008年以后,国内互联网行业飞速发展,我们对软件系统的需求已经不再是过去”能用就行”这种很low的档次了,像抢红包、双十一这样的活动不断逼迫我们去突破软件系统的性能上限,传统的IT企业”能用就行”的开发思想已经不能满足互联网高并发、大流量的性能要求。系统架构走向分布...
2019-05-21 11:20:18
213
转载 HTTP与HTTPS的区别
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。 为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安...
2019-05-20 16:25:21
166
转载 设计抗住千万级流量的架构思路
随着互联网的发展,各项软件的客户量日益增多,当客户量达到一定峰值时,当数以万计的流量来临时,程序的顺利运行以及即时响应则显得尤为重要,就像双11那天的淘宝一样。那么,如何设计架构才能够抗住这千万级的流量。首先,要在我们架构设计的时候建立一些原则。 1.实现高并发 服务拆分:将整个项目拆分成多个子项目或者模块,分而治之,将项目进行水平扩展。 服务化:解决服务调用复杂之后的服...
2019-05-17 17:01:04
220
转载 高可用高并发的9种技术架构
分层架构是逻辑上的,在物理部署上,三层架构可以部署在同一个物理机器上,但是随着网站业务的发展,必然需要对已经分层的模块分离部署,即三层结构分别部署在不同的服务器上,是网站拥有更多的计算资源以应对越来越多的用户访问。1、分层分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对简单并比较单一的职责,然后通过上层对下层的依赖和调度组成一个完整的...
2019-05-17 16:57:02
224
转载 秒杀系统架构分析与实战
1 秒杀业务分析#正常电子商务流程(1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货;秒杀业务的特性(1)低廉价格;(2)大幅推广;(3)瞬时售空;(4)一般是定时上架;(5)时间短、瞬时并发量高;2 秒杀技术挑战#假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀...
2019-05-17 16:55:19
242
转载 数据库设计是否要使用外键
对于主/外键/索引来说,在一些开发团队中被认为是处理数据库关系的利器,也被某些开发团队认为是处理某些具体业务的魔鬼。大家共同观点:主键和索引是不可少的,不仅可以优化数据检索速度,开发人员还省不其它的工作,矛盾焦点:数据库设计是否需要外键。这里有两个问题:一个是如何保证数据库数据的完整性和一致性;二是第一条对性能的影响2009-11-11 13:07 changShaHacker...
2019-05-17 09:30:38
505
转载 数据库垂直和水平的分库分表
一、数据库瓶颈不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃)。1、IO瓶颈第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度 ->分库和垂直分表。第二种...
2019-05-14 17:12:47
171
转载 HashMap原理
HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入...
2019-05-13 20:01:52
130
转载 Docker -- Linux UnionFS
UnionFSUnionFS是一种为Linux,FreeBSD和NetBSD操作系统设计的把其他文件系统联合到一个联合挂载点的文件系统服务。它使用branch把不同文件系统的文件和目录“透明地”覆盖,形成一个单一一致的文件系统。这些branches或者是read-only或者是read-write的,所以当对这个虚拟后的联合文件系统进行写操作的时候,系统是真正写到了一个新的文件中。看起来这个虚...
2019-05-13 19:50:34
154
转载 bash命令
1. Basic Operationsa.export显示所有的环境变量,如果你想获取某个变量的详细信息,使用echo $VARIABLE_NAME.exportExample:$ exportSHELL=/bin/zshAWS_HOME=/Users/adnanadnan/.awsLANG=en_US.UTF-8LC_CTYPE=en_US.UTF-8LES...
2019-05-13 19:40:37
1031
转载 在IDEA中使用DEBUG
Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方框架的源码。 所以学习下如何在Intellij IDEA中使用好Debug,主要包括如下内容: 一、Debug开篇 二、基本用法&快捷键 三、变量查看 ...
2019-05-13 19:28:02
186
转载 Spring IOC 实现原理
1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。图1:软件系统中耦合的对象如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。图1中描述的就是这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起,协...
2019-05-13 19:21:45
146
转载 Spring AOP 实现原理与 CGLIB 应用
AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等。AOP 实现的关键就在于 AOP 框架自动创建的 AOP 代理,AOP 代理则可分为静态代理和动态代理两大类,其中静态代理是指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强...
2019-05-13 18:45:35
149
原创 Gitlab服务的启动、停止和重启命令
启动:sudo gitlab-ctl start停止:sudo gitlab-ctl stop重启:sudo gitlab-ctl restart
2019-05-13 11:21:01
15178
转载 Ubuntu18使用UFW设置防火墙
正确配置的防火墙是整个系统安全性最重要的方面之一。 默认情况下,Ubuntu附带一个名为UFW(简单防火墙)的防火墙配置工具。UFW是管理iptables防火墙规则的一个用户友好的前端,它的主要目标是使管理iptables更容易,或者如其名所说,简单。先决条件在开始本教程之前,请确保您使用具有sudo权限的用户帐户或root用户登录到您的服务器。 最佳做法是将管理命令作为sudo用户而...
2019-05-13 11:15:33
1963
转载 Ubuntu18安装Ngnix
安装NginxNginx的软件包在Ubuntu默认软件仓库中可用。 安装非常简单,只需键入以下命令:sudo apt updatesudo apt install nginx安装完成后,请检查Nginx服务的状态和版本:linuxidc@linuxidc:~$sudo systemctl status nginx[sudo] linuxidc 的密码:输出:● ngi...
2019-05-13 11:01:21
300
转载 Ubuntu18搭建GitLab仓库服务器
首先安装必须的一些服务sudo apt-get updatesudo apt-get install -y curl openssh-server ca-certificatessudo apt-get install -y postfix使用左右键和回车键选择确定、取消,弹出列表选项的时候,选择 Internet Site接着信任 GitLab 的 GPG 公钥:c...
2019-05-11 15:15:14
513
转载 Ubuntu18搭建Docker Registry服务
下载镜像首先我们将该仓库pull下来:wxs@ubuntu:~$ docker pull registry配置配置文件默认情况下的registry不支持删除镜像,我们需要自己写配置文件,在容器启动时候映射进去,在/data目录下编写config.yml文件:注意:该文件必须使用空格分隔,不能使用tab符。version: 0.1log: fields: servic...
2019-05-11 15:07:23
397
转载 Ubuntu18安装docker-ce
1.先更新系统并安装相关依赖包$ sudo apt update$ sudo apt install apt-transport-https ca-certificates curl software-properties-common2.新建并编辑etc/apt/sources.list.d/docker.list文件$ sudo vi /etc/apt/sources....
2019-05-11 15:01:29
233
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人