自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring Cloud微服务实战之客户端负载均衡-Spring Cloud Ribbon

客户端负载均衡RestTemplate详解看一点源码负载均衡的客户端接口:LoadBalancerClientpublic interface LoadBalancerClient { //根据传入的服务名serviceId,从负载均衡器中挑选一个对应服务的实例 ServiceInstance choose(String var1); //使用从负载均衡器中挑选出的服务实例来执行请求内容 <T> T execute(String var1, LoadBalanc

2021-02-03 18:47:42 361 1

原创 Spring Cloud微服务实战之服务治理-Spring Cloud Eureka

第3章:服务治理:Spring Cloud Eureka​ Spring Cloud Eureka基于NetFlix Eureka做了二次封装,主要负责微服务架构中的服务治理功能。服务治理​ 服务治理是微服务架构中最核心与基础的模块,主要用来实现各个微服务实例的自动化注册与发现。​ 解决微服务架构中的服务实例维护问题,有很多服务治理框架与产品,这些产品都围绕:服务注册与服务发现机制来完成对微服务应用实例的自动化管理。​ 服务注册:服务治理框架下,构建一个注册中心,每个服务单元向注册中心登记

2021-01-27 19:50:48 309 2

原创 Stack类的使用:逆波兰表达式

import java.util.Stack;/** * Stack类 * 栈:桶型或箱型数据类型,后进先出,相对堆Heap为二叉树类型,可以快速定位并操作 * Stack<E>,支持泛型 * public class Stack<E> extends Vector<E> * Stack的方法调用的Vector的方法,被synchronized修饰,为线程安全(Vector也是) *

2017-09-29 11:32:00 405

原创 Java--map的遍历方式

import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class map { public static void main(String[] args) { Map<String,String> map = new HashMap() {}; Sys

2017-09-27 21:45:26 298

原创 图解TCP/IP读书笔记(四):IP协议

一、IP基础知识IP相当于网络层:实现终端节点之间的通信,也叫点对点通信 区分: 主机:配置有IP地址,但不进行路由控制的设备 路由器:配置有IP地址,也进行路由控制能力的设备 节点:主机和路由器的统称; 数据链路层是提供两个设备之间的通信功能; 而网络层则负责在没有直连的两个网络之间进行通信传输IP的三个作用模块: IP寻址、路由(最终节点为止的转发)、IP分包和组包MAC:同一个链

2017-09-20 12:11:37 338

原创 排序算法的Java实现+思路(一):冒泡、快排

冒泡排序:/** * 冒泡排序 * 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 */public static void bubbleSort(int[] numbers){ int length = numbers.length; int exchange = 0; for (int i = 0;i< length;i++){ for (

2017-09-18 10:33:57 440

原创 输出一个字符串的全排列

输入一个字符串,打印这个字符串中字符的全排列。 eg: 输入:abc 输出:abc acb bac bca cab cba 思路:将求字符串的全排列分解为两步: 第一步是确定第一个位置的字符,就是第一个位置与后边的所有字符进行交换。 第二步,就是对除了第一个位置的后边所有位置的字符进行相同处理;直至剩下一个字符,打印;看成两部分: 交换后只关注后边的; 实现代码:import j

2017-09-16 11:16:55 13158 6

原创 DbUtils使用详解

DBUtils:是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。 DBUtils的API: 1、org.apache.commons.dbutils 接口: ResultSetHandler 将ResultSet转换为别的对象的工具。 RowProcessor 将ResultSet行转换

2017-09-14 18:21:37 868

原创 图解TCP/IP读书笔记(三):数据链路

一、数据链路相关技术 1、MAC地址:用于识别数据链路中互联的节点。 *在以太网或者FDDI(光纤分布式数据接口)中会使用。(无线LAN,蓝牙) *一般不会重复:与厂商有关,厂商识别码 2、共享介质型网络 以太网和FDDI,设备之间使用同一个载波信道进行发送和接受,因此要进行介质访问控制,分为:争用方式、令牌传递方式 *争用方式:CSMA(载波监听多路访问),先到先得的方式占用信道发

2017-09-14 16:19:11 347

原创 String、StringBuffer与StringBulider之间的区别

可变性的区别:String是字符串常量,是不可变的对象:String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。 StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[] value,这

2017-09-12 16:42:54 768

原创 MYSQL优化(二):索引优化、存储引擎优化、表结构优化等

索引索引类型: 1、B-Tree索引(重点掌握) 
使用较多,二叉树,数据都存放在叶子节点中,优势在于查找的最短路径相同。 2、R-Tree索引 
使用较少,优势在于范围查找 3、Hash索引 
使用较少,主要在Memory存储引擎中使用。(Hash索引为默认) 4、Full-text索引(全文索引) 
使用较少,只有MyISM存储引擎支持, 创建索引: 原则: 1、较频繁的作为查询条

2017-09-12 15:50:56 416

原创 图解TCP/IP读书笔记(二):TCP/IP基础知识

TCP:Transmission Control Protocol IP:Internet Protocol (一)TCP/IP的具体含义: 多数情况下,它是利用IP进行通信时,所必须用到的协议群的统称。 (二)互联网基础知识 互联网:The Internet 网际网:Internet TCP/IP原本就是为使用互联网而开发制定的协议族。因此,互联网的协议就是TCP/IP,TCP/I

2017-09-12 14:37:39 307

原创 图解TCP/IP读书笔记(一):网络基础知识

一、计算机与网络发展的七个阶段: 1、批处理:事先准备好要执行的程序和数据,批量处理 2、分时系统(TSS):多终端一个计算机,模拟一人一机 3、计算机之间的通信:数据共享和分布式处理 4、计算机网络的产生:基于分组交换技术 5、互联网的普及 6、互联网技术为中心的时代 7、从“单纯建立连接”到“安全建立连接”:信息安全越来越重要 二、协议 计算机之间通过网络通信事先达成的一种约定

2017-09-11 20:20:51 540

原创 理解原码、反码和补码-------带例子详解

**对于正数原码和补码是一样的; 对于负数,先对其数字部分(-9的数字部分就是9)原码取反,形成反码,然后再加一,形成补码; 最高一位:0正1负**例子: (1)~9(求对9按位取反的结果) 解析: 9:0000000000000000 1001(源码补码相同) 结果:1111111111111111111111 0110存的是???负数是肯定的 设为X; 能确定的是,这个

2017-09-11 17:14:38 866

原创 Java集合类:list补充

ArrayList: 不是线程安全的,建议在单线程下使用,多线程下可以使用Vector或者CopyOnWriteArrayList。 包含两个重要的对象: elementData(Object【】类型数组),用来保存添加到ArrayList中的元素; (elementData是个动态数组,通过构造函数 ArrayList(int initialCapacity)来执行它的初始容量为initi

2017-09-11 12:06:00 768

原创 动态规划:最大连续子序列和

问题:给定一个数字序列:A1、A2、A3。。。AN 求i和j,使得Ai加到Aj的和最大,输出和;思路: 设置一个数组endMax【N】,下标为i,含义为以第i个值为结尾的连续子序列的最大值: 两种情况: 1>从前边某位置开始的最大连续子序列开始到i位置:endMax【i-1】+Ai 2>这个最大和连续子序列为长度一:Ai开始Ai结束因此得到状态转移方程:endMax【i】 = max

2017-09-10 12:03:45 1020

原创 MYSQL优化(一):【架构解析、sql语句执行详细流程】

mysql架构: 特点:基于C/S架构、基于线程工作、mysql是一个独立的进程 客户端:连接到服务器上,并将请求发送到服务器; 服务器端: 1、连接/线程处理 2、查询缓存 3、分析器 4、优化器 5、存储引擎**服务器这样分: 第一层(1):并不是Mysql独有,大多数基于网络客户端、服务器工具,例如:连接处理、授权认证、安全等 第二层(2、3、4):核心服务层,包括查

2017-09-08 11:11:32 409

原创 JSP知识点汇总(一)

JSP是Java Server Page的缩写,是基于Java Servlet以及整个Java体系的WEB开发技术,是一种动态网页技术标准。 运行原理: 客户端请求服务端的一个JSP页面,如果该JSP页面被第一次请求,服务器的JSP引擎首先将JSP页面文件转译成Java源文件(其实是将JSP文件转换为一个Servlet),接着编译Java源文件并将生成的字节码文件存储在服务器的localhost

2017-09-08 10:56:30 579

原创 数据库三大范式

第一范式:1NF 每一个分量必须是不可分的数据项;强调列的原子性,列不能再分为其他列; 不满足第一范式就不是关系型数据库! 第二范式:2NF 属性对主键是完全依赖;消除部分依赖;没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。 不满足第二范式的表的缺点: 1、数据重复,浪费空间 2、插入异常 第三范式:3NF 消除传递依赖:非主键列必须直接依赖于主键,不能存在传

2017-09-06 19:51:18 236 1

原创 操作系统:死锁的产生、条件、和解锁

deadlocks(死锁):两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. 产生原因:1、资源分配策略不当 2、资源不足 3、进程运行推进的顺序不合适 (程序员的程序有错误也会造成) 如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序

2017-09-06 17:50:18 451

原创 HashMap与HashTable的区别 |HashSet和HashMap的区别

HashMap与HashTable的区别 两者都实现了Map接口 区别:线程安全性、同步(synchronization)、速度 1、HashMap是非synchronized的,并且可以接受null key,除此以外,两者可等价 2、Hashtable是synchronized的,因此可以多线程访问,若没有正确同步,HashMap是不能被线程共享的; Hashtable实现线程安全的方

2017-09-06 14:48:18 235

原创 HashMap的四种同步方式

1、使用synchronized关键字 synchronized(anObject) { value = map.get(key); } //将获取方法锁住Map m = Collections.synchronizeMap(hashMap); 同步的方式与1相同,返回一个同步的map,这个map封装了HashMap中所有的方法;2、用lock lock.lock(); Va

2017-09-06 14:09:47 7548

原创 Java集合类详解

java中集合类主要有两大分支:(1)Collection (2)Map Collection接口一个Collection代表一组Object,即Collection的元素(Elements)。Java SDK不提供直接继承自Collection的类,java SDK提供的类都是继承自Collection的“子接口”如List和Set。 实现:所有实现Collection接口的类都必须提供两

2017-09-06 11:58:00 426

原创 二叉查找树(BST) | 平衡二叉查找树(AVL) | 红黑树(RBT)

二叉查找树(BST) 特点:对任意节点而言,左子树(若存在)的值总是小于本身,而右子(若存在)的值总是大于本身。 查找:从根开始,小的往左找,大的往右找,不大不小的就是这个节点了; 插入:从根开始,小的往左,大的往右,直到叶子,就插入, 时间复杂度期望为Ο(logn); 删除:如果是叶子节点,直接删除;如果不是,则去找这个节点左子树的最大值,与之交换;如果交换后还不是叶子节点就继续找做字数

2017-09-05 18:12:49 846

原创 cookie、session机制及相关内容详解

cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。cookie和session的由来: 早期的web应用或者说早期的网站都是一种处理静态资源的网站,功能主要是查看文档,看看图片,而现在互联网的网站更准确的定义应该是互联网软件即网站就是软件,网站所代表的软件和早期软件的定义是不一样的,早期的软件都是在单机环境下运行,而互联网的普及让软件和网络技术融

2017-09-05 11:20:49 437

原创 MySql安装 | 终端新建用户 | IntelliJ IDEA 连接mysql数据库

Mac上安装mysql: http://jingyan.baidu.com/article/c843ea0b96f01877931e4a1d.html安装最后有个root的密码,用于第一次登陆,记得截图下来;为自己新建一个mysql用户: 1、在系统偏好设置中打开MySQL,并启动; 2、在Finder中的应用程序中的实用工具中启动“终端”; 3:输入命令:PATH=”$PATH”:/usr

2017-09-04 17:48:05 611

原创 深入理解Java虚拟机(第二章):Java内存区域与内存溢出异常

java虚拟机定义了若干种程序运行时使用到的运行时数据区 1.有一些是 随虚拟机的启动而创建,随虚拟机的退出而销毁 2.第二种则是与线程一一对应,随线程的开始和结束而创建和销毁。PC寄存器 也叫程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示器。 字节码解析器工作时通过改变程序计数器的值来选取下一条需要执

2017-09-03 10:43:13 253

原创 深入理解Java虚拟机(第七章):虚拟机类加载机制

Java虚拟机 类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程。类的生命周期: 从被加载到JVM开始,直到卸载出内存: 加载(loading)—验证(verification)—-准备(preparation)—-解析(resolution) —-初始化(initialization)—使用(u

2017-09-02 16:25:50 371

原创 多线程编程核心技术读书笔记(四):Lock的使用

ReentrantLock类和ReentrantReadWriteLock类的使用; ReentrantLock类可以实现与synchronized关键字相同的功能,并有更强的拓展性,具有嗅探锁定、多路分支通知等功能,使用也更加灵活; Lock lock = new ReentrantLock(); lock.lock()方法获得对象锁,lock.unlock()方法释放对象锁。

2017-09-02 10:48:10 221

原创 ASCII、Unicode和UTF-8

ASCII编码: 最早只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母 A 的编码是65,小写字母 z 的编码是122。 随着互联网的广泛应用,由于全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,中国制定了GB2312编码,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文

2017-09-02 09:52:58 559

原创 深入理解Java虚拟机(第六章):类文件结构

Class类文件,*.class,字节码文件是一种平台无关的中间编译结果,字节码文件由java虚拟机读取,解析和执行,java虚拟机屏蔽了不同操作系统和硬件平台的差异性。因此,class文件是平台无关性的基石;(Write Once,Run Anywhere) 实现语言无关性:基础仍然是虚拟机和字节码存储格式。Java虚拟机不和包括Java语言在内的任何语言绑定,JVM只和Cl

2017-09-01 21:53:26 256

原创 多线程编程核心技术读书笔记(三):进程间通信

线程通信的目标是使线程间能够互相发送信号。另一方面,线程通信使线程能够等待其他线程的信号。 1、通过共享对象通信 在共享对象的变量里设置信号值;线程A和B必须获得指向一个MySignal共享实例的引用,以便进行通信。 2、忙等待(busy wait) 用sleep()和while(true)实现通信 3、等待/通知机制(wait/notify) Java有一个内建的等待机制来允许线程在等

2017-09-01 18:04:32 252

原创 多线程编程核心技术读书笔记(二):对象及变量的并发访问(volatile关键字)

并发编程中的三个概念 1.原子性   原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。   一个很经典的例子就是银行账户转账问题:   比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。如果不具备原子性,则会发生错误; 2.可见性   可见性是指当多个线程访问同一个变量时,一个线程修改了这

2017-09-01 12:21:52 233

原创 多线程编程核心技术读书笔记(二):对象及变量的并发访问(synchronized关键字)

“非线程安全”问题存在于“实例变量”中,如果是方法内的私有变量,则不存在“非线程安全”问题; 即:方法内的变量为线程安全。 实例变量为非线程安全,(因为为公用资源)关键字synchronized取得的锁,都是对象锁,而不是对一段代码或者函数当做锁,也就是synchronized锁住的是对象;如果多线程访问的是多个对象,那JVM会创建多个锁;共享资源的读写访问才需要同步化;**问题:当一个线程进入

2017-09-01 11:49:09 4148

原创 String使用 == 和 equal

String作为基本数据类型:String str = “string”; String作为一个对象:String str = new String(“string”); == :比较的是两个String类型的变量的引用,即是否是同一块内存地址; Equal:继承自Object对象,但进行了重写;比较的是字符串的内容是否一致; ——————————————— String s1 = new

2017-08-30 22:14:04 363

原创 HashMap 中插入null key 的过程

添加key==null的Entry时,调用putForNullKey方法 正常的是put方法: 当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。 当两个不同的键对象的hashcode相同时它们会储存在同一个bucket位置的链表中。键对象的equals()方法用来找到键值对。(比较key) putFor

2017-08-30 20:20:28 3982

原创 多线程编程核心技术读书笔记(一):Java多线程技能

什么是进程:能够让操作系统从宏观上看起来同一个时间段有多个任务在执行。进程让操作系统的并发成为了可能。 什么是线程:进程中独立运行的子任务。进程让操作系统的并发性成为可能,而线程让进程的内部并发成为可能。 一个进程虽然包括多个线程,但是这些线程是共同享有进程占有的资源和地址空间的。进程是操作系统进行资源分配的基本单位,而线程是操作系统进行调度的基本单位。对于单核CPU,如果是CPU密集型任务,如

2017-08-30 19:10:56 396

原创 深入分析ConcurrentHashMap

线程不安全的HashMap 因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。 效率低下的HashTable容器 HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法时,其他线程访问H

2017-08-30 19:05:37 1078

原创 哈希表---哈希函数构建和冲突处理

哈希法又称散列法、杂凑法以及关键字地址计算法等,相应的表称为哈希表。 基本思想是:首先在元素的关键字k和元素的存储位置p之间建立一个对应关系f,使得p=f(k),f称为哈希函数。创建哈希表时,把关键字为k的元素直接存入地址为f(k)的单元; 以后当查找关键字为k的元素时,再利用哈希函数计算出该元素的存储位置p=f(k),从而达到按关键字直接存取元素的目的。 当关键字集合很大时,关键字值

2017-08-30 11:30:50 1163

原创 KMP算法(浅显易懂)

KMP算法求解什么类型问题字符串匹配。给你两个字符串,寻找其中一个字符串是否包含另一个字符串,如果包含,返回包含的起始位置。讲道理 大串A(长度n) 小串B(长度m) 一般匹配字符串,一个一个比,当前字符对了则比对下一个,不对了再从B的头开始比,移动一个位置;这样的时间复杂度是O(n*m) KMP可以实现复杂度为O(m+n) 改进的点就在于通过当发生不匹配时,之前匹配完成的部分的信息的利用

2017-08-21 17:08:36 691

空空如也

空空如也

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

TA关注的人

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