自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 收藏
  • 关注

翻译 HashMap学习笔记

HashMap采用数组+链表的数据结构,只是在jdk1.7和1.8的实现上有所不同,下面,简单分析一下,方便自己更加深刻的理解典型的key-value的数据结构。1、jdk1.7实现原理简单分析1.7的HashMap数据结构图也可以这么理解:在jdk1.8之前,HashMap由数组 + 链表组成,也就是链表散列,数组是HashMap的主体,链表实则是为了解决哈希冲突而存在的...

2019-03-31 11:39:04 252

原创 jdk8中的常用时间的操作API

最近,做公司的项目,经常用到时间的操作,比如获取当前的时间,两个时间之间的差等等。因此总结一下时间操作常用的API

2019-03-31 10:57:39 362

原创 二、并发编程之二线程安全问题

一、什么是线程安全? 为什么有线程安全问题?当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。但是做读操作是不会发生数据冲突问题。 案例:需求现在有100张火车票,有两个窗口同时抢火车票,请使用多线程模拟抢票效果。public class ThreadTrain implements Runnable { priva...

2019-01-20 23:32:06 270

原创 一、多线程基础之一

1、线程与进程区别:每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。使用线程可以把占据时间长的程序中的任务放到后台去处理,程序的运行速度可能加快,在一些等待的任务实现上如用户输...

2019-01-19 22:25:08 139

原创 年假学习任务安排

架构师学习方向之并发编程主要内容:什么是多线程? 同步和异步概念 线程安全(线程之间同步) 线程之间通讯 java1.8并发 线程池原理分析 锁概念...

2019-01-19 00:01:11 151

原创 简单的谈一谈分布式事务问题

目前,互联网行业的发展,使得系统由单体系统演变分布式系统,传统的集中式蜕变为分布式的。而在分布式系统架构的到来,好处特别多【自行网上搜集资料】,但也带来一个世界性的难题,即分布式事务问题。何为分布式事务?在此,举一个例子【本人开发过程中的经历】:一个电商系统,采取spring+springMVC+mybatis做基础的技术架构,采用RPC框架做服务的远程调用【Dubbo+zookeep...

2019-01-16 16:24:26 966

原创 短信验证码

本文以大汉云通信为主一、前端写一个请求的接口,请求手机验证码二、主要的java代码/** * 发送手机验证码(设置验证码到session中) */ @GetMapping("/user/mobileCode") public void getMobileCode(HttpSession session, String mobileNo) { ...

2019-01-15 20:41:48 276

原创 Kotlin函数(方法)基础总结(六)

 一、函数的声明及基本使用在Kotlin中函数的声明,同JavaScript相似。1.1、函数的声明Kotlin中的函数声明关键字为:fun 定义格式为:可见性修饰符 fun 函数名(参数名 :类型,...) : 返回值{}这里的可见性修饰符请参见我的另一篇文章Kotlin:可见性修饰符详解,至于返回值以及参数请继续往下面看例:定义一个最基本的函数fun...

2019-01-02 23:08:39 312

原创 Kotlin空类型、空安全、非空断言、类型转换等特性总结(五)

 一、可空类型、空安全在前面的变量、常量中我们已经讲解到了变量的定义。这里不作详述。若你有兴趣,请参见Kotlin基础用法(一)1.1、定义一个可空类型的变量定义一个可空类型的变量的格式为:修饰符 变量名 : 类型? = 值这里为了演示,定义变量和定义可空变量的区别,会提到定义变量的代码。例:// 定义一个不可为空的变量,用var修饰的变量可以被重新赋值,...

2019-01-02 18:11:05 1277

原创 Kotlin操作符与操作符重载(四)

一、约定所谓预定:即指Kotlin允许我们为自己的类型提供预定义的一组操作符的实现。这些操作符具有固定的符号表示(如 +或 *)和固定的优先级。为实现这样的操作符,我们为相应的操作类型提供了一个固定名字的函数。这样的技术,称为约定因为由类实现的接口集是固定的,而Kotlin不能为了实现其他接口而修改现有的类,因此一般通过扩展函数的机制来实现为现有的类增添新的约定方法,从而适应任何现...

2019-01-01 04:25:18 188

原创 Kotlin控制语句详解(三)

 一、if语句在Kotlin中的if语句和Java还是还是有一定的区别的,它能在Java中更灵活,除了能实现Java写法外,还可以实现表达式(实现三元运算符),及作为一个块的运用。1、传统写法(同Java写法一样)例:var numA = 2if (numA == 2){ println("numA == $numA => true")}else{...

2019-01-01 04:15:17 219

原创 Kotlin数据类型详解(二)

一、数值类型1、Kotlin中的数字的内置类型(接近与Java),其关键字为:Byte=> 字节 => 8位 Short => 短整型 => 16位 Int => 整型 => 32位 Long => 长整型 => 64位 Float => 浮点型 => 32位 Double => 双精度浮点型 => 6...

2019-01-01 03:57:19 570

原创 Kotlin学习(一)基础语法

一、Kotlin之变量用法kotlin变量的声明方式与Java中声明变量有很大的区别,而且必须使用var或val关键字。其中:var: 用此关键字声明的变量表示可变变量,即可读且可写。相当于Java中普通变量 val: 用此关键字声明的变量表示不可变变量,即可读且不可写。相当于Java中用final修饰的变量1.1、基础用法定义格式: 关键字 变量名: 数据类型 = xxx例...

2019-01-01 03:27:18 231

转载 java处理高并发高负载类网站的优化方法

一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF【单点故障是指系统中一点失效,就会让整个系统无法运作的部件,换句话说,单点故障即会整体故障。】。尤其是Web2.0的应用,数据库的响应是首先要解决的。一般来说MySQL是最常用的,可能最初是一个mysql主机,当数据增加到100万以上,那么,MySQL的效能急剧下降。常用的优化措施是M-S(主-从...

2019-01-01 00:55:14 239

翻译 Java中BIO,NIO,AIO的理解【纯理论】

在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解。具体如下: 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同步阻塞? 6 什么是同步非阻塞? 7 什么是异步阻塞? 8 什么是异步非阻塞? 先来举个实例生活中的例子:如果你想吃一份宫保鸡丁盖饭:同步阻塞:你到饭馆点餐,然后在那等着,还要一边喊:好了没啊!同...

2019-01-01 00:23:16 189

翻译 Java-函数式编程(三)流(Stream)

流使程序猿可以在抽象层上对集合进行操作。  从外部迭代到内部迭代什么是外部迭代和内部迭代呢?个人认为,外和内是相对集合代码而言。如果迭代的业务执行在应用代码中,称之为外部迭代。反之,迭代的业务执行在集合代码中,称为内部迭代(函数式编程)。语言描述可能有点抽象,下面看实例。1. 外部迭代调用itrator方法,产生一个新的Iterator对象,进而控制整个迭...

2019-01-01 00:11:59 139

翻译 Java-函数式编程(二)Lambda表达式

认识lambda    public static void main(String[] args) {        new Thread(new Runnable() {            @Override            public void run() {                System.out.println("匿名内部类的执行");      ...

2018-12-31 23:51:42 139

转载 Java函数式编程(一)

1. 函数式编程是什么1.1 特点1. 函数是"第一等公民"所谓"第一等公民"(first class),指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值。举例来说,下面代码中的print变量就是一个函数,可以作为另一个函数的参数。var print = function(i){ console.log(i...

2018-12-31 23:32:59 243

原创 JDK动态代理(2)JDK动态代理的底层实现之Proxy源码分析

上一篇动态代理的测试类中使用了Proxy类的静态方法newProxyInstance方法去生成一个代理类,这个静态方法接收三个参数,分别是目标类的类加载器,目标类实现的接口集合,InvocationHandler实例,最后返回一个Object类型的代理类。我们先从该方法开始,看看代理类是怎样一步一步造出来的,废话不多说,直接上代码newProxyInstance方法: 123...

2018-12-31 13:03:18 177

转载 JDK动态代理(一)代理模式实现方式的概要介绍

日常工作中经常会接触到代理模式,但一直没有对其进行深究。代理模式一直就像一团迷雾一样存在我心里,什么是代理模式?为什么要使用代理?代理模式有哪些实现?它的底层机制是怎样的?这些问题促使着我迫切想要揭开代理模式的神秘面纱。1. 什么是代理模式?日常生活中我们经常会碰到代理模式,例如我们找房产中介帮我们介绍房子,找婚姻中介帮我们介绍对象,找保洁帮我们打理房间,找律师帮我们进行诉讼等。我们在无形...

2018-12-31 12:56:32 122

原创 MongoDB简介

一、什么场合使用缓存?1:数据量大;2:写入操作频繁;3:价值较低对于这样的数据,我们更适合使用MongoDB来实现数据的存储。二、什么是MongoDBMongoDB是一个跨平台的,面向文档的数据库,是当前NoSQL数据库产品中最热门的一种。他介于关系数据库和菲关系数据库之间,是非关系型数据库当中功能最丰富,最像关系数据库的产品。他支持的数据库非常松散,是类似JSON的BS...

2018-12-23 18:11:24 648 1

原创 MongoDB的安装【Windows环境】

说明:64位笔记本软件连接:https://pan.baidu.com/s/1hn8xENLyd8DVtYYbPxfO8A一、创建数据目录MongoDB将数据目录存储在 db 目录下。但是这个数据目录不会主动创建,我们在安装完成后需要创建它。请注意,数据目录应该放在根目录下((如: C:\ 或者 D:\ 等 )。打开命令行提示:c:\>cd c:\c:\>mk...

2018-12-22 19:36:41 116

原创 SpringBoot导出Excel表格(之一)

第一步:引入依赖<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </dependency> &l

2018-12-21 18:25:51 3111 1

原创 SpringMVC+Swagger详细整合

一、新建maven工程导入正确的pom文件<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.a...

2018-12-21 17:42:38 768

转载 MyBatis原理简介和小试牛刀

在我看来mybatis的原理与hibernate在某些方面是一致的,先回顾一下Hibernate原理(原理主要上是要掌握并理解下列六个对象:Hibernate中重要的六个对象:Configuration:读取配置文件(主要指hibernate-config.xml)和启动hibernateSessionFactory:负责初始化HibernateSession接口:负责持久化对象的...

2018-12-18 22:40:08 135

原创 ssm框架整合+Ajax异步验证

SSM框架是目前企业比较常用的框架之一,它的灵活性、安全性相对于SSH有一定的优势。说到这,谈谈SSM和SSH的不同点,这也是企业常考初级程序员的面试题之一。说到这两套框架的不同,主要是持久层框架Hibernate和MyBatis的不同和控制层框架SpringMVC和Struts2的不同。 Hibernate和MyBatis的不同主要体现这么几点:1.自动化和半自动化:Hibernat...

2018-12-18 22:00:44 399

原创 Zookeeper入门(七)之Java连接Zookeeper

Java操作Zookeeper很简单,但是前提要把包导对。关于Zookeeper的Linux环境搭建可以参考我的这篇博客:Linux环境下Zookeeper安装下面进入正题:一、导入依赖<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-...

2018-12-18 21:26:31 250

原创 Zookeeper入门(六)之zkCli.sh对节点的增删改查

1.连接在 bin 目录下的  zkCli.sh  就是ZooKeeper客户端./zkCli.sh -timeout 5000  -server 127.0.0.1:2181   客户端与ZooKeeper建立链接timeout:超时时间,单位毫秒r:只读模式,当节点坏掉的时候,还可以提供读服务示例:./zkCli.sh -timeout 5000  -server 127.0.0....

2018-12-18 21:24:22 184

原创 Zookeeper入门(五)之在Linux环境下安装Zookeeper

1.安装wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz2.解压至/usr/local目录下tar -xzvf zookeeper-3.4.6.tar.gz -C /usr/local3.拷贝zookeeper配置文件cd zookeeper-3.4.6...

2018-12-18 21:22:34 94

转载 Zookeeper入门(四)之Leader选举

让我们分析如何在ZooKeeper集合中选举leader节点。考虑一个集群中有N个节点。leader选举的过程如下:所有节点创建具有相同路径 /app/leader_election/guid_ 的顺序、临时节点。 ZooKeeper集合将附加10位序列号到路径,创建的znode将是 /app/leader_election/guid_0000000001,/app/leader_elect...

2018-12-18 21:19:41 136

翻译 Zookeeper入门(三)之工作流

一旦ZooKeeper集合启动,它将等待客户端连接。客户端将连接到ZooKeeper集合中的一个节点。它可以是leader或follower节点。一旦客户端被连接,节点将向特定客户端分配会话ID并向该客户端发送确认。如果客户端没有收到确认,它将尝试连接ZooKeeper集合中的另一个节点。 一旦连接到节点,客户端将以有规律的间隔向节点发送心跳,以确保连接不会丢失。 如果客户端想要读取特定的z...

2018-12-18 21:18:18 123

翻译 Zookeeper入门(二)之基础

在深入了解ZooKeeper的运作之前,让我们来看看ZooKeeper的基本概念。本文主要包含如下内容:1、Architecture(架构)2、Hierarchical namespace(层次命名空间)3、Session(会话)4、Watches(监视)一、ZooKeeper的架构架构图如下:作为ZooKeeper架构的一部分的每个组件在下表中进行了说明。二、层次...

2018-12-18 21:14:20 153

原创 Zookeeper入门(一)之概述

今天主要讲这么几个方面?1.分布式应用;2.什么是Zookeeper;3.使用Zookkeeper有什么好处; ZooKeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper通过其简单的架构和API解决了这个问题。ZooKeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。ZooKeeper...

2018-12-18 19:19:20 112

翻译 centos7之Docker安装

Tomcat服务器老是挂掉?个人认为:     一类:java代码问题,某个类导致线程阻塞导致内存泄漏,使tomcat突然宕机和某个类找不到异常导致宕机;     二类,java运行环境内存不足,通过调tomcat内存解决该问题,不过这并不能解决这个问题,当然tomcat初始内存的确小,需求适当的调大,但是前提必须符合服务器的配置和内存;     三类,tomcat连接池和线程池的...

2018-12-18 18:30:49 94

原创 26 线程通信

问题一:什么时候需要通信?答:1.多个线程并发执行时,在默认情况下CPU是随机切换线程的        2.如果我们希望它们有规律的执行,就可以使用通信,例如每一个线程执行一次打印问题二:怎么通信?答:1.如果希望线程等待,就调用wait()    2.如果希望唤醒等待的线程,就调用notify();    3.这两个方法必须在同步代码中执行,并且使用同步锁对象来调用public class De...

2018-06-27 18:56:02 135

原创 25 多线程设计模式

一、单例设计模模式    -------------------------保证类在内存中只有一个对象。问题一:如何保证在内存中只有一个对象呢?答:(1)控制类的创建,不让其他类来创建本类的对象。private        (2)在本类中定义一个本类的对象。Singleton s;        (3)提供公共的访问方式。public static Singleton getInstance()...

2018-06-27 18:30:33 154

原创 24 多线程

01_多线程的引入     1.什么是多线程?      a、线程是程序执行的一条路径,一个进程中可以包含多条线程       b、多线程并发执行可以提高程序的效率,可以同时完成多项任务     2.多线程的应用场景        a、红蜘蛛同时共享屏幕给多台电脑        b、迅雷开启多条线程一起下载        c、QQ同时和多个人一起视频        d、服务器同时处理多个客户端请求...

2018-06-27 16:55:29 361

原创 10 面向对象之多态

一、多态的概述A:多态(polymorphic),事物存在的多种形态B:多态的前提        1.要有继承关系        2.要有方法重写        3.要有父类引用指向子类对象二、多态中的成员访问特点之成员变量...

2018-06-27 14:16:52 102

原创 09 面向对象之继承

一、何为继承?    继承(extends):让类与类之间产生关系,字父类关系。二、继承的好处和弊端 A:继承的好处  a:提高了代码的复用性(如果再有个猪的类,只需要直接继承Animal就可以用了)  b:提高了代码的维护性   如果要给动物加一个属性name,只需要在Aniaml中添加name就行  c:让类与类之间产生了关系,是多态的前提 B:继承的弊端  类的耦合性增强了。类与类之间的关系...

2018-06-26 22:09:28 116

原创 08 代码块

一、代码块的概述和分类  A:代码块概述  在Java中,使用{}括起来的代码被称为代码块。 B:代码块分类  根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解)。        局部代码块:只要是和局部有关系的,都是和方法有关系的        局部变量:在方法声明上或者在方法内部 C:常见代码块的应用 a:局部代码块   在方法中出现;限定变量生命周...

2018-06-26 21:35:32 130

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除