自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

洞玄之境的博客

业精于勤荒于嬉

  • 博客(194)
  • 论坛 (2)
  • 收藏
  • 关注

翻译 (四)互斥锁下:如何用一把锁保护多个资源?

受保护资源和锁之间合理的关联关系应该是 N:1 的关系。当我们要保护多个资源时,首先要区分这些资源是否存在关联关系。保护没有关联关系的多个资源在现实世界里,球场的座位和电影院的座位就是没有关联关系的,这种场景非常容易解决,那就是球赛有球赛的门票,电影院有电影院的门票,各自管理各自的。(门票:锁 ;座位:资源)**对应到编程领域,例如,银行业务中有针对账户余额(余额是一种资源)的取款操作,也有针对账户密码(**密码也是一种资源)的更改操作,我们可以为账户余额和账户密码分配不同的锁来解决并发问题,这个还是

2020-12-06 22:52:22 52

原创 (三)互斥锁(上):解决原子性问题

原子性一个或者多个操作在 CPU 执行的过程中不被中断的特性,称为“原子性”原子性问题如何解决?原子性问题的源头是线程切换,如果能够禁用线程切换那不就能解决这个问题了吗?而操作系统做线程切换是依赖 CPU 中断的,所以禁止 CPU 发生中断就能够禁止线程切换。在早期单核 CPU 时代,这个方案的确是可行的,但是并不适合多核场景。这里我们以 32 位 CPU 上执行 long 型变量的写操作为例来说明这个问题,long 型变量是 64 位,在 32 位 CPU 上执行写操作会被拆分成两次写操作(写高

2020-11-25 00:06:00 59

原创 (二)java 内存模型:解决可见性和有序性问题

什么是 Java 内存模型?我们知道,导致可见性的原因是缓存,导致有序性的原因是编译优化,那解决可见性、有序性最直接的办法就是禁用缓存和编译优化,但是这样问题虽然解决了,我们程序的性能可就堪忧了。合理的方案应该是按需禁用缓存以及编译优化。所以,为了解决可见性和有序性问题,只需要提供给程序员按需禁用缓存和编译优化的方法即可。Java 内存模型本质上可以理解为,Java 内存模型规范了 JVM 如何提供按需禁用缓存和编译优化的方法。具体来说,这些方法包括 volatile、synchronized 和 fi

2020-11-22 22:58:57 23

原创 (一)并发编程带来的可见性/原子性/有序性问题

缓存导致的可见性问题可见性:一个线程对共享变量的修改,另外一个线程能够立刻看到,称之为可见性多核时代,每颗 CPU 都有自己的缓存,当多个线程在不同的 CPU 上执行时,这些线程操作的是不同的 CPU 缓存。比如下图中,线程 A 操作的是 CPU-1 上的缓存,而线程 B 操作的是 CPU-2 上的缓存,很明显,这个时候线程 A 对变量 V 的操作对于线程 B 而言就不具备可见性了。多核 CPU 的缓存与内存关系图 下面我们再用一段代码来验证一下多核场景下的可见性问题。下面的代码,每执行一次 a

2020-11-08 23:13:20 34

原创 Java8—Lambda 表达式

Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。语法lambda 表达式的语法格式如下:(parameters) -> expression或(parameters) ->{ statements; }以下是lambda表达式的重要特征:可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。可选的参数圆括号:一个

2020-05-17 17:44:04 114

原创 解决Navicat for MySQL 连接 Mysql 8.0.19.0 报错1251- Client does not support authentication protocol

现象安装了mysql-installer-community-8.0.19.0,然后又安装了Navicat for MySQL_11.2.15,打开Navicat准备链接数据库的时候出现了如下提示:1251- Client does not support authentication protocol原因网上说出现这种情况的原因是:mysql8 之前的版本中加密规则是mysql_nati...

2020-04-06 13:48:17 259

原创 进程和线程简单理解

实现多任务方法:一是多颗CPU,二是单个CPU多个核心一般桌面端产品(手机、计算机)等很注重体积的产品,一般采用多核;而服务端领域,同时采用两者,更关注如何尽可能提升单台计算机的计算力密度那么对于单核CPU如何实现多任务?答案是分时系统:将CPU时间切成一段段时间片,每个时间片只运行某一个软件,比如这个时间段给软件A,下个时间段给软件B,由于时间片很小,我们会感觉AB同时运行,这种分时间片...

2020-03-15 22:43:37 91

原创 React基础学习(一):搭建环境和demo运行

1、安装node和npm(或者cnpm)安装node.js官网:https://nodejs.org/en/,npm包管理工具也会一同安装Win+R 打开cmd命令行,输入 node -v 和 npm -v 或cnpm -v来查看版本号,如下图显示则安装完成。Tips: npm作为包管理器来说相对来说比较好用,但是由于服务器不在国内所以有的时候速度会慢一点,建议安装一下淘宝团队的cnpm...

2020-02-12 00:19:08 158

原创 Redis安装

一、虚拟机安装二、Centos安装三、Redis安装

2019-05-19 23:18:36 130

原创 Redis数据库介绍(1)

什么是NosqlNosql叫做非关系型数据库,为了解决高并发、高可用、高可扩展,大数据存储等一系列问题而产生的数据库解决方案。Redis是使用c语言开发的一个高性能键值数据库。Redis可以通过一些键值类型来存储数据。键值类型:String 字符类型map 散列类型list 列表类型set 集合类型sortedset 有序集合类型...

2019-04-20 22:33:13 2994

原创 为什么引入Docker容器

一、为什么引入Docker在软件开发中,由于计算机的环境各不相同,不同软件在不同机器上运行时,需要进行环境配置。比如,操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。举例来说,安装一个 Python 应用,计算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量。如果某些老旧的模块与当前环境不兼容,可能会出现"在我的机器可以跑,其他机器很可能跑不了”的问题。...

2019-04-18 22:41:45 178

原创 test

2019-04-10 15:50:56 103

转载 偏差方差

0x02 偏差方差与射击敌人想象你开着一架黑鹰直升机,得到命令攻击地面上一只敌军部队,于是你连打数十梭子,结果有一下几种情况:1子弹基本上都打在队伍经过的一棵树上了,连在那棵树旁边等兔子的人都毫发无损,这就是方差小(子弹打得很集中),偏差大(跟目的相距甚远)。2子弹打在了树上,石头上,树旁边等兔子的人身上,花花草草也都中弹,但是敌军安然无恙,这就是方差大(子弹到处都是),偏差大(同1)。3...

2019-04-04 12:04:36 97

原创 协方差 特征值和特征向量

2019-02-20 22:58:31 3493

原创 Lee973 最接近原点的 K 个点

973. 最接近原点的 K 个点我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。(这里,平面上两点之间的距离是欧几里德距离。)你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。示例 1:输入:points = [[1,3],[-2,2]], K = 1输出:[[-2,2]]解释:(1, 3) 和原点之间的距离为 ...

2019-01-14 15:54:05 252

原创 高级_1) 数组中除本身之外的元素乘积 (Product of Array Except Self)

Product of Array Except Self给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度...

2019-01-11 22:19:24 102

原创 中级_5) 递增的三元子序列

给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。数学表达式如下:如果存在这样的 i, j, k, 且满足 0 ≤ i < j < k ≤ n-1,使得 arr[i] < arr[j] < arr[k] ,返回 true ; 否则返回 false 。说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1) 。示例 1:输入: [1,...

2019-01-09 23:03:26 96

原创 中级_4) 最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”...

2019-01-08 23:21:05 59

原创 中级_3) 无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所...

2019-01-07 21:37:49 73

原创 中级_3) 字符串“字谜分组

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。思想:map的key存储排好序的字符串,valu...

2019-01-06 22:56:57 262

原创 中级_2) 矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例 1:输入:[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2:输入:[[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[0,4,5,0],...

2019-01-05 22:46:40 115

原创 中级_1) 三数之和

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]public class ThreeS...

2019-01-04 22:46:22 98

原创 初级_9) 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。public class LongestCommonPrefi...

2019-01-03 20:48:27 88

原创 初级_8) 报数

报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1. 12. 113. 214. 12115. 1112211 被读作 “one 1” (“一个一”) , 即 11。11 被读作 “two 1s” (“两个一”), 即 21。21 被读作 “one 2”, “one 1” (“一个二” , “一个一...

2019-01-02 20:24:57 106

原创 IntelliJ Idea2017.2.1 到期激活方法总结

IntelliJ IDEA的在线注册码生成:http://idea.iteblog.com/ (看链接操作)新的License server地址为:http://idea.iteblog.com/key.php获取注册码地址: http://idea.lanyus.com/...

2019-01-02 19:30:48 2001

原创 初级_7)实现strStr()

实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle = “bba...

2019-01-01 16:25:50 187

原创 初级_6) 字符串转换整数 (atoi)

请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽...

2018-12-30 14:03:31 133

原创 初级_5) 验证回文字符串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: falsepublic class IsPalindrome { public boolean is...

2018-12-29 17:49:01 95

原创 初级_4) 有效的字母异位词

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?p...

2018-12-28 22:35:02 67

原创 初级_3) 字符串中的第一个唯一字符

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = “leetcode”返回 0.s = “loveleetcode”,返回 2.注意事项:您可以假定该字符串只包含小写字母。import java.util.LinkedHashMap;public class FirstUniqChar {//方法1:直接LinkedHashMap...

2018-12-27 20:49:35 86

原创 初级_2) 反转整数

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。class Solution {...

2018-12-26 18:28:34 78

原创 初级_1) 反转字符串

编写一个函数,其作用是将输入的字符串反转过来。示例 1:输入: “hello”输出: “olleh”示例 2:输入: “A man, a plan, a canal: Panama”输出: “amanaP :lanac a ,nalp a ,nam A”public class ReverseString { //1.字符串->字符数组,交换字符数组首尾元素 p...

2018-12-25 17:32:02 77

原创 matlab 常见函数总结

矩阵A=s:d:f 和A(k,:)MATLAB定义矩阵的一种方法是A=s:d:f,s表示起始值,d表示增量,f表示终点值,1:2:5即为1,1+2=3,3+2=5,不难理解吧,是MATLAB定义矩阵最常用的方法请问matlab中A(k,:) 中的冒号什么意思?A(k,:)冒号是取出第k行的数据,比如A = 1 2 3 4 5 6A(1,:)a...

2018-12-15 22:20:33 879

原创 char和varcha的区别

VARCHAR:存储可变长字符串,比定长类型更节省时间,但是需要使用1或2个额外字节记录字符串的长度。使用场景:字符串列的最大长度比平均长度大很多;列的更新很少,碎片问题不大。CHAR:定长的,根据需要采用空格进行填充,方便比较。使用场景:适合存储很短的字符串或长度都接近同一个长度,比如存储密码的MD5值。区别:对于经常变更的数据,CHAR比VARCHAR更好,因为定长的char类型...

2018-09-18 22:59:43 181

原创 etcd和ZooKeeper有什么区别

**etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。**etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性。Raft是一个来自Stanford的新的一致性算法,适用于分布式系统的日志复制,**Raft通过选举的方式来实现一致性,在Raft中,任何一个节点都可能成为Leader...

2018-09-16 22:44:55 6289

原创 判断字符串s中有多少s1

//判断字符串s中有多少s1,//s=aaa,s1=aa,则输出1,而不是2public static int countK2(String s, String s1) { if (s == null || s1 == null) { return 0; } int count = 0; int len =...

2018-09-14 10:39:05 254

转载 图解Java 垃圾回收机制

https://blog.csdn.net/justloveyou_/article/details/71216049那些内存需要回收?(对象是否可以被回收的两种经典算法: 引用计数法 和 可达性分析算法)什么时候回收? (堆的新生代、老年代、永久代的垃圾回收时机,MinorGC 和 FullGC)如何回收?(三种经典垃圾回收算法(标记清除算法、复制算法、标记整理算法)及分代收集算法 ...

2018-09-13 22:00:33 329

转载 Java集合类图

https://www.cnblogs.com/mengfanrong/p/5079533.htmlhttps://www.cnblogs.com/xiaoxi/p/6089984.html

2018-09-10 21:26:54 1292 2

原创 三个线程交替顺序打印ABC

题目描述建立三个线程A、B、C,A线程打印10次字母A,B线程打印10次字母B,C线程打印10次字母C,但是要求三个线程同时运行,并且实现交替打印,即按照ABCABCABC的顺序打印。5种方法使用synchronized, wait和notifyAll使用Lock->ReentrantLock 和 state标志使用Lock->ReentrantLock 和Con...

2018-09-10 21:01:38 10739 11

原创 多线程下 i++和++i 操作如何保证线程安全

volatile解决的是多线程间共享变量的可见性问题,而保证不了多线程间共享变量原子性问题。对于多线程的i++,++i,依然还是会存在多线程问题,volatile是无法解决的.如下:使用一个线程i++,另一个i–,最终得到的结果不为0。原因是i++和++i并非原子操作,我们通过javaP查看字节码,会发现void f1() { i++; } 的字节码‘如下: void ...

2018-09-10 10:38:12 7488 1

空空如也

空空如也

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

TA关注的人 TA的粉丝

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