- 博客(30)
- 收藏
- 关注
原创 2021-07-28
package com.station;import java.util.concurrent.atomic.AtomicInteger;public class Bus { private int busId; private int stationId; public Bus(int busId, int stationId) { this.busId = busId; this.stationId = stationId; }
2021-07-28 10:54:10
119
原创 mongo 常用语法
// mysql: select * from users;db.appResource.find()// mysql: select name, skills from users;db.appResource.find({},{"appType":1})// mysql: select name, age, skills from users where name = 'hurry';db.appResource.find({"appType":"ncp"},{"appType":1})
2020-07-17 10:28:05
513
原创 Java中的锁
悲观锁与乐观锁悲观锁:认为数据很容易被其他线程修改 ,在对数据处理前先对数据进行加锁,在整个数据处理过程中数据处于锁定状态。乐观锁:乐观锁是相对于悲观锁来说的,它认为数据一般不会造成冲突,只在数据更新时,才对数据冲突与否做检测。公平锁与非公平锁(先来后到锁)公平锁:ReentrantLock pairLock = new ReentrantLock(true);非公平锁:ReentrantLock pairLock = new ReentrantLock(false);构造器不传参,则默.
2020-07-09 17:50:35
158
原创 Java中的CAS操作
在Java中,锁在并发处理上占据一席之地,但是使用锁有一个很不好的地方,当一个线程未获取到锁时会被阻塞挂起,这会导致线程上下文的切换和重新调度开销。Java提供非阻塞的volatile关键字来解决共享变量的可见性问题,但是却不能解决读写一致性问题。CAS 是compareAndSwap的缩写,是JDK提供的非阻塞原子性操作,他通过硬件保证比较-更新的原子性。JDK中的Unsefe类提供了一系列的compareAndSwap*方法。 Unsafe类中的重要方法//返回指定的变量在所属类中的内存偏移地
2020-07-09 16:19:12
335
原创 aop在项目中的应用
最近因为公司业务的原因,需要对用户登录,用户注销登录、用户创建、应用创建、应用编辑、应用删除、应用打开等等地方加入日志,用于记录活动轨迹。最简单的实现方式,在所有的需要日志的接口中加入写日志的代码。日志需要包括:什么模块,干了什么,入参是什么,成功与否,如果失败,失败原因是什么。考虑到上面这些要素,对应不同模块的接口,代码实现起来比较繁琐,而且失败原因,如果是非预期的运行时异常,很难记录下来。下面用一种比较优雅的方式,实现业务需求。主要用到的技术:AOPstep1: 自定义注解/** * @Auth
2020-07-08 15:46:43
1685
原创 time zone
mysql global time zone = UTC前端调用java程序入参如下:{ "dateTime":"2020-07-01 9:07:04", "timeStamp":"2020-07-01 9:07:04"}url: jdbc:mysql://122.51.245.236:3306/z?useSSL=false&useUnicode=true&characterEncoding=utf-8&useLegacyDatetimeCode=false
2020-07-02 10:58:58
356
原创 LettuceConnectionFactory与JedisConnectionFactory
Redis切库问题spring 2.x 默认使用的redisclient使用LettuceConnectionFactory,1.x使用的是JedisConnectionFactory。新的改变在公司业务开发的过程中遇到了redis切库失败的问题,最终分析和springboot的版本有关系。LettuceConnectionFactory切库不生效,具体原因还在研究。临时解决方案可以先把LettuceConnectionFactory退回JedisConnectionFactory。具体做法如下
2020-05-16 15:05:07
8457
1
原创 关于时区
这里写自定义目录标题关于时区相关代码关于时区最近项目中出现了一个因为时区差异导致的bug.两个微服务系统的时区不同导致时间类型的字段值异常。B服务通过restAPI调用A服务,在B服务中观察接口返回值(String),发现时间正常,但是通过Gson反序列化转成目标对象,发现时间戳不正常。比A中的时间戳要大。经过各种排查,最终找到问题根源。Google的工具类Gson是和时区有绑定的,默认使用当...
2020-04-29 16:38:01
625
原创 Mybatis-牛刀小试
用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中: <!-- 引入mybatis依赖 --> <dependency> <groupId>org.mybatis</groupId> <artifactI...
2019-11-06 23:05:25
112
原创 JVM + GC
1. 强引用、软引用、弱引用、虚引用分别是什么?强引用 当内存不足,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回收,死都不收。 强引用是最常见的普通对象引用,只要还有前饮用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰到这种对象。在Java中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,...
2019-08-19 03:15:29
119
原创 JVM内存模型
JVM位置 JVM是运行在操作系统之上的,它与硬件没有直接的交互JVM体系结构预览Execution Engine执行引擎负责解释命令,提交操作系统执行。类装载器ClassLoader 负责加载class文件,class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定类装载器...
2019-08-19 02:07:32
102
原创 JVM 堆参数调优入门
Java7Java8 JDK 1.8之后将最初的永久代取消了,由元空间取代。public static void main(String[] args){ long maxMemory = Runtime.getRuntime().maxMemory() ;//返回 Java 虚拟机试图使用的最大内存量。 long totalMemory = Runtime.getRuntim...
2019-08-19 02:06:31
99
原创 微服务总结篇(七)
Zuul是什么?Zuul包含了对请求的路由和过滤两个最主要的功能: 路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础, 过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础.Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul...
2019-08-11 16:26:33
125
原创 微服务总结篇(六)
服务雪崩多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”.对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几秒钟内饱和。比失败更糟糕的是,这些应用程序还可能导致服...
2019-08-11 15:30:12
263
原创 微服务总结篇(五)
Feign是什么?Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。如何使用Feign?首先在生...
2019-08-11 13:14:11
99
原创 微服务总结篇(四)
Ribbon是什么?Ribbon基于Netflix Ribbon实现的一套 客户端 负载均衡的工具。简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon...
2019-08-11 01:20:01
115
原创 微服务总结篇(三)
什么是EurekaServer自我保护模式?默认情况下,如果EurekaServer在一定时间内没有接收到某个微服务实例的心跳,EurekaServer将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务与EurekaServer之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康的,此时本不应该注销这个微服务。Eureka通过“自我保护模式”来解决这个问题——当...
2019-08-10 23:17:40
158
原创 微服务总结篇(二)
Eureka是什么 Eureka是Netflix的核心模块之一。Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。服务注册与发现对于微服务架构来说是非常重要的,有了服务发现与注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了。功能类似于dubbo的注册中心,比如Zookeeper。遵循的AP原则、Eureka交互过程Eure...
2019-08-10 21:24:54
99
原创 微服务总结篇(一)
什么是微服务?微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事。从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动或销毁,拥有自己独立的数据库。微服务的优缺点优点:每个服务足够内聚,足够小,代码容易理解,这样能聚焦一个指定的业务功能或业务需求开发简单、开发效率提高,一个服务可能就是专一的...
2019-08-10 14:07:27
141
原创 jvm常见面试题
GC垃圾回收中的垃圾指的是什么?简单的来说是内存中已经不再使用到的空间就是垃圾如何判断一个对象是否应该回收? 引用计数法 枚举根节点可达性分析(GCRoots)java中可以作为GCRoots的对象有哪些? 虚拟机栈中引用的对象 方法区的静态属性引用的对象 方法区中常量引用的对象 本地方法栈中native方法引用 的对象你说你做过jvm优化和参数配置,请问如何盘点查...
2019-04-22 00:34:45
1785
原创 jvm参数
jvm常见参数类型 标配参数 如Java -version -X参数 -XX参数 我们jvm调优时主要调的就是这类参数如何查看当前的jvm参数1.首先查看java应用的进程Id:jps -lE:\spring-boot\spring-boot-quickstart>jps -l10016 org.jetbrains.jps.cmdline.Launcher7252 ...
2019-04-21 20:39:44
308
原创 在分布式数据库中CAP原理CAP+BASE
传统的ACID分别是什么?ACID什么是CAP?C:Consistency(强一致性)A:Availability(可用性)P:Partition tolerance(分区容错性)什么事BASE?BASE就是为了解决关系数据库强一致性引起的问题而引起的可用性降低而提出的解决方案。BASE其实是下面三个术语的缩写:基本可用(Basically Available)软状态(Soft ...
2019-04-19 02:56:22
126
原创 redis
什么是redis?Redis:REmote DIctionary Server(远程字典服务器)是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。redis的三个特点。 Redis支持数据的持久化,可以将内存中的数据保...
2019-04-19 02:55:28
186
原创 Java8中Map与FlatMap的理解
map map比较简单,可以抽取列表元素的某个属性形成新的列表,但是无法对更深层的属性做提取map能够直接操作list中的每个对象 代码示例:List<Integer> integers = new ArrayList<>();//添加数据略integers.stream.map(i -> i + 1).foreach(System.out:...
2019-04-18 11:01:49
4469
原创 数据库事务的四大特性以及事务的隔离级别
一,数据库中事务的四大特性(ACID) 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。 一致性(Isolation)一个事务执行之前和执行之后都必须处于一致性状态。类似于能量守恒,例如在银行转账的时候,A账户上有金额300元,B账户上有200元,A给B转账100...
2019-04-17 20:11:05
160
1
原创 @PropertySource与@ImportResource的区别
@PropertySource 自定义配置文件名称,多用于配置文件与实体属性映射。引入说明在从配置文件里获取值,与JavaBean做映射。存在一个问题,我们是从主配置(application.yml)里读取的。如果全部的配置都写到application里,那么主配置就会显得特别臃肿。为了按照不同模块自定义不同的配置文件引入了@PropertySource配置person.properti...
2019-04-16 13:54:51
1653
原创 装饰器设计模式
装饰器设计模式模块一般构成 抽象组件:需要装饰的抽象对象(接口或抽象父类) 具体组件:需要装饰的对象 抽象装饰类:包含了对抽象组件的引用以及装饰着共有的方法 具体装饰类:被装饰的对象抽象组件interface Drink{ double cost(); //费用 String info(); //说明}具体组件class Coffee implemen...
2019-04-14 21:21:28
125
原创 FileUtils
FileUtils封装拷贝public static void copy(InputStream is,OutputStream os) { try { //3、操作 (分段读取) byte[] flush = new byte[1024]; //缓冲容器 int len = -1; //接收长度 while((len=is.read(flush...
2019-04-14 20:27:53
123
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人