<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[WhataNerd的博客]]></title><description><![CDATA[欢迎访问：https://danght.github.io]]></description><link>https://blog.csdn.net/baidu_32045201</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; baidu_32045201]]></copyright><item><title><![CDATA[信号量与管程]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/106950418</link><guid>https://blog.csdn.net/baidu_32045201/article/details/106950418</guid><author>baidu_32045201</author><pubDate>Wed, 24 Jun 2020 20:14:00 +0800</pubDate><description><![CDATA[信号量与管程都是操作系统的并发编程机制，也是现在很多高级语言实现并发的一种底层原理。
信号量（Semaphore）
信号量机制是由大名鼎鼎的荷兰计算机科学家 Dijkstra 于1965 年提出的
操作系统的并发编程模型中，信号量（Semaphore）与锁机制（Mutex）一样都是对底层硬件同步方法的高级抽象

信号量的模型
信号量模型的组成是这样的：

两个成员变量：

整型数 count：用于记录共享资源数量
等待队列


两个基本方法：

P() 操作：将 count - 1，若 count &lt;]]></description><category></category></item><item><title><![CDATA[Java中的等待-通知机制]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/106874304</link><guid>https://blog.csdn.net/baidu_32045201/article/details/106874304</guid><author>baidu_32045201</author><pubDate>Sat, 20 Jun 2020 16:41:49 +0800</pubDate><description><![CDATA[为什么有等待-通知机制？
首先，设想这样一种场景：一个线程的执行需要满足某些条件，当条件不满足时就通过一个循环不断尝试，直到条件满足。
这个场景下存在一个明显的缺点，就是线程不断地尝试获取所需的条件，这个循环的过程会白白浪费CPU资源，降低系统性能。
等待-通知机制是一种优化策略，其核心思想就是：当线程所需条件不满足时，就阻塞该线程，之后当条件满足时再通知线程，以此提高硬件资源的利用率
Java 中的实现
在 Java 中实现等待-通知机制，一种经典的做法是使用 synchronized + wait() ]]></description><category></category></item><item><title><![CDATA[关于Java互斥锁]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/106815962</link><guid>https://blog.csdn.net/baidu_32045201/article/details/106815962</guid><author>baidu_32045201</author><pubDate>Wed, 17 Jun 2020 18:35:47 +0800</pubDate><description><![CDATA[一切从一个例子开始：
class SafeCalc {
    long value = 0L;
    
    long get() {
        return value;
    }
    
    synchronized void addOne() {
        for (int i = 0; i &lt; 3; i++) {
            value += 1;
        }
    }
}

现在假设我们启动 5 个写线程执行 addOne()，启动 3 个读线]]></description><category></category></item><item><title><![CDATA[Paxos算法笔记]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/102765609</link><guid>https://blog.csdn.net/baidu_32045201/article/details/102765609</guid><author>baidu_32045201</author><pubDate>Sun, 27 Oct 2019 12:57:42 +0800</pubDate><description><![CDATA[这篇文章是记录本人学习Paxos算法的理解，本人才疏学浅，如果有错误欢迎指正！转载请标明出处！谢谢????

什么是Paxos?
Paxos是位于希腊的一个小岛????。
Paxos算法是由分布式系统大神 Leslie Lamport 提出的一种基于消息传递并且高度容错的一致性算法。Paxos算法的命名由来，是因为Lamport最初是用一个发生在Paxos岛上的城邦议会故事阐述的，可惜并没有人能听懂他的故事...]]></description><category></category></item><item><title><![CDATA[分布式调度系统-任务调度]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/100675847</link><guid>https://blog.csdn.net/baidu_32045201/article/details/100675847</guid><author>baidu_32045201</author><pubDate>Mon, 09 Sep 2019 21:27:00 +0800</pubDate><description><![CDATA[课程链接：阿里云大学_分布式系统开发-调度技术

海量数据如何并发处理？
这就是分布式任务调度所要解决的问题
举个栗子：
如何快速的做出大量的热狗？

如果将每一个一个热狗按流程做的话，可见工作量会十分巨大而且效率低下
MapReduce实例
Google的传奇大神Jeff Dean借鉴函数式编程的思想，提出了MapReduce解决方案，其核心思想其实很简单：

对任务按需求切分成多个子任务
对...]]></description><category></category></item><item><title><![CDATA[分布式调度系统-发展现状]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/100638795</link><guid>https://blog.csdn.net/baidu_32045201/article/details/100638795</guid><author>baidu_32045201</author><pubDate>Sun, 08 Sep 2019 21:14:09 +0800</pubDate><description><![CDATA[课程链接：阿里云大学_分布式系统开发-调度技术

分布式调度的主要作用
像使用台式机一样使用云计算
分布式调度能将成千上万台硬件的运算能力汇合起来，提供可靠的云计算服务
分布式调度的两大任务
任务调度
在分布式系统中存在大量计算任务，这其中涉及了以下几个问题：

任务如何切分？
数据如何分割、运算？
如何监控运算状态？

资源调度
资源调度属于业务供给方的问题

如何平衡业务之间的资源分配？
如...]]></description><category></category></item><item><title><![CDATA[清华大学马昱春老师《组合数学》第二周作业题解]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/100362916</link><guid>https://blog.csdn.net/baidu_32045201/article/details/100362916</guid><author>baidu_32045201</author><pubDate>Mon, 02 Sep 2019 19:46:34 +0800</pubDate><description><![CDATA[课程链接：《组合数学》马昱春副教授

H1
小于10000的含1的正整数有___个?
分析：
首先确定可选范围，小于10000的数，且要求正整数，所以从1~9999中选择（0非正非负）。
那么“”含1“这个条件怎么处理呢？若是直接计算含1的数字会非常麻烦，所以我们不妨采用减法法则，即先计算出不含1的数的个数，再用整体减去这一部分就是答案了
接下来计算1~9999中不含1的正整数：
首先从一位数考...]]></description><category></category></item><item><title><![CDATA[Redis主从复制]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/98900210</link><guid>https://blog.csdn.net/baidu_32045201/article/details/98900210</guid><author>baidu_32045201</author><pubDate>Fri, 09 Aug 2019 00:07:18 +0800</pubDate><description><![CDATA[主从复制，读写分离
对于数据库服务器的构建，为提高数据的安全性和服务的高效性，有一个很常用的概念叫做主从复制，读写分离

主从复制： 将数据库中的数据保存至多个服务器中，并配置服务器之间的主从（master-slave）关系，所有的从机（slave）与主机（master）数据保持一致，主机监听从机的动态
读写分离： 将读操作与写操作分离开，使用专门的服务器响应一种操作。通常以主服务器（master...]]></description><category></category></item><item><title><![CDATA[Redis持久化--AOF]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/98626258</link><guid>https://blog.csdn.net/baidu_32045201/article/details/98626258</guid><author>baidu_32045201</author><pubDate>Tue, 06 Aug 2019 16:02:38 +0800</pubDate><description><![CDATA[Redis的数据持久化方式有 RDB 和 AOF 两种，这篇文章将会讲解 AOF
AOF是什么
AOF（Append Only File）以日志形式记录服务器收到的每一个写操作
AOF怎么进行持久化
使用AOF默认会在当前目录下生成一个 appendonly.aof 日志文件
在恢复数据时，AOF会将appendonly.aof中记录下的所有写操作重新按顺序执行一遍
以下是appendonly.a...]]></description><category></category></item><item><title><![CDATA[Redis持久化--RDB]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/98522793</link><guid>https://blog.csdn.net/baidu_32045201/article/details/98522793</guid><author>baidu_32045201</author><pubDate>Mon, 05 Aug 2019 21:35:04 +0800</pubDate><description><![CDATA[Redis的数据持久化方式有 RDB 和 AOF 两种，这篇文章将会讲解 RDB
RDB是什么
RDB方式是在指定的时间间隔内将内存中的数据集写入磁盘。
RDB怎么进行持久化
如果使用RDB方式进行持久化，Redis会单独创建（fork）一个子进程来进行持久化，它会先将数据写入一个临时文件中，待持久化过程结束后，再用本次创建的临时文件替换上次创建的临时文件。
注意：在整个过程中，主进程不进行任何 ...]]></description><category></category></item><item><title><![CDATA[一个关于JVM类加载过程的案例]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/95897762</link><guid>https://blog.csdn.net/baidu_32045201/article/details/95897762</guid><author>baidu_32045201</author><pubDate>Sun, 14 Jul 2019 16:50:37 +0800</pubDate><description><![CDATA[通过谜题探索答案，是一个很好的学习过程☝️。首先，我们就从一个案例出发：
public class Test {
	public static void main(String[] args) {
        Singleton singleton = Singleton.getInstance();
        
		System.out.println("[main]num1: " +...]]></description><category></category></item><item><title><![CDATA[[爬虫]Python+Selenium 爬取京东商城，翻页功能实现]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/86481417</link><guid>https://blog.csdn.net/baidu_32045201/article/details/86481417</guid><author>baidu_32045201</author><pubDate>Sun, 14 Jul 2019 16:36:04 +0800</pubDate><description><![CDATA[问题描述
最近学习爬虫，爬京东页面做翻页功能时遇到了问题
我的初始想法是这样的：
这个是京东的转页模块


修改页码输入的文本框，填入要跳转到页数
点击“确定”按钮，实现跳转

代码如下：
def next_page(page_number):
    try:
        # 获取页码文本框
        input = wait.until(
            EC.presenc...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 593. 有效的正方形]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/80377448</link><guid>https://blog.csdn.net/baidu_32045201/article/details/80377448</guid><author>baidu_32045201</author><pubDate>Sat, 19 May 2018 20:10:52 +0800</pubDate><description><![CDATA[传送门



题目描述

给定二维空间中四点的坐标，返回四点是否可以构造一个正方形。

一个点的坐标（x，y）由一个有两个整数的整数数组表示。

示例:

输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1] 
输出: True

注意: 
1. 所有输入整数都在 [-10000，10000] 范围内。 
2. 一个有效的正方形有四个等长的正长和四个...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 594. 最长和谐子序列]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/80232795</link><guid>https://blog.csdn.net/baidu_32045201/article/details/80232795</guid><author>baidu_32045201</author><pubDate>Mon, 07 May 2018 22:33:12 +0800</pubDate><description><![CDATA[题目传送



题目描述

和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。

现在，给定一个整数数组，你需要在所有可能的子序列中找到最长的和谐子序列的长度。

示例 1:

输入: [1,3,2,2,5,2,3,7] 
输出: 5 
原因: 最长的和谐数组是：[3,2,2,2,3]. 
说明: 输入的数组长度最大不超过20,000.

我的思路


先对传入的数组排序（升序）
遍历...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 542. 01 矩阵]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/80035016</link><guid>https://blog.csdn.net/baidu_32045201/article/details/80035016</guid><author>baidu_32045201</author><pubDate>Sat, 21 Apr 2018 23:34:16 +0800</pubDate><description><![CDATA[题目传送



问题描述

给定一个由 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

注意: 
给定矩阵的元素...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 404. 左叶子之和]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/79773715</link><guid>https://blog.csdn.net/baidu_32045201/article/details/79773715</guid><author>baidu_32045201</author><pubDate>Sat, 31 Mar 2018 21:56:46 +0800</pubDate><description><![CDATA[传送门



题目描述

计算给定二叉树的所有左叶子之和。

示例：



    3
   / \
  9  20
    /  \
   15   7

在这个二叉树中，有两个左叶子，分别是 9 和 15，所以返回 24



我的想法

我是利用递归解决这道题的，通过递归思想，我们可以划分子问题： 
sumOfLeftLeaves(root) = sumOfLeftLeaves(root.l...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 94. 中序遍历二叉树]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/79768083</link><guid>https://blog.csdn.net/baidu_32045201/article/details/79768083</guid><author>baidu_32045201</author><pubDate>Sat, 31 Mar 2018 12:30:48 +0800</pubDate><description><![CDATA[传送门



题目描述

给定一个二叉树，返回其中序遍历。

例如： 
给定二叉树 [1,null,2,3],



   1
    \
     2
    /
   3

返回 [1,3,2].

说明: 递归算法很简单，你可以通过迭代算法完成吗？



我的想法

题中说明了要求使用迭代法

使用一个栈来存储二叉树节点，根据中序遍历的规则，我们可以推算出这样的规律： 
1. 将当前非空节点...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 409. 最长回文串]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/79743753</link><guid>https://blog.csdn.net/baidu_32045201/article/details/79743753</guid><author>baidu_32045201</author><pubDate>Thu, 29 Mar 2018 15:38:16 +0800</pubDate><description><![CDATA[题目传送



问题描述

给定一个包含大写字母和小写字母的字符串，找到通过这些字母构造成的最长的回文串。

在构造过程中，请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。

注意: 
假设字符串的长度不会超过 1010。

示例 1:

输入: 
“abccccdd”

输出: 
7

解释: 
我们可以构造的最长的回文串是”dccaccd”, 它的长度是 7。



我的想法

这道...]]></description><category></category></item><item><title><![CDATA[PAT（甲）1104. Sum of Number Segments (20)]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/79521632</link><guid>https://blog.csdn.net/baidu_32045201/article/details/79521632</guid><author>baidu_32045201</author><pubDate>Sun, 11 Mar 2018 23:03:33 +0800</pubDate><description><![CDATA[原题链接：

1104. Sum of Number Segments



我的思路：

这是一道简单题，但看题目我们可以直观的想到用 for 循环暴力求解



#include&amp;lt;stdio.h&amp;gt;

int main(){
    int n;
    double sum = 0;
    scanf(&quot;%d&quot;, &amp;amp;n);
    double nums[n];
    ...]]></description><category></category></item><item><title><![CDATA[PAT（甲）1003. Emergency（25）]]></title><link>https://blog.csdn.net/baidu_32045201/article/details/79509394</link><guid>https://blog.csdn.net/baidu_32045201/article/details/79509394</guid><author>baidu_32045201</author><pubDate>Sat, 10 Mar 2018 16:55:23 +0800</pubDate><description><![CDATA[原题连接：

1003. Emergency



我的思路:


利用 DFS（深度优先搜索）从起点开始找路（同时记录路径长度和经过的各个节点）
每找到一条可达路径，先判定这条路径的长度
如果大于当前最短路则直接跳过
如果等于当前最短路，则查看该路上可以集结几只队伍，如果队伍数大于当前最多队伍数，则更新，否则跳过
如果小于当前最短路，则更新当前最短路，并更新当前最多队伍




import j...]]></description><category></category></item></channel></rss>