- 博客(66)
- 收藏
- 关注
原创 信号量与管程
信号量与管程都是操作系统的并发编程机制,也是现在很多高级语言实现并发的一种底层原理。信号量(Semaphore)信号量机制是由大名鼎鼎的荷兰计算机科学家 Dijkstra 于1965 年提出的操作系统的并发编程模型中,信号量(Semaphore)与锁机制(Mutex)一样都是对底层硬件同步方法的高级抽象信号量的模型信号量模型的组成是这样的:两个成员变量:整型数 count:用于记录共享资源数量等待队列两个基本方法:P() 操作:将 count - 1,若 count <
2020-06-24 20:14:00
774
原创 Java中的等待-通知机制
为什么有等待-通知机制?首先,设想这样一种场景:一个线程的执行需要满足某些条件,当条件不满足时就通过一个循环不断尝试,直到条件满足。这个场景下存在一个明显的缺点,就是线程不断地尝试获取所需的条件,这个循环的过程会白白浪费CPU资源,降低系统性能。等待-通知机制是一种优化策略,其核心思想就是:当线程所需条件不满足时,就阻塞该线程,之后当条件满足时再通知线程,以此提高硬件资源的利用率Java 中的实现在 Java 中实现等待-通知机制,一种经典的做法是使用 synchronized + wait()
2020-06-20 16:41:49
533
原创 关于Java互斥锁
一切从一个例子开始:class SafeCalc { long value = 0L; long get() { return value; } synchronized void addOne() { for (int i = 0; i < 3; i++) { value += 1; } }}现在假设我们启动 5 个写线程执行 addOne(),启动 3 个读线
2020-06-17 18:35:47
3904
2
原创 Paxos算法笔记
这篇文章是记录本人学习Paxos算法的理解,本人才疏学浅,如果有错误欢迎指正!转载请标明出处!谢谢????什么是Paxos?Paxos是位于希腊的一个小岛????。Paxos算法是由分布式系统大神 Leslie Lamport 提出的一种基于消息传递并且高度容错的一致性算法。Paxos算法的命名由来,是因为Lamport最初是用一个发生在Paxos岛上的城邦议会故事阐述的,可惜并没有人能听懂他的故事...
2019-10-27 12:57:42
528
3
原创 分布式调度系统-任务调度
课程链接:阿里云大学_分布式系统开发-调度技术海量数据如何并发处理?这就是分布式任务调度所要解决的问题举个栗子:如何快速的做出大量的热狗?如果将每一个一个热狗按流程做的话,可见工作量会十分巨大而且效率低下MapReduce实例Google的传奇大神Jeff Dean借鉴函数式编程的思想,提出了MapReduce解决方案,其核心思想其实很简单:对任务按需求切分成多个子任务对...
2019-09-09 21:27:00
1013
原创 分布式调度系统-发展现状
课程链接:阿里云大学_分布式系统开发-调度技术分布式调度的主要作用像使用台式机一样使用云计算分布式调度能将成千上万台硬件的运算能力汇合起来,提供可靠的云计算服务分布式调度的两大任务任务调度在分布式系统中存在大量计算任务,这其中涉及了以下几个问题:任务如何切分?数据如何分割、运算?如何监控运算状态?资源调度资源调度属于业务供给方的问题如何平衡业务之间的资源分配?如...
2019-09-08 21:14:09
1284
原创 清华大学马昱春老师《组合数学》第二周作业题解
课程链接:《组合数学》马昱春副教授H1小于10000的含1的正整数有___个?分析:首先确定可选范围,小于10000的数,且要求正整数,所以从1~9999中选择(0非正非负)。那么“”含1“这个条件怎么处理呢?若是直接计算含1的数字会非常麻烦,所以我们不妨采用减法法则,即先计算出不含1的数的个数,再用整体减去这一部分就是答案了接下来计算1~9999中不含1的正整数:首先从一位数考...
2019-09-02 19:46:34
1520
原创 Redis主从复制
主从复制,读写分离对于数据库服务器的构建,为提高数据的安全性和服务的高效性,有一个很常用的概念叫做主从复制,读写分离主从复制: 将数据库中的数据保存至多个服务器中,并配置服务器之间的主从(master-slave)关系,所有的从机(slave)与主机(master)数据保持一致,主机监听从机的动态读写分离: 将读操作与写操作分离开,使用专门的服务器响应一种操作。通常以主服务器(master...
2019-08-09 00:07:18
136
原创 Redis持久化--AOF
Redis的数据持久化方式有 RDB 和 AOF 两种,这篇文章将会讲解 AOFAOF是什么AOF(Append Only File)以日志形式记录服务器收到的每一个写操作AOF怎么进行持久化使用AOF默认会在当前目录下生成一个 appendonly.aof 日志文件在恢复数据时,AOF会将appendonly.aof中记录下的所有写操作重新按顺序执行一遍以下是appendonly.a...
2019-08-06 16:02:38
296
原创 Redis持久化--RDB
Redis的数据持久化方式有 RDB 和 AOF 两种,这篇文章将会讲解 RDBRDB是什么RDB方式是在指定的时间间隔内将内存中的数据集写入磁盘。RDB怎么进行持久化如果使用RDB方式进行持久化,Redis会单独创建(fork)一个子进程来进行持久化,它会先将数据写入一个临时文件中,待持久化过程结束后,再用本次创建的临时文件替换上次创建的临时文件。注意:在整个过程中,主进程不进行任何 ...
2019-08-05 21:35:04
119
原创 一个关于JVM类加载过程的案例
通过谜题探索答案,是一个很好的学习过程☝️。首先,我们就从一个案例出发:public class Test { public static void main(String[] args) { Singleton singleton = Singleton.getInstance(); System.out.println("[main]num1: " +...
2019-07-14 16:50:37
190
原创 [爬虫]Python+Selenium 爬取京东商城,翻页功能实现
问题描述最近学习爬虫,爬京东页面做翻页功能时遇到了问题我的初始想法是这样的:这个是京东的转页模块修改页码输入的文本框,填入要跳转到页数点击“确定”按钮,实现跳转代码如下:def next_page(page_number): try: # 获取页码文本框 input = wait.until( EC.presenc...
2019-07-14 16:36:04
4394
3
原创 [LeetCode] 593. 有效的正方形
传送门题目描述给定二维空间中四点的坐标,返回四点是否可以构造一个正方形。一个点的坐标(x,y)由一个有两个整数的整数数组表示。示例:输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1] 输出: True注意: 1. 所有输入整数都在 [-10000,10000] 范围内。 2. 一个有效的正方形有四个等长的正长和四个...
2018-05-19 20:10:52
804
原创 [LeetCode] 594. 最长和谐子序列
题目传送题目描述和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度。示例 1:输入: [1,3,2,2,5,2,3,7] 输出: 5 原因: 最长的和谐数组是:[3,2,2,2,3]. 说明: 输入的数组长度最大不超过20,000.我的思路先对传入的数组排序(升序)遍历...
2018-05-07 22:33:12
1268
原创 [LeetCode] 542. 01 矩阵
题目传送问题描述给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。示例 1: 输入:0 0 0 0 1 0 0 0 0输出:0 0 0 0 1 0 0 0 0示例 2: 输入:0 0 0 0 1 0 1 1 1输出:0 0 0 0 1 0 1 2 1注意: 给定矩阵的元素...
2018-04-21 23:34:16
2825
原创 [LeetCode] 404. 左叶子之和
传送门题目描述计算给定二叉树的所有左叶子之和。示例: 3 / \ 9 20 / \ 15 7在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24我的想法我是利用递归解决这道题的,通过递归思想,我们可以划分子问题: sumOfLeftLeaves(root) = sumOfLeftLeaves(root.l...
2018-03-31 21:56:46
957
原创 [LeetCode] 94. 中序遍历二叉树
传送门题目描述给定一个二叉树,返回其中序遍历。例如: 给定二叉树 [1,null,2,3], 1 \ 2 / 3返回 [1,3,2].说明: 递归算法很简单,你可以通过迭代算法完成吗?我的想法题中说明了要求使用迭代法使用一个栈来存储二叉树节点,根据中序遍历的规则,我们可以推算出这样的规律: 1. 将当前非空节点...
2018-03-31 12:30:48
2127
原创 [LeetCode] 409. 最长回文串
题目传送问题描述给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。注意: 假设字符串的长度不会超过 1010。示例 1:输入: “abccccdd”输出: 7解释: 我们可以构造的最长的回文串是”dccaccd”, 它的长度是 7。我的想法这道...
2018-03-29 15:38:16
1573
1
原创 PAT(甲)1104. Sum of Number Segments (20)
原题链接:1104. Sum of Number Segments我的思路:这是一道简单题,但看题目我们可以直观的想到用 for 循环暴力求解#include<stdio.h>int main(){ int n; double sum = 0; scanf("%d", &n); double nums[n]; ...
2018-03-11 23:03:33
309
原创 PAT(甲)1003. Emergency(25)
原题连接:1003. Emergency我的思路:利用 DFS(深度优先搜索)从起点开始找路(同时记录路径长度和经过的各个节点)每找到一条可达路径,先判定这条路径的长度如果大于当前最短路则直接跳过如果等于当前最短路,则查看该路上可以集结几只队伍,如果队伍数大于当前最多队伍数,则更新,否则跳过如果小于当前最短路,则更新当前最短路,并更新当前最多队伍import j...
2018-03-10 16:55:23
327
原创 从主机 Windows 上无法远程访问 Linux 的 Tomcat 服务器解决方法
当在 Linux 上配置好 Tomcat 服务器后,如果从主机中无法访问到 Linux 中的 Tomcat 服务器时,需要做如下的检查:1. Tomcat 是否启动成功在控制台输入:ps -ef | grep tomcat命令含义:从当前所有进程中查找是否含有 tomcat 进程如果有内容显示,则说明 Tomcat 启动成功 否则,重新启动 Tomcat2. 检查...
2018-02-17 16:25:08
7072
5
原创 Maven项目中无法找到 xml文件或 properties文件等配置文件的解决方法
在初次使用 Maven 项目的时候总是会遇到一些比较奇异的问题 就比如说总是会报错:项目里的 **.xml 或 **.properties 配置文件无法找到 这时你去项目中的 classes 生成文件(target 或 out)中找,确实这些配置文件没有被编译 这是因为 Maven 通常会忽略掉标记为 Sources 的文件夹中的配置文件这是 Maven 项目的目录结构: 有两种解
2018-01-31 23:52:07
9727
1
原创 [LeetCode] 58.Length of Last Word
Given a string s consists of upper/lower-case alphabets and empty space characters ’ ‘, return the length of last word in the string.If the last word does not exist, return 0.给定一个字符串s由大/小写字母和空空格字符...
2018-01-30 16:11:19
345
原创 [LeetCode] 38.Count and Say
题目来自 LeetCodeThe count-and-say sequence is the sequence of integers with the first five terms as following:1112112111112211 is read off as “one 1” or 11. 11 is read off as “two 1s” or...
2018-01-29 23:56:23
329
原创 操作系统内存动态分区分配算法(Java实现)
一. 内存的作用内存是计算机的一个重要组成部分,它的主要作用在于配合 CPU 的高速运转,使得计算机的运行速度得到大大地提升 我们应该知道,计算机上的一切都是程序,我们使用计算机其实就是在运行计算机上的各种程序,而这些程序都存储在我们的硬盘中(外存),硬盘中的数据内容是几乎可以永久存储的但是 它的读取速度相较于 CPU 的处理速度是十分缓慢的 如果没有内存,CPU 在处理完一段程序后,要
2018-01-12 22:55:21
18766
4
转载 Java并发编程:volatile关键字解析
原文出处:http://www.cnblogs.com/dolphin0520/p/3920373.html 作者:海子volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用
2017-12-22 23:07:48
324
原创 Spring中的事务传播行为
在 Spring 中可以使用 @Transactional 注解,将一个方法标记为一个事务方法 事务方法具有事务的 ACID 四大特性其中 @Transactional 有一个属性 propagation 用来标记该事务的传播行为 Spring 支持的传播行为有这样几种: 默认情况是:REQUIRED接下来举例说明:/** * 购买一本书 * 事务传播行为: REQUIRED */
2017-12-05 16:27:37
535
原创 [LeetCode] 70.爬楼梯
如果爬楼梯可以一次爬 1 级或是一次爬 2 级 输入:楼梯的总级数 输出:一共可能有多少种爬法? 难度:简单例: 输入:2 输出:2 ① 1 + 1 ② 2输入:3 输出:3 ① 1 + 1 + 1 ② 2 + 1 ③ 1 + 2答案: 这道题可以使用动态规划的思想解决class Solution { static int[] results...
2017-11-28 22:05:22
806
原创 操作系统进程调度算法(Java 实现)
FCFS(First Come First Server,先来先服务)这是最简单,最基本的算法,它的思想非常简单,就是按照进程到来的时间顺序,逐个分配 CPU 资源 优点:简单,方便 缺点:效率低,资源利用率低/** * CPU 占用情况 * 1: 空闲 * 0: 正被占用 */ static int CPU = 1; /** * 等待队列长度 */ static
2017-11-25 21:48:42
17766
4
原创 IDEA手动配置JUnit
安装JUnit使用快捷键 ctrl + shift + s 或点击 File->Settings 点击 Plugins 查看插件 点击下方 Browse repositories… 查找插件 在搜索栏输入 JUnitGenerator V2.0,点击 install 安装 ,如果没有 install 按钮证明你已经安装过了,可以在之前的 Plugins 中查看 安装后,重启 IDEA导入 j
2017-11-17 19:05:40
3237
1
原创 AOP面向切编程及在Spring中的使用方法
AOP 简介AOP(Aspect-Oriented Programming, 面向切面编程): 是一种新的方法论, 是对传统的 OOP(Object-Oriented Programming, 面向对象编程)的补充AOP 的主要编程对象是切面(aspect)在应用 AOP 编程时, 仍然需要定义公共功能, 但可以明确的定义这个功能在哪里, 以什么方式应用, 并且不必修改受影响的类AOP 的好处:每
2017-11-17 17:17:35
628
原创 IDEA中Spring配置错误:class path resource [.xml] cannot be opened because it does not exist
如果在运行 Spring 项目时出现了类似于:class path resource [applicationContext.xml] cannot be opened because it does not exist这样的异常 意思就是没有找到你的 .xml 配置文件原因我可以肯定你一定用的是 ApplicationContext ctx = new ClassPathXmlApplicati
2017-10-29 16:14:06
115677
22
原创 路由器与交换机的区别与联系
相信有很多人在学习网络的过程中,都会对路由器与交换机的区别与联系感到疑惑不解,因为这两台设备的功能看起来似乎一样。然而,其实路由器与交换机大有不同,下面是我对此的一些理解,希望能够帮助到你!它们在哪里工作?根据 OSI模型的网络体系划分,自底向上,路由器 工作在第三层(网络层),而我们常说的交换机 工作在第二层(链路层)(目前有更加高级的三层交换机,四层交换机,甚至还有七层交换机) 它们怎么工作?
2017-10-21 19:10:49
90123
58
原创 String,StringBuffer,StringBuilder
String,StringBuffer,StringBuilder 这三者的区别是 Java 学习中的一个基础知识,也是在面试中经常会问到的一个知识点StringString 也许是 Java 中最常被用到的类了,关于它,有很多值得一提的地方首先,Java 中的 String 是一个 char 类型序列:char[] data = {'a', 'b', 'c'};// 等价于String str =
2017-10-14 23:20:00
496
原创 HTTP,HTTPS和HSTS详解
参考资料: 《从HTTP到HTTPS再到HSTS》作者:又拍云 《计算机网络:自顶向下方法》(第四版)作者:(美)James F.Kurose, Keith W.Ross wikipedia:HTTP,HTTPS,HSTS 《一个故事讲完https》微信公众号:码农翻身 作者:刘欣 《HTTPS科普扫盲贴》作者:程序猿小卡 《你所不知道的 HSTS》作者:小胡子哥
2017-09-23 22:22:13
3567
1
原创 TCP与UDP通信协议及Java实现
概述TCP (Transmission Control Protocol):传输控制协议 UDP(User Datagram Protocol):用户数据报协议TCP 与 UDP 都是 运输层(Transport Layer)上的因特网协议,运输层协议的功能就是为运行在不同主机上的应用进程之间提供 逻辑通信 ,使得运行不同进程的主机即使分隔于地球两侧,也能像是直接相连一样。 而具体做法是,它为来
2017-09-18 17:24:06
9234
原创 Class类文件结构概述
参考文献:周志明《深入理解Java虚拟机》第二版关于Class文件class 文件应该是所有 Java 程序员都必定知道的文件,因为我们的 Java 源代码经过 javac 编译以后就会得到这个 class 文件。但是,它虽然与 Java 关系密切可它并不仅仅属于 Java,因为它属于虚拟机,虚拟机能够执行的就是 class 文件。所以我们 Java 虚拟机,其实就根本不认识 Java。
2017-09-10 10:26:04
432
原创 JVM垃圾收集器
参考文献:周志明《深入理解Java虚拟机》第二版垃圾收集器就是 GC 具体的实现,不同厂商,不同版本,针对虚拟机不同的分区都有不一样垃圾收集器图. 基于JDK 1.7 update 14的 HotSpot虚拟机包含的收集器 Serial 收集器这个收集器是一个单线程收集器,在它进行收集工作时,必须暂停其他所有的工作线程,直到收集结束,这种工作方式又被称为“Stop the World” 它采用
2017-09-03 17:24:36
320
原创 JVM垃圾收集(GC)
因为 Java 具有自动垃圾回收机制,所以,垃圾收集(Garbage Collection,GC),是 Java 技术的核心之一,是每一个 Java 程序员必知必备的一项技术,为了深入掌握 Java 技术,我们必须学习 JVM 中的 GC 是如何实现的GC 中包含三个主要的问题:哪些内存需要回收?什么时候回收?如何回收?我们对这三个问题逐一讨论 哪些内存需要回收?首先我们应该清楚,在 Ja
2017-09-02 21:47:00
404
原创 ACID--事务四大特性
ACID,指的是在数据库事务正确执行的四个基本要素的缩写。 具体解释:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 任何一个数据库事物都 必须满足 ACID,只有这样才能保证在事务执行过程中的正确性接下来我们逐条解释:原子性(Atomicity)原子性其实非常好理解,我认为它指的就是一种完整性,就是说任何一个具备原
2017-08-26 00:13:45
8084
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人