自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Mutex 四大易错场景

Mutex 四大易错场景1. Lock / Unlock 没有成对出现func foo(){ var mu sync.Mutex defer mu.Unlock() fmt.Println("hello World!")}2. Copy 已经使用的MutexMutex 是一个有状态的变量,复制了一个已经加锁的变量的话, 新的变量其实已经加锁了。package mainimport ( "fmt" "sync")type Counter struct { sync.M

2020-12-23 17:24:02 480

原创 Mutex 的使用

Mutex 的使用1. 互斥锁的实现机制1.1 临界区为了避免并发访问导致的意外,被保护起来的程序叫做临界区。1.2 互斥锁保证临界区只能同时被一个线程持有。1.3 互斥锁的原理临界区被一个线程持有的时候,其他想进入临界区的线程会返回失败,或者等待。直到持有的线程退出临界区。1.4 同步元语的使用场景共享资源。并发地读写共享资源。任务编排。互相等待或有依赖的线程。消息传递。不同线程之间传递消息。2. Mutex 的基本使用方法2.1 示例代码package main

2020-12-23 17:18:14 711

原创 如何统计数据库的数据数量

如何统计数据库的数据数量1. count(*)在统计一个表行数的时候,我们一般会使用 select count(*) from t。那么count(*) 是如何实现的呢?1.1 MyISAM在MyISAM引擎中,会把表的总行数存在磁盘上,需要的时候,直接返回即可。但是如果是加上了where 条件,就会逐行扫描,计算行数。1.2 InnoDB在InnnoDB中,需要把数据一行行的读出来,累计计数。1.3 为什么InnoDB 不跟MyISAM一样把数据存起来?因为InnoDB支持事务,由于MVC

2020-11-30 08:26:17 16206

原创 你的MySQL会抖动吗

你的MySQL会抖动吗1. 什么是MySQL 抖动一条SQL语句正常执行的时候特别快,有时候会变得特别慢。但是这种场景不是很常见。2. MySQL 为什么会抖动2.1 脏页内存数据页跟磁盘数据页内容不一致的时候,我们称这个内存为脏页。2.2 干净页内存数据写入到磁盘后,内存和磁盘上的数据页的内容一致,称为干净页。2.3 对于抖动的解释执行较快的更新操作,其实是在写内存,MySQL抖动的瞬间,是在刷脏页,即把脏页的数据写入磁盘(该过程也叫flush)。2.4 什么时候会触发flush操作

2020-11-30 08:23:11 127

原创 谈谈你对Exception 和 Error的理解

谈谈你对Exception 和 Error的理解1. 审题此题面试官主要想考察你对Java异常处理机制的理解,答题的思路可以从以下几个方面切入Exception 和 Error的共性。Exception 和 Error的差异。针对 Exception 详细谈谈。针对 Error 详细谈谈。2. 面试现场2.1. Exception 和 Error 的共性Exception 和 Error 都继承了Throwable类。Throwable类的实例才能被程序处理(throw catch)。

2020-11-30 08:22:02 160

原创 MySQL 百问百答 之 事务隔离

MySQL 百问百答 之 事务隔离1. MySQL 中的视图view 查询语句定义的虚拟表,在调用的时候执行查询语句并生成语句。InnoDB实现MVCC 用的一致性读视图。2. 快照在MVCC里是怎么工作的2.1 什么是快照在可重复读隔离级别下,事务在启动的时候就拍了快照,这个快照基于整个库。2.2 快照如何实现InnoDB中每个事务有一个唯一的事务ID,transaction id,在事务开始的时候申请,严格递增。每行数据有多个版本,事务更新数据的时候,会生成新版本,并把事

2020-10-24 15:42:08 85

原创 如何减少行锁对性能的影响

如何减少行锁对性能的影响1. 什么是行锁行锁是针对数据表中的行记录进行加锁。2. 两阶段锁InnoDB中会在需要的时候加上行锁,不是使用完立即释放,而是等待事务结束才释放,这就是两阶段锁。3. 死锁并发系统中,多个线程有循环资源依赖,导致进入无限等待状态,就是死锁。3.1 死锁的处理策略超时释放。设置参数 innodb_lock_wait_timeout死锁检测,发现死锁后,主动回滚死锁链条中的一个事务。讲innodb_deadlock_detect 设置为on4. 如何解决热点行更

2020-10-24 15:38:20 345

原创 事务中的当前读

事务中的当前读1. 当前读更新数据都是先读后写,读的时候只能读当前的值,成为当前读。2. 更新中的当前读事务B 的事务ID 为101, 事务C的事务ID为102行数据x 在版本90的时候为(1,1)((主键Id,k))。2.1 事务B 执行 get k 的时候的值应该为多少应该为 (1,3)。原因在于:事务B更新k 的时候不能在版本90上更新,而应该在行数据x的当前版本上更新,否则事务C对于行数据x的更新就会丢失。事务B执行更新操作的时候,当前拿到的行数据x的值是(1,2),版

2020-10-24 15:36:51 931

原创 唯一索引,普通索引如何抉择

唯一索引,普通索引如何抉择1. 什么是唯一索引UNIQUE 唯一索引,不允许重复。2. 什么是普通索引INDEX 普通索引,允许重复。3. 数据库查询过程中普通索引和唯一索引的区别比如 select id from T where k=53.1 在k上建立普通索引在查找的过程中,找到第一个满足 k=5的记录后,需要查询下一个记录,知道遇到第一个不满足k=5的记录。3.2 在k上建立唯一索引唯一索引表示索引是唯一的,因此找到第一个满足k=5的记录后,就停止查找。3.3 对比普通索引和

2020-10-24 15:33:20 236

原创 索引 2

索引1. 回表回到主键索引树搜索的过程,称为回表。2. 什么时候会回表要查询的数据,在非主键索引中不包含时,需要回到主键索引,查询数据。3. 什么是覆盖索引要查询的数据,索引已经覆盖了该数据,不需要回到主键索引。例如,select ID from T where k between 3 and 5. 表T在主键ID以及k上有索引。上述的查询在k索引中能获取到主键ID,不需要回表。4. 什么时候需要使用联合索引如果有一个高频的需求,需要某两列的信息,比如 根据身份证号查询姓名,此时使用(身

2020-10-12 08:29:39 138

原创 【LeetCode】474. 一和零 (动态规划)

1. 问题描述在计算机界中,我们总是追求用有限的资源获取最大的收益。现在,假设你分别支配着 m 个 0 和 n 个 1。另外,还有一个仅包含 0 和 1 字符串的数组。你的任务是使用给定的 m 个 0 和 n 个 1 ,找到能拼出存在于数组中的字符串的最大数量。每个 0 和 1 至多被使用一次。示例 1:输入: strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3输出: 4解释: 总共 4 个字符串可以通过 5 个 0 和 3 个 1

2020-10-11 16:35:38 138

原创 数据库索引

数据库索引索引就像书的目录一样,为了提高查询的效率。1. 常见的索引模型1.1 哈希表哈希表用k-v存储数据,输入key就可以找到value。哈希冲突的常用解决方案就是链表。哈希表适用于只有等值查询的场景,即只根据key相等查询。1.2 有序数组有序数组适用于静态存储引擎。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7WBq1Sgw-1602400808466)(media/16023985161194/16023991997174.jpg)]1.3 N

2020-10-11 15:21:05 101

原创 事务隔离

事务隔离1. 什么是事务事务要保证一组数据库操作,要么全成功,要么全失败。MySQL MyISAM引擎不支持事务,InnoDB支持。2. 事务的特性A Atomicity 原子性C Consistency 一致性I Isolation 隔离性D Durability 持久性3. 多个事务同时执行的问题脏读不可重复读幻读4. 隔离级别隔离的越严实,效率越低,因此要找一个平衡点。SQL的隔离级别有:读未提交 一个事务没有提交,它所做的变更就能被别的事务看到。读提交

2020-10-11 15:19:55 435

原创 2. SQL 更新语句如何执行

1. 重要的日志模块 redo logWAL,Write-Ahead Logging, 先写日志,再写磁盘。具体的话,当有一条记录要更新的时候,InnoDB引擎会先把记录写到redo log 里面,并更新内存。同时在系统空闲的时候,将这个操作记录更新到磁盘里。有了redo log ,InnoDB 可以保证数据库发生异常重启,之前提交的记录都不丢失,这个能力称为crash-safe。redolog 是InnoDB引擎的特有日志。2. 重要的日志模块 binlogServer层也有自己的日志,binl

2020-10-08 14:57:17 204 1

原创 1. SQL 查询语句如何执行

1. MySQL 的基本架构图MySQL 可以分为Server曾和存储引擎层两部分:Server 层包括连接器、查询缓存、分析器、优化器、执行器等,内置函数,所有跨存储引擎的功能(存储过程,触发器,视图)存储引擎层负责数据的存储和提取,结构模式是插件式,支持InnoDB,MyISAM,Memory。2. MySQL各个部分2.1 连接器连接器负责客户跟客户端建立连接,获取权限,维持和管理连接。2.2 查询缓存之前的查询语句及其结果可能会以key-value的形式缓存在内存中。缓存弊

2020-10-08 14:24:15 175 1

原创 【LeetCode数组】15. 3Sum

1. 审题such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.Note:The solution set must not contain duplicate triplets.Example:Given array nums = [-1, 0, 1, 2, ...

2019-11-30 21:02:23 65

原创 【LeetCode数组】70. Climbing Stairs

1. 审题You are climbing a stair case. It takes n steps to reach to the top.Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?Note: Given n will be a posi...

2019-11-30 19:43:54 87

原创 【LeetCode数组】11. Container With Most Water

1.审题Given n non-negative integers a1, a2, …, an , where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoi...

2019-11-30 19:34:52 77

原创 【LeetCode数组】 283 Move Zeros

1. 刷题套路刷题遵循以下步骤(参考覃超在极客时间在算法训练营中的讲解):读题,审题,看看有没有思路。尝试从以下几个角度出发进行思考:暴力解法尝试优化没有思路的话,跳转discuss,阅读题解参照discuss思路,尝试自己写出代码在白纸上写出代码跳转discuss,翻阅其他人的解法,提供多种思路。2. 刷题感悟计算机程序的运行无非 if else 分支跳转,循环运行...

2019-11-30 19:15:15 162

原创 Python 协程

1. 怎么用1.1 同步代码import time def crawl_page(url): print('crawling {}'.format(url)) sleep_time = int(url.split('_')[-1]) time.sleep(sleep_time) print('OK {}'.format(url)) def main(u...

2019-11-30 18:51:51 83

原创 CAS

CAS

2019-11-14 10:10:58 127

原创 ThreadLocal原理

ThreadLocal原理

2019-11-14 10:07:52 121

原创 synchronized 原理

synchronized 原理

2019-11-14 10:07:34 150

原创 【Java并发编程】锁

2. Java 中的锁2.1 Lock 接口锁能防止多个线程同时操作共享变量。Java刚开始使用synchronized关键字实现锁功能。Lock 接口扩展了锁的功能,增加了中断、超时放弃的支持。2.1.1 使用模式Lock lock = new ReentrantLock();lock.lock();try { //对共享变量进行操作}finally { ...

2019-10-18 10:31:34 85

原创 【目标设定】Java 并发编程

1. 目标是什么掌握Java并发编程的使用掌握Java并发编程的原理阅读《Java并发编程的艺术》阅读《Java并发编程实战》输出 学习笔记5 篇及以上2. 完成目标有什么好处习得Java并发编程技能补充技能树的技能点3. 计划多长时间完成目标2019/10/15 - 2019/11/154. 完成目标的途中有哪些障碍没有时间学习被其他的学习目标吸引5....

2019-10-15 09:31:53 66

原创 【目标设定】1. 目标设定模板

1. 目标是什么2. 完成目标有什么好处3. 计划多长时间完成目标4. 完成目标的途中有哪些障碍5. 如何监控目标6. 何时何地完成目标

2019-10-11 09:32:58 836

原创 【Java 并发编程实战】构建自定义同步工具

1. 管理状态依赖可阻塞的状态依赖操作。void blockingAction() throws InterruptedException() { acquire lock on object state while (precondition does not hold) { release lock wait until precondition mig...

2019-09-29 13:11:26 103

原创 【Java 并发编程实战】Semaphore

1. 编程模型2. 示例package com.hp.learn.concurrency.lock.semaphore;public class Shared { static int count = 0;}package com.hp.learn.concurrency.lock.semaphore;import lombok.extern.slf4j.Slf4j;...

2019-09-23 11:18:51 132

原创 【Java并发编程】ReentrantLock

1. 编程模型 public void some_method() { reentrantlock.lock(); try { //Do some work } catch(Exception e) { e.printStackTrace(); } finally { reentrantlock.unlock(); ...

2019-09-23 10:16:05 97

原创 【Java并发编程实战】Fork-Join

1. Fibonaccipublic class Fibonacci extends RecursiveTask<Integer> { int n; public Fibonacci(int n) { this.n = n; } @Override protected Integer compute() { ...

2019-09-20 10:00:16 118

原创 01 准备你的开发环境

准备你的开发环境1. 下载AnacondaAnaconda 是一个免费开源的Python和R语言的发行版本,简化了包管理和部署,而且支持多个Python环境的隔离。强烈安利,下载地址为Anaconda。推荐下载Python3.7 版本,毕竟Python2 20年久不再维护了哈。安装教程参见Anaconda安装教程。2. 创建你的Python环境$ conda create -n py3 p...

2019-09-01 11:19:21 175

原创 如何学习一门技术

之前看了刘峰的程序员成长路径提到的如何学习框架。里面提到了一个很重要的理念,对框架的学习进行渐进式的分解。如上图所示:学习框架的步骤呈现金字塔:第一步是Tutorial,第二步是Spec技术规范,第三步API Reference,第四步源代码。下来,我们以Spark的学习为例,按照上面的金字塔模型对其进行分解。在开始spark编程之前,首先要对Turtorial进行通读,具体指的是官网上的P...

2019-08-31 18:18:09 315

原创 【大数据基础】HBase

HBase1. 概念1.1 数据模型表由行和列组成。表的单元格是行和列坐标的交集,他们有版本号。版本号是自动分配的时间戳。表的行键,表的主键,对表中的行进行排序。默认情况下,以字节为序,所有的表都通过主键进行访问。每行的列被分组,形成列族。所有的列族成员有相同的前缀。temperature:air 和 temperature:dew_point 都是temperature列族的成员。表的...

2019-07-19 14:22:02 154

原创 【大数据基础】Datanode

Datanode 的实现1. 数据块存储1.1 数据节点的磁盘目录文件结构${dfs.data.dir} 数据目录blocksBeingWritten 正在写的数据块,由客户端发起current 已经写入的数据块detach 配合升级的临时路径tmp 数据块复制引发的,保存正在写的数据块${dfs.data.dir}/currentHDFS数据块met...

2019-07-18 15:13:30 238

原创 【大数据基础】HDFS

1. HDFS1.1 特性支持超大文件检测和快速应对硬件故障流式数据访问简化的一致性模型低延迟数据访问大量潇的文件多用户写入、修改文件1.2 体系结构namenode: 分布式文件系统中的管理者,负责管理文件系统命名空间,集群配置和数据块复制。datanode: 文件存储的基本单元,以数据块的形式保存HDFS中文件的内容和数据块的数据校验信息客户端和namenode...

2019-07-16 18:22:20 120

翻译 Go 语言从入门到精通

Go 语言从入门到精通Go 语言是一门开源语言,能够轻松的构建简单,可靠,高效的软件。—— Golang在很多语言中,解决给定的问题通常有多种方式。工程师需要花费大量的时间思考什么才是解决问题的最优解法。而在Golang中,问题的解法通常只有一种。这一特性大大节约了工程师的时间,而且使得维护大型代码库变得更容易。在Golang中没有maps和filter这样高消耗的特性。语言的特性...

2019-07-16 17:11:00 1288

原创 【大数据基础】1. Dataset

1. 简介Dataset 是强类型的objects的集合,能够使用函数式和关系式并行的操作。Dataset还有一个名为DataFrame的无类型视图,DataFrame是Row的集合。Dataset中的操作分为两种:transformation 和 action。transformation 是用于产生新的Dataset,action 触发计算并返回结果。Dataset是懒加载的,只用act...

2019-07-11 13:19:25 1043

原创 【计算机视觉】2. Filters and Edge Detection

1. Filters1.1 Box Filterh[m,n]=∑g[k,l]f[m+k,n+l]h[m,n] = \sum g[k,l]f[m+k,n+l]h[m,n]=∑g[k,l]f[m+k,n+l]1.2 Conv 2Dh[m,n]=∑g[k,l]f[m−k.n−l]h[m,n] = \sum g[k,l]f[m-k.n-l]h[m,n]=∑g[k,l]f[m−k.n−l]1.3 ...

2019-07-06 15:08:32 197

原创 【计算机视觉】1.图像处理基础

1. K-means1.1 StepsPick a number (k) of cluster centersAssign every gene to its nearest cluster centerMove each cluster center to the mean of its assigned genesRepeat 2-3 until convergence1.2 ...

2019-07-06 12:36:34 172

翻译 【Spark】Spark集群模式

1. 组件Spark applications 是在运行在集群上一系列独立的进程集合,由SparkContext进行调度。SparkContext 能够连接以下几种集群管理:standlone cluster manafer,Mesos,Yarn。这些集群管理负责资源的分配。一旦SparkContex连接上集群管理,Spark要求集群中的节点分配executors,executors 是...

2019-06-03 10:38:48 183

空空如也

空空如也

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

TA关注的人

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