- 博客(34)
- 收藏
- 关注
原创 软件架构设计的五大原则简析
软件架构设计的六大原则简析在软件以及系统的设计中,有人简单的认为,我编程很厉害,所以架构设计我没问题,但实际操作的过程中,常常会一团乱麻,而实际的架构设计工作中还是遵循六大原则,有时候也会有原则会相互冲突。下面简单的说说六大设计原则,以及延升的原则,如果面试问道,先说六大原则,如果还想扩展,那就自己实际开发过程理解。1. 单一职责原则(Single Responsibility Principle - SRP)原文:There should never be more than one re
2021-02-03 14:30:17
1242
原创 数据库设计遵循条例
常用数据库设计适用场景:并发量大、数据量大的互联网业务规范:介绍内容解读:讲解原因,解读比军规更重要一、基础规范(1)必须使用InnoDB存储引擎解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高(2)必须使用UTF8字符集解读:万国码,无需转码,无乱码风险,节省空间(3)数据表、数据字段必须加入中文注释解读:N...
2019-12-31 15:54:10
245
原创 分布式主键
一、需求缘起几乎所有的业务系统,都有生成一个记录标识的需求,常见数据记录唯一标识这个记录标识往往就是数据库中的唯一主键,数据库上会建立聚集索引(cluster index),即在物理存储上以这个字段排序。这个记录标识上的查询,往往又有分页或者排序的业务需求,例如:(1)拉取最新的一页消息:selectmessage-id/ order by time/ limit 100(2...
2019-12-31 15:26:26
2344
原创 秒杀场景 高并发
一、秒杀业务理解1、im系统,每个人都读自己的数据,例如微信;2、微博系统,每个人读你关注的人的数据,一个人读多个人的数据;3、秒杀系统,库存只有一份,所有人会在集中的时间读和写这些数据,多个人读一个数据。例如:双11,小米抢购最常吐槽的,12306抢票,票是有限的,库存一份,瞬时流量非常多,都读相同的库存。读写冲突,锁非常严重,这个高并发或者秒杀最难的地方。二、常用解决办法...
2019-12-31 15:16:29
480
1
原创 Mysql数据类型TINYINT(1)与BOOLEAN区别
熟悉Mysql的同学应该都知道,Mysql查询的boolean结果将输出为0或者1. 比如:select 1=1; 其输出结果为1。目标表有一字段设置类型为:tinyint(1)。 源表同步消息中接收到相同类型的数据 也就是说,获取字段类型时,字段tinyint(1)的类型被当做boolean类型进行了返回。导致java中Integer类型无法进行强转。 解决方...
2019-08-01 10:42:54
3281
原创 MSBUILD : error MSB4132: 无法识别工具版本“2.0”。可用的工具版本为 "4.0"
0.问题描述 Windows 10 最近使用npm install安装项目依赖包,当自动执行至node-gyp rebuild时报错:C:\Users\dsl\Desktop\Pros\ant-design-pro-master-v3.1.0>npm install > weak@1.0.1 install C:\Users\dsl\Desktop\Pros\ant-d...
2019-03-06 10:01:45
33171
3
原创 mysql 表锁和行锁
mysql锁机制分为表级锁和行级锁,本文就和大家分享一下我对mysql中行级锁中的共享锁与排他锁进行分享交流。共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。排他锁又称为写锁,简称X锁,顾名思义,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获...
2019-01-16 16:36:12
152
原创 MySQL 事务隔离级别
=========================================================================================== 隔离级别 脏读(Dirty Read) 不可重复读(NonRepeatable Read) 幻读(Phantom Read) ==========...
2019-01-16 16:30:08
117
原创 Java tree二叉树的数据结构
node 节点public class Node{ private Node left; private Node right; private int data; public Node(int data){ this.data = data; } public void setLChild(Node left){ ...
2019-01-16 16:15:39
217
原创 父类,子类 ,构造方法的执行顺序
类(对象)中没有构造器时,是默认会自动创建一个无参构造器的; 当类(对象)中只有有参构造器时,就不会再自动创建一个无参构造器了; 当子类的构造器中没有实现super,默认在调用子类构造方法之间先调用父类的无参构造方法。 子类构造器会默认调用super()(无论构造器中是否写有super()),用于初始化父类成员,同时当父类中存在有参构造器时,必须提供无参构造器,子类构造器中并不会自动...
2019-01-16 16:07:49
3808
原创 单例设计模式
1.单例模式(Singleton Pattern)定义:Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)通用代码:(是线程安全的)public class Singleton { private stati...
2018-05-14 21:03:02
96
原创 redis命令
一、概述: 在该系列的前几篇博客中,主要讲述的是与Redis数据类型相关的命令,如String、List、Set、Hashes和Sorted-Set。这些命令都具有一个共同点,即所有的操作都是针对与Key关联的Value的。而该篇博客将主要讲述与Key相关的Redis命令。学习这些命令对于学习Redis是非常重要的基础,也是能够充分挖掘Redis潜力的利器。 在该篇
2017-11-21 19:19:43
280
转载 redis学习教程基本命令
转载:https://www.cnblogs.com/woshimrf/p/5198361.html目录全局操作:1.redis是key-value存储的,放在内存中,并在磁盘持久化的数据结构存储系统2.redis提供原子自增操作incr,用来防止多线程并发出现数据错误。3.删除操作:del.若数据不存在返回(nil)4.redis可以定时存储,即设置几秒后
2017-11-21 19:16:32
206
原创 git--tortoise 解决冲突
场景一 user0 有新提交user1 没有pull -> 写新代码 -> pull -> 提示有冲突 解决办法一-> stash save(把自己的代码隐藏存起来) -> 重新pull -> stash pop(把存起来的隐藏的代码取回来 ) -> 代码文件会显示冲突 -> 右键选择edit conficts,解决后点击编辑页面的 mark as reso
2017-10-25 12:16:14
4930
原创 git原理简介
Git 究竟是怎样的一个系统呢?请注意,接下来的内容非常重要,若是理解了 Git 的思想和基本工作原理,用起来就会知其所以然,游刃有余。在开始学习 Git 的时候,请不要尝试把各种概念和其他版本控制系统(诸如 Subversion 和 Perforce 等)相比拟,否则容易混淆每个操作的实际意义。Git 在保存和处理各种信息的时候,虽然操作起来的命令形式非常相近,但它与其他版本控制系统的做
2017-09-11 10:13:32
431
转载 简单介绍Hadoop集群和网络
本文将着重于讨论Hadoop集群的体系结构和方法,及它如何与网络和服务器基础设施的关系。最开始我们先学习一下Hadoop集群运作的基础原理。作者:Brad Hedlund来源:csdn|2012-11-08 14:47 移动端 收藏 分享云计算和Hadoop中网络是讨论得相对比较少的领域。本文原文由Dell企业技术专家Brad Hedl
2017-08-31 19:07:57
333
原创 linux下用tomcat部署java web
一.安装JDK到http://www.oracle.com/technetwork/java/javase/downloads/index.html下载Java SE 6 Update 27根据操作系统选择Linux x64 - RPM Installer或Linux x86 - RPM Installer下载jdk-6u27-linux-x64-rpm.bin后放在/home目录
2017-08-31 19:04:02
257
原创 StringBuffer 与 StringBuilder
区别1、StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,2、只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。 3、在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程
2017-08-31 18:59:46
1359
原创 ELK简单搭建
ELK 日志分析系统大纲:一、简介二、Logstash三、Redis四、Elasticsearch五、Kinaba一、简介1、核心组成ELK由Elasticsearch、Logstash和Kibana三部分组件组成;Elasticsearch是个开源分布式搜索引擎,它的特
2017-08-31 18:56:00
348
原创 ArrayList的实现原理
一、 ArrayList概述: ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。 ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurr
2017-07-24 17:02:03
270
原创 spring配置多个mysql数据库
第一步:创建一个DynamicDataSource的类,继承AbstractRoutingDataSource并重写determineCurrentLookupKey方法,代码如下:1 public class DynamicDataSource extends AbstractRoutingDataSource {2 3 @Override4 protected
2017-07-19 14:28:50
656
原创 maven的java项目中log4j的使用
其实在maven的java项目中log4j的使用非常简单首先,配置log4j.xml文件xml version="1.0" encoding="UTF-8" ?>xmlns:log4j="http://jakarta.apache.org/log4j/"> name="console" class="org.apache.log4j.ConsoleAppender">
2017-07-10 18:26:52
3235
原创 mysql的大量的sleep进程解决办法
公司有一台Linux服务器专门用来跑公司的WEB服务,由于历史原因,站点数与页面非常多,导致经常出现大量的sleep进程;MySQL服务器所支持的最大连接数是有上限的,因为每个连接的建立都会消耗内存,因此我们希望客户端在连接到MySQL Server处理完相应的操作后,应该断开连接并释放占用的内存。如果你的MySQL Server有大量的闲置连接,他们不仅会白白消耗内存,而且如果连接一直在累加而不
2017-07-10 16:57:30
18427
原创 SEO和HTML的标签
本文就为广大的seo人员介绍SEO必须懂的HTML代码标签。总体来说,SEO人员大部分情况下并不需要直接参与网站程序的编写,所以,我们只需要能看懂一部分html代码,并且在工具的辅助下,能够增、改、删这9个标签就可以了。一:为什么SEO人员必须懂一些HTML代码?SEO人员到底要不要懂HTML之争,一直都很热门,说必须懂的人和说不必懂的人在数量上差不多,而且懂HTML代码和不懂HT
2017-06-22 15:30:36
354
转载 Spring AOP的简单介绍
一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnblogs.com/xrq730/p/4919025.htmlAOPAOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object
2017-06-21 11:12:00
210
原创 getRequestDispatcher(path).forward(),,执行完,后面的代码还会执行
尽管HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很大的区别。下面是HttpServletResponse.sendRedirect方法实现的请求重定向与RequestDispatcher.forward方法实现的请求转发的总结比较:(1)Re
2017-06-15 13:41:38
4512
2
原创 Nginx+tomcat配置集群负载均衡
相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额。那究竟它有什么作用呢?可能很多人未必了解。 说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了。摘一段百度百科上的描述:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回
2017-06-13 15:56:31
211
原创 Nginx配置文件nginx.conf详解
Nginx配置文件nginx.conf中文详解Nginx配置参数中文说明。#定义Nginx运行的用户和用户组user www www;#nginx进程数,建议设置为等于CPU总核心数。worker_processes 8;#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
2017-06-12 14:48:15
232
原创 对象转化为json串的出现循环引用$ref $.s1解决办法
现在对于java开发来说json串是常用的工具,但是也会时常遇到循环的问题,所转化的json串并不是我们想要的,尤其是多个对象相互引用的时候:例如String jsonString = JSON.toJSONString(map);就会出现$ref $.s1的字符串,这说明对象map中的对象有相互应用的情况,为了避免循环所以用此符号代替引用的值,为了避免循环加载一个避免序列化的对象如下:
2017-06-08 10:42:42
636
原创 mysql分页查询语句
分页需求:前端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,MySql数据库提供了分页的函数limit m,n,其中m的参数是从第几条记录开始,n是每页的记录数例如10条:需求就是查询第一页的数据:select * from table limit (1-1)*10,10;需求就是查询第二页的
2017-06-07 14:31:56
1943
原创 java对配置文件.properties文件读取的几种方法
一.通过jdk提供的java.util.Properties类 此类继承自java.util.HashTable,即实现了Map接口,所以,可使用相应的方法来操作属性文件,但不建议使用像put、putAll这 两个方法,因为put方法不仅允许存入String类型的value,还可以存入Object类型的。因此java.util.Properties类提 供了getProper
2017-06-06 13:00:19
338
原创 Nexus OSS 系统搭建
下载Nexus OSS. 从sonatype下载.本次我们下载的是zip包. 注意一点,如果想搭建maven的本地库需要2.X版本,而不是3.X版本设置JDK。Nexus Repository Manager requires a Java 8 Runtime Environment (JRE) from Oracle.如果有多个jdk或者jre的时候,
2017-05-23 11:18:08
1752
原创 Linux 下 tomcat部署图片服务器
在项目中大多数用到图片服务器,有多种方法可以实现此功能,下面介绍在Liunx下tomcat的图片服务器的搭建1、首先将tomcat服务器copy到相应的目录下2、修改tomcat的配置目录下的server.xmlvim server.xml增加service标签 protocol="HTTP/1.1" connec
2017-05-02 17:25:53
3337
3
转载 最大的Redis集群:新浪Redis集群揭秘
http://www.cnblogs.com/happyday56/p/3955634.html前言Tape is Dead,Disk is Tape,Flash is Disk,RAM Locality is King. — Jim GrayRedis不是比较成熟的Memcache或者Mysql的替代品,是对于大型互联网类应用在架构上很好的补充。现
2017-04-21 13:41:21
380
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人