Java
向着架构之路前进的小强
路漫漫其修远兮,吾将架构而求索。
展开
-
分布式事务解决方案
分布式事务解决方案1. XA(两阶段提交)两阶段提交,顾名思义就是要分两步提交。存在一个负责协调各个本地资源管理器的事务管理器,本地资源管理器一般是由数据库实现,事务管理器在第一阶段的时候询问各个资源管理器是否都就绪?如果收到每个资源的回复都是 yes,则在第二阶段提交事务,如果其中任意一个资源的回复是 no, 则回滚事务。存在问题同步阻塞:当参与事务者存在占用公共资源的情况,其中一个占用了资源,其他事务参与者就只能阻塞等待资源释放,处于阻塞状态。单点故障:一旦事务管理器出现故障,整个系统原创 2020-05-25 19:16:22 · 275 阅读 · 0 评论 -
CAP、BASE理论
CAP 原则CAP是指在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)分区容错性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生原创 2020-05-21 19:19:21 · 278 阅读 · 0 评论 -
重写 equals 与 hashCode
@Getter@Setterpublic class Person { private String idCard; private String name; @Override public boolean equals(Object other) { // 同一对象 if (this == other) { return true; } // 不同类型 if.原创 2020-05-20 20:18:05 · 134 阅读 · 0 评论 -
Semaphore 简单应用
@Slf4jpublic class SemaphoreTest { private static ExecutorService executorService = Executors.newFixedThreadPool(5); public static void main(String[] args) { // 5个信号量 Semaphore semaphore = new Semaphore(5); Random random .原创 2020-05-19 19:24:48 · 145 阅读 · 0 评论 -
100个运动员,5个5个跑
public class Test { private static Executor executor = Executors.newCachedThreadPool(); public static void main(String[] args) throws InterruptedException { int[] array = new int[100]; for (int i = 0; i < 100; i++) { .原创 2020-05-18 21:05:24 · 224 阅读 · 0 评论 -
CAS
// AtomicIntegerpublic final int getAndAdd(int delta) { return unsafe.getAndAddInt(this, valueOffset, delta);}// var1: AtomicInteger, var2: valueOffset, var4: deltapublic final int getAndAdd...原创 2020-05-04 20:47:26 · 158 阅读 · 0 评论 -
多线程问题
竞态条件当多个线程访问同一资源时,如果对资源的访问顺序敏感,则称存在竞态条件。导致竞态条件发生的代码区称做临界区。例:count++;先检测后执行对于main线程,如果文件a不存在,则创建文件a,但是在判断文件a不存在之后,Task线程创建了文件a,这时候先前的判断结果已经失效,(main线程的执行依赖了一个错误的判断结果)此时文件a已经存在了,但是main线程还是会继续创建文...原创 2020-05-04 20:44:01 · 225 阅读 · 0 评论 -
Executor 框架
阿里巴巴手册线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。 说明:Executors各个方法的弊端:1)newFixedThreadPool和newSingleThreadExecutor: 主要问题是堆积的请求处理队列可能会耗费非常大的内存,甚至OOM。2)ne...原创 2020-05-03 14:44:07 · 179 阅读 · 0 评论 -
URL中文
JSencodeURI(s)decodeURI(s)JavaURLEncoder.encode(s, "UTF-8")URLDecoder.decode(s, "UTF-8")原创 2016-07-05 10:49:56 · 351 阅读 · 0 评论 -
HTTP请求工具类
/** * HTTP请求工具类 */public class HttpClient { private final static Logger LOGGER = Logger.getLogger(MyHttpRequest.class); /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @转载 2016-07-04 15:57:53 · 571 阅读 · 0 评论 -
JsonObject Integer 0
JsonObject Integer 0转载 2016-06-16 13:54:41 · 812 阅读 · 0 评论 -
Action(controller) service DAO
一般后台代码也分三层 action(controller) service DAO (这里的三层不是MVC)比如 我得到用户名 但是在存入数据库的时候 用户名字段应该是前台的用户名加上当前日期拼成的字符串action或者controller层是第一层 一般是用来及接受数据并且做数据的非空啊 格式是否正确的验证 如用户名是否为空 是不是安全字符串之类的service层一般是用来做一转载 2016-06-12 11:40:30 · 464 阅读 · 0 评论 -
Java中重定向与请求转发的区别
比喻:请求转发:A向B发送请求,想让B帮忙完成一项工作,当B接收到请求后发现自己完成不了,于是B请C帮忙,C接收到B的请求后最终完成了该项工作,并把最后的结果返回给A。此过程A只发送了一次请求给B,A只知道把请求发给B,至于B是怎么完成的A并不关心,他只等待最终的结果。重定向:A向B发送请求,想让B帮忙完成一项工作,当B接收到请求后发现自己无法完成,就立即告诉A情况,并向A推荐C可以完成该转载 2016-06-27 09:16:45 · 472 阅读 · 0 评论 -
java http 请求
private final static Logger LOG = Logger.getLogger(MyHttpRequest.class);static WapHttpClient sWapHttpClient = null;/*** 向指定URL发送GET方法的请求* * @param url* 发送请求的URL* @para转载 2016-06-08 09:54:54 · 529 阅读 · 0 评论 -
HTTP消息中header头部信息的讲解
本文导读:HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。 HTTP Request的Header信息 1、HTTP请求方式如下表:转载 2016-06-07 19:20:15 · 339 阅读 · 0 评论 -
Java资源文件读取
分成普通Java类和servlet类 两种情况考虑读取资源文件要点说明: 1:在javaweb项目中所有src下的资源在部署后都会被弄到WEB-INF/classes/下 2:this.getServletContext().getRealPath("/");来的得到当前web应用在硬盘上的绝对路径 3:FileInputStream in = n转载 2016-04-27 20:13:20 · 835 阅读 · 0 评论 -
spring mvc json
spring MVC 3.0 返回JSON数据的几种方法:1. 直接 PrintWriter 输出2. 使用 JSP 视图3. 使用Spring内置的支持// Spring MVC 配置[html] view plain copybean class="org.springframework.web.servlet.mvc.annot转载 2016-05-11 10:03:41 · 567 阅读 · 0 评论 -
DateUtil
/** * 日期格式 */public enum DateStyle {/*** MM-dd*/MM_DD("MM-dd"),/*** yyyy-MM*/YYYY_MM("yyyy-MM"),/*** yyyy-MM-dd*/YYYY_MM_DD("yyyy-MM-dd"),/*** MM-dd HH:mm*/MM_DD_转载 2016-05-11 19:39:24 · 266 阅读 · 0 评论 -
DOS
[]方括号:可选参数<>小括号:可选参数下的子参数{}比较少见,应该是理解为可以一个又一个执行的同样参数不同条件的参数集合。*星号是通配符中的一个,代表任意全部。其他的通配符是 ?问号:代表一个任意字符。转载 2016-05-03 19:38:31 · 237 阅读 · 0 评论 -
Intellij 快捷键修改
1. 代码提示2. JavaDoc原创 2016-05-28 19:43:20 · 313 阅读 · 0 评论 -
Intellij 背景色 显示行数
1. 背景色 RGB 204 232 2072. 行数 line numbers原创 2016-05-28 20:40:38 · 567 阅读 · 0 评论 -
Intellij 快速解决
原创 2016-05-29 09:23:07 · 270 阅读 · 0 评论 -
heap(堆) stack(栈)
1.heap是堆,stack是栈。2.stack的空间由操作系统自动分配和释放,heap的空间是手动申请和释放的,heap常用new关键字来分配。3.stack空间有限,heap的空间是很大的自由区。在Java中,若只是声明一个对象,则先在栈内存中为其分配地址空间,若再new一下,实例化它,则在堆内存中为其分配地址。4.举例:数据类型 变量名;这样定义的东西在栈区。如:Object a =null转载 2016-05-06 19:19:28 · 527 阅读 · 0 评论 -
Intellij 常用设置
http://www.phperz.com/article/15/0923/159043.html?spm=5176.100239.blogcont.2.LOphcR转载 2016-05-31 16:19:08 · 356 阅读 · 0 评论 -
Node
import java.text.Collator;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;import java.util.Locale;import net.sf.json.JSONObjec原创 2016-05-18 19:30:54 · 322 阅读 · 0 评论 -
XML 默认命名空间
默认的命名空间(Default Namespaces)为元素定义默认的命名空间可以让我们省去在所有的子元素中使用前缀的工作。请使用下面的语法:xmlns="namespaceURI"这个 XML 文档携带着某个表格中的信息:xmlns="http://www.w3.org/TR/html4/"> Apples Bananas 此转载 2016-06-01 09:50:26 · 2655 阅读 · 0 评论 -
velocity map list 遍历
List: #foreach($member in $members) $member.email - $member.firstname $member.lastname #end Map: #foreach($member in $membersMap.entrySet()) $me转载 2016-05-19 13:34:54 · 388 阅读 · 0 评论 -
applicationContext.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.s转载 2016-04-20 19:47:25 · 249 阅读 · 0 评论