Luckylau's Blog

Keep Moving, Keep Learning


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 搜索
close
Luckylau's Blog

Java并发之Atomic类

发表于 2017-09-07 | 分类于 java

​ Java从JDK 1.5开始提供了java.util.concurrent.atomic包(以下简称Atomic包),这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。在Atomic包里一共提供了13个类,属于4种类型的原子更新方式,分别是原子更新基本类型、原子更新数组、原子更新引用和原子更新属性(字段)。

Atomic实现原理

CAS (compare and swap) + volatile和native方法

原子更新基本类型类

​ Atomic包提供了以下3个类:AtomicBoolean:原子更新布尔类型;AtomicInteger:原子更新整型;AtomicLong:原子更新长整型。

阅读全文 »
Luckylau's Blog

SpringBoot之Redis

发表于 2017-08-13 | 分类于 java

最近项目使用了Redis,抽个时间系统的整理一下Redis的使用。

目前提供一套学习使用教程,见Git地址。

什么是Redis?

​ Redis是Nosql数据库中使用较为广泛的非关系型内存数据库,Redis内部是一个key-value存储系统。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型,类似于Java中的map)。Redis基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。

为什么要使用Redis?

​ 数据结构(Data Structure)需求越来越多, 但memcache中没有, 影响开发效率;性能需求, 随着读操作的量的上升需要解决,经历的过程有:数据库读写分离(M/S)–>数据库使用多个Slave–>增加Cache (memcache)–>转到Redis。没有使用Redis时候需要水平拆分,对表的拆分,将有的用户放在这个表,有的用户放在另外一个表;可靠性需求 ,Cache的”雪崩”问题让人纠结 ,Cache面临着快速恢复的挑战;开发成本需求 。Cache和DB的一致性维护成本越来越高(先清理DB,再清理缓存, 不行啊, 太慢了!) 开发需要跟上不断涌入的产品需求 硬件成本最贵的就是数据库层面的机器,基本上比前端的机器要贵几倍,主要是IO密集型,很耗硬件;维护性复杂 ,一致性维护成本越来越高;

阅读全文 »
Luckylau's Blog

Java基础之注解

发表于 2017-08-08 | 分类于 java

java的注解(Annotation)机制

什么是注解?

​ 在JDK中我们经常看到@Override @SuppressWarnings(“unchecked”),@Deprecated这三种注解。我们好奇的点开其中的一个实现,代码非常简单。其实在我们使用各种开发框架时候,注解也是经常用到的相关的代码,比如SpringBoot里的@RestController,@Autowired等。下面我们就详细介绍一下注解。

1
2
3
4
5
//@Override
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
阅读全文 »
Luckylau's Blog

SpringBoot之Swagger2

发表于 2017-08-05 | 分类于 java

​ Swagger 2是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。下面介绍如何使用Swagger 2。

配置Swagger 2的依赖

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.2.2</version>
</dependency>
阅读全文 »
Luckylau's Blog

Neutron之OVS

发表于 2017-07-30 | 分类于 neutron

​ OVS即开放虚拟交换标准,不仅仅是为了支持OpenFlow协议,而是为了给虚拟化平台上运行的虚拟机实例提供一套纯软件实现的路由交换协议栈。具体点说,Open vSwitch是在开源的Apache2.0许可下的产品级质量的多层虚拟交换标准!它旨在通过编程扩展,使庞大的网络自动化(配置、管理、维护),同时还支持标准的管理接口和协议(如NetFlow, sFlow, SPAN, RSPAN, CLI, LACP,802.1ag)。

Standard 802.1Q VLAN model with trunk and access ports;
NIC bonding with or without LACP on upstream switch;
NetFlow, sFlow(R), and mirroring for increased visibility;
QoS (Quality of Service) configuration, plus policing;
Geneve, GRE, GRE over IPSEC, VXLAN, and LISP tunneling;
802.1ag connectivity fault management;
OpenFlow 1.0 plus numerous extensions;
Transactional configuration database with C and Python bindings;
High-performance forwarding using a Linux kernel module;

​ OVS bridge 有两种模式:“normal” 和 “flow”。“normal” 模式的 bridge 同普通的 Linux 桥,而 “flow” 模式的 bridge 是根据其流表(flow tables) 来进行转发的。Neutron 使用两种 OVS bridge:br-int 和 br-tun。其中,br-int 是一个 “normal” 模式的虚拟网桥,而 br-tun 是 “flow” 模式的,它比 br-int 复杂得多。详情参考:Neutron二层网络服务实现原理

阅读全文 »
Luckylau's Blog

阅读大话数据结构(8)

发表于 2017-07-27 | 分类于 数据结构和算法

本文在阅读大话数据结构这本书的基础上,结合java语言的特点,来理解排序,代码均为自己实现。

排序方法 平均情况 最好情况 最坏情况 辅助空间 稳定性
冒泡排序 O(n^2) O(n) O(n^2) O(1) 稳定
简单选择排序 O(n^2) O(n^2) O(n^2) O(1) 稳定
直接插入排序 O(n^2) O(n) O(n^2) O(1) 稳定
希尔排序 O(nlogn)~O(n^2) O(n^1.3) O(n^2) O(1) 不稳定
堆排序 O(nlogn) O(nlogn) O(nlogn) O(1) 不稳定
归并排序 O(nlogn) O(nlogn) O(nlogn) O(n) 稳定
快速排序 O(nlogn) O(nlogn) O(n^2) O(logn)~O(n) 不稳定
阅读全文 »
1…202122…36
Luckylau

Luckylau

人生识字忧患始

215 日志
14 分类
33 标签
GitHub Weibo
© 2017 - 2022 Luckylau
由 Hexo 强力驱动
主题 - NexT.Pisces