自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

敢于挑战我可以的博客

与大家一起相互学习、相互交流、共同成长

  • 博客(119)
  • 资源 (12)
  • 收藏
  • 关注

原创 《计算机校招之路》1.0.0 震撼发布

笔者在准备实习的过程中从开源的社区学到了很多东西,比如知道了很多大佬的博客,构建了自己的知识库。因此想把这些知识沉淀下来,回馈社区。一方面不仅可以加深自己对这些知识的理解,另一方面也可以和其他小伙伴一起交流学习、共同进步。...............

2022-08-12 20:59:54 224

原创 Computer Cookbook - School Recruitment

为什么会写这个开源书笔者是今年三月份开始准备实习的,在准备的过程中从开源的社区学到了很多东西,比如知道了很多大佬的博客(Halfrost’s Field | 冰霜之地),构建了自己的知识库(Grayson’s Notebook)。因此想把这些知识沉淀下来,回馈社区,一方面不仅可以加深自己对这些知识的理解,另一方面也可以和其他小伙伴一起交流学习、共同进步。什么是Cookbook“直译的话就是烹饪书,教你各种食谱美食的书。经常看O’Reilly技术书的同学对这个名词...

2021-08-11 22:05:49 205

原创 Deepin Knowledge

⭐️ 为什么要建这个仓库天道酬勤,厚积薄发。知识是不断积累的,有时我们可能经过一番努力,把一个知识点给弄明白了,但是中间可能很长时间不用,就慢慢淡忘了,当我们在某一天在需要用到这个知识时,可能有需要重新查资料去学习,这无疑是在浪费时间。如果我们把弄明白的知识按照自己的思路梳理出来,并将其整理成文档的形式,这样当我们再次需要用到这个知识时,就可以直接查看相应的文档,此时如果有新的想法或者当时理解不正确的地方,我们可以对这个知识进行更新,这样循环迭代,我们对这个只是的理解就会越来...

2021-06-13 12:19:31 1338 3

原创 北航微信打卡自动提醒程序

一、项目背景由于疫情原因,北航同学每天需要在晚上8点前打卡,以供学校及时了解学生的出行情况及身体体温信息。由于我们是非全同学,因此大家忙于工作,因此每天会有很多同学不能按时打卡,而如果让导员根据未打卡同学的截图信息来在微信群里面一个一个@的话,会很耽误导员的学习,因此开发了一个微信打卡自动提醒程序,以便尽可能减轻导员的负担,为导员提供更多的时间来学习。二、项目概述项目主要分为两大块:自动@未打卡的学生(main.py):当识别到导员私聊发送的未打卡学生的图片时,会调用百度的图片识别程序,解析

2021-03-19 21:25:10 710

原创 线程的状态有哪些,各自的使用场景是什么?

新状态:线程被创建出来,但是还没有调用start()方法。可运行状态:线程有资格运行,但调度程序还没有把它选定为运行线程时所处的状态,此时正在等待操作系统分配资源、等待IO;连接,当satrt()方法调用时,线程首先进入可运行状态,在线程运行之后或者从阻塞、等待、睡眠状态回来后,也返回到可运行状态。Running(运行状态):线程调度程序从可运行池中选择一个线程作为当前线程时线程所处的状态。等待/阻塞/睡眠状态:这是线程有资格运行时它所处的状态,实际上这三个状态组合为一种,其共同点是线程仍旧是获得,.

2020-06-26 18:02:12 442

原创 多个线程间如何共享数据?

如果每个县城执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据。将共享数据封装成另一个对象,然后将这个对象逐一传递给各个Runnable对象,每个线程对共享数据的操作方法也分配到那个对象身上,这样容易实现针对数据进行各个操作的互斥和通信。将Runnable对象作为一个类的内部类,共享数据作为这个类的成员变量,每个线程对共享数据的操作方法页封装在外部类,以便实现对数据的各个操作的同步和互斥,作为内部类的各个Runnable对象调用外部类的这些方法。...

2020-06-26 18:00:54 1213

原创 多线程join方法用于什么场景?

主线程创建并启动了子线程,如果子线程中需要进行大量的耗时运算,主线程往往将早于子线程结束之前结束。如果主线程想等待子线程执行完毕后,获得子线程中的处理完的某个数据,就要用到join方法。join方法的作用是等待线程对象被销毁。...

2020-06-26 18:00:00 395

原创 volatile适用于高并发的什么场景?

volidate最适合一个线程写,多个线程读的场景,如果有多个线程并发写操作,仍然需要使用锁或者线程安全的容器或者原子变量来替代。我们只能在有限的一些场景下使用volidate变量来替代锁,要使volidate变量提供理想的线程安全,必须同时满足下面两个条件:对变量的写操作不依赖于当前值。该变量没有包含在具有其他变量的不变式中。...

2020-06-26 17:59:09 502 1

原创 ReentrantLock和Synchronized的区别?

相同点:两者都是可重入锁,他们的加锁方式都是同步,而且都是阻塞式的同步,也就是说当一个线程获得了对象锁,进入了同步块,其它访问概统不快的线程都必须阻塞在同步块外面等待。不同点:原始构成:Synchronized是Java语言的关键字,是原生层面的互斥,需要jvm实现;而ReentrantLock是JDK1.5之后提供的API层面的互斥锁类。实现:Synchronized是通过JVM来加锁和解锁;ReentrantLock是API层面的加锁和解锁。代码编写:Synchronied不需要用户去手动释

2020-06-26 17:58:15 345 1

原创 Java多线程中调用wait()和sleep()方法有什么不同?

相同点:他们都是在多线程的环境下,都可以在程序的调用出阻塞指定的毫秒数,并返回。二者都可以通过interrupt()方法打断现成的暂停状态,从而使线程立刻抛出InterruptedException。不同点:wait()属于Object类的方法,sleep()属于Thread类的方法。每个对象都有一个锁来控制同步访问,Synchronized关键字可以和对象的锁交互,来实现现成的同步。sleep()方法没有释放锁,而wait()方法释放了锁,使得其他线程可以使用同步控制块或者方法。wait()

2020-06-26 17:57:14 3746 1

原创 Thread类中的start()和run()方法有什么区别?

通过start()方法来启动一个线程,此时线程处于就绪状态,可以被JVM来调度执行,在调度过程中,JVM通过调用线程类的run()方法来完成实际的业务逻辑,当run()方法结束后,此线程就会终止,所以通过start()方法可以达到多线程的目的。如果直接调用线程类的run()方法,会被当做一个普通的函数调用,程序中仍然只有主线程这一个线程,即start()方法呢能够异步的调用run()方法,但是直接调用run()方法确实同步的,无法达到多线程的目的。...

2020-06-26 17:56:08 2823

原创 Runnable和 Thread的区别?

Runnable和Thread本身并没有实质的区别,除此之外,主要有以下区别:Runnable的使用方式是实现其接口,Thread的使用方式是继承其类,二者都需要实现run方法。Runnable接口支持多继承,但基本上用不到。Thread实现了Runnable接口并进行了扩展,而Thread和Runnable的市值是实现的关系,不是同类的东西,所以Runnable和Thread本身并没有可比性。...

2020-06-26 17:54:49 2991

原创 1.1.3 HashMap、HashTable、ConcurrentHashMap各自的技术原理和使用场景是什么?

HashMap:实现了Map接口,将唯一键映射到特定值上,允许一个NULL键和多个NULL值,非线程安全。HashTable:类似于HashMap,但是不允许NULL键和NULL值,比HashMap慢,因为他是同步的。HashTable是一个线程安全的类,它使用Synchronized来锁住整张Hash表来实现线程安全。ConcurrentHashMap:允许多个修改操作并发进行,其关键在于使用了锁分离技术,通过使用多个锁来控制对Hash表的不同部分进行的修改,其内部使用段来表示这些不同的部分,每个段.

2020-06-26 17:53:16 223

原创 ArrayList与LinkedList的区别?

1. ArrayList是基于动态数组的数据结构,LinkedList是基于链表的数据结构。2. 对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针。3. 对于新增和删除操作,LinkedList要优于ArrayList,因为ArrayList要移动数据。...

2020-06-26 17:51:46 142

原创 Java基本数据类型有哪些?

Java的基本数据类型有八种,具体如下:1. 四种整数类型:byte、short、int、long2. 两种浮点数类型:float、double3. 一种字符类型:char4. 一种布尔类型:boolean

2020-06-26 17:50:35 2304

原创 HBase读写流程

读流程:Client先访问ZooKeeper来获取meta表在哪个HRegionServer上保存着;通过获取到的IP来访问指定的HRegionServer,从而获取到meta即元数据信息;通过元数据中存储的信息访问对应的HRegionServer,然后扫描所在HRegionServer的MemStore和StoreFile来查询数据;HRegionServer把查询到的数据响应给C...

2020-03-30 19:52:25 142

原创 HBase宕机如何处理

HBase宕机分为HMaster宕机和HRegionServer宕机:HMaster宕机:HMaster没有单点问题,HBase中可以启动多个HMaster,通过ZooKeeper的选举机制保证总有一个HMaster运行及对外提供服务。HRegionServer宕机:当HRegionServer宕机时,HMaster会将其所管理的region重新分布到其他活动的HRegionServer上,...

2020-03-30 19:51:40 1967

原创 MemStore和StoreFile

HBase的一个table中的所有行都按照rowkey的字典序排列,table在行的方向上分割为多个region,region是按大小分割的(默认为10G),它是HBase中分布式存储和负载均衡的最小单元,不同的region可以分布在不同的Region Server上,但一个region是不会拆分到多个Server上的。每个region由一个或者多个store组成,每个store保存一个列簇,有几...

2020-03-30 19:50:54 2272

原创 HBase内部实现机制

HBase使用MemStore和StoreFile存储对表的更新。数据在更新时首先写入WAL(Write-Ahead Log,也称HLog)和MemStore,当这两个地方的变化信息都写入并确认后,才认为写动作完成。MemStore中的数据是排序的,当MemStore累计到一定阈值时,就会创建一个新的MemStore,并且将老的MemStore添加到flush队列,由单独的线程flush到磁盘中,...

2020-03-30 19:50:10 300

原创 HBase中scan和get的功能以及实现的异同

get:按照RowKey获取唯一一条记录。get的方法处理分两种:设置了ClosestRowBefore和没有设置ClosestRowBefore的RowLock。主要用来保证行的事务性,即每个get是以一个row来标记的。scan:按照指定的条件获取一批记录。可以通过setCaching和setBatch方法提高速度;可以通过setStartRow与setEndRow来限定范...

2020-03-30 19:49:29 3448

原创 HBase中compact用途是什么,分为哪两种,它们之间有什么区别

在HBase中,每当有memstore数据flush到磁盘之后,就会形成一个storefile,当storefile的数量达到一定程度后,就需要将storefile文件来进行compact操作。compact的作用主要包括以下几个方面:合并文件清除过期、多余版本的数据提高数据读写的效率HBase中实现了两种compact的方式,分别为minor和major这两种,这两种方式的区别是:...

2020-03-30 19:48:48 1942

原创 HBase的RowKey设计原则

长度原则:RowKey是一个二进制码流,其长度越短越好,一般不建议超过16个字节,主要由以下原因:数据的持久化文件HFile是按照key/value存储的,如果RowKey过长比如100个字节,则1000万列数据光RowKey就要占用100*1000万=10亿个字节,将近1G数据,这会极大影响HFile的存储效率;MemStore将缓存部分数据到内存,如果RowKey字段过长,内存的有...

2020-03-30 19:47:51 140

原创 HBase和Hive的区别

二者的相同点是都是架构在Hadoop之上,都是用Hadoop作为底层存储。二者的区别是:Hive:Hive是一种类SQL的引擎,可以将SQL转化为MapReduce任务,只支持导入和查询,使用时需要预先定义表结构,主要用于离线处理。HBase:HBase是一种NoSQL的key/value数据库,面向列式存储,支持增删改查,使用时只需要预先定义列簇,不需要具体到列,列可以动态修改,主要用于高...

2020-03-30 19:46:57 317

原创 HBase的特点

大:一个表可以有数十亿行,数百万列;无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列;面向列:面向列的存储和权限控制,列独立检索;稀疏:空列并不占用存储空间,表可以设计的非常稀疏;数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;数据类型单一:HBase中的数据都是字符串,没有类型。...

2020-03-30 19:46:03 445

原创 Spark性能优化

1、程序编写准则准则一:从同一个数据源尽量只创建一个RDD,后续不同的业务逻辑可以复用该RDD,而不是基于该数据源重新创建一个新的RDD,这样Spark仅仅需要从HDFS上加载一次文件的内容就可以了。准则二:如果需要对某个RDD进行多次不同的Transformation和Action操作,可以考虑对该RDD进行持久化操作,以避免Action操作触发作业时多次重复计算该RDD。因为Sp...

2020-03-17 16:57:20 166

原创 Spark与MapReduce的区别

MapReduce:只提供Map和Reduce两种操作,抽象程度低,但是复杂的计算通常需要很多的操作,而且操作之间有很复杂的依赖关系。MapReduce的中间处理结果是放在HDFS文件系统中的,每次的落地和读取都消耗大量的时间和资源。不支持高级数据处理API、DAG计算、迭代计算等。Spark:通过引入弹性分布式数据集RDD以及RDD丰富的动作操作API,非常好地支持了DA...

2020-03-11 21:11:31 241

原创 Hive优化方法

1 join无关的优化Hive SQL的性能问题大部分都和join相关,对于和join无关的问题主要有group by 相关的倾斜和count distinct相关的优化group by引起的倾斜优化:group by引起的倾斜主要是输入数据行按照group by列分布不均匀引起的,因此导致部分Reduce Task分布的数据过多,从而导致数据倾斜。对于group by引起的倾...

2020-03-11 21:10:50 174

原创 Hive SQL执行原理

Hive SQL的基本模式可以分为三类:select语句:比如select order _id, buyer_id,cate_name from orders_table where day=' 20170101' and cate_name=’ iphone7';,实际中where条件可能更为复杂并且会有and/or等各种组合。Hive SQL是被翻译成MapReduce任务执行的,所以H...

2020-03-09 20:07:26 1218

原创 MapReduce执行原理

MapReduce执行任务一般包括输入分片、Map、Shuffle、Reduce等阶段,其执行原理如下图所示:图片来源于《离线和实时大数据开发实战》输入分片:在进行Map计算之前,MapReduce会根据输入文件计算输入分片,每个输入分片对应一个Map任务。Map阶段:在Map阶段,各个Map任务会接收到所分配的分片,并调用Map函数,逐行执行并输出键值对。Combine...

2020-03-09 20:05:30 655

原创 数据仓库一般分为哪几层

数据仓库一般分为ODS层、DWD和DWS层、应用层。ODS层:数据仓库源头系统的数据表通常会原封不动地存储一份,这成为ODS(Operation Data Store)层。它们是后续数据仓库层加工数据的来源,同时也存储着历史的增量数据或全量数据。DWD和DWS层:数据仓库明细层(Data Warehouse Detail, DWD)和数据仓库汇总层(Data Warehouse Summer...

2020-03-09 20:03:49 12724

原创 JVM学习:运行时数据区域

JVM运行时数据区域主要有程序计数器、虚拟机栈、本地方法栈、堆、方法区五个区域。注:如无特殊说明,本文所有图的来源为《深入理解Java虚拟机JVM高级特性与最佳实践》1、程序计数器程序让数器( Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。字解码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码...

2020-03-06 21:18:01 108

原创 JVM学习:判断对象是否存活的方法

判断对象是否存活的方法有两种,分别是引用计数法、可达性分析算法。注:如无特殊说明,本文所有图的来源为《深入理解Java虚拟机JVM高级特性与最佳实践》1、引用计数法引用计数法是指给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1,当引用失效时,计数器值就减1,任何时刻计数器为0的对象就是不可能再被使用的。缺点是它很难解决对象之间相互循环引用的问题。举个简单的例子,对象o...

2020-03-06 21:16:44 219

原创 分区表和桶表的区别

分区表:在逻辑上,将表中的数据按分区放在表目录的对应子目录中,在物理上,分区表和未分区表没有区别,分区表在表创建完成时,也可以通过alter table来添加或者删除,而且分区键一定不是原表中的列。桶表:不同表对同一字段分桶,且当两张表桶数相同时,数据会分配到同一个节点上,join时会减少shuffle,和分区键不同,分桶键必须是原表中的列,分桶表中每个桶的文件作了排序,分桶数应为质数,每个桶...

2020-03-06 00:55:17 1548

原创 什么是拉链表

拉链表既能反应数据的历史状态,又可以最大程度的节省存储,主要用于以下场景:数据量比较大;表中的部分字段会被更新,如用户的地址、产品的描述信息、订单的状态等;需要查看某一个时间点或时间段的历史信息。比如查看某一个订单在历史某一个时间点的状态;变化的比例和频率不是很大。如总共有1000万的会员,每天新增和发生变化的有10万左右;如果对这样类型的表每天都保存一份全量数据,那么每次全量中会保...

2020-03-06 00:54:28 286 1

原创 ORC事务表与Hyperbase表的区别

今天有客户问了我一下关于ORC事务表与Hyperbase表的区别问题,我回答的不是特别好,所以这里总结一下他们两个的区别,以便能掌握得更加深入些。ORC事务表:轻量级索引,支持CRUD操作,但是不建议大规模的单条增删改查,因为TDH(TDH是星环自研的一套大数据平台,类似于CDH,但是进行了很多的优化)是大数据数仓系统,是需要使用批量进行增删改查,索引单条操作的性能会降低;事务表需要进...

2020-03-06 00:53:23 2549

原创 为什么要写博客

其实在以前(大概2016年左右)就已经开始写博客了,主要以CSDN为主,起初写博客时一方面是感觉写博客很高大上,另一方面,想把自己经历过的坑记录下来,便于分享给他人(装逼)。不过在写的过程,慢慢的感觉自己写作的态度就发生了变化,要么就直接把在网上搜集的资料直接复制下来,然后放到自己的博客里面,要么就很长时间不更新,渐渐的自己失去了写博客的动力和兴趣,直到前几天看到了两个很优秀的博主([crosso...

2020-03-05 22:09:43 121

原创 基于Python的影视推荐系统的实现

近日在做一个影视网站时,考虑将推荐系统集成到网站中,所以从网上查阅了一些资料,最终得以实现,下面将自己的实现原理及过程写下来,以便作为记录。1、影视相似度计算这个推荐系统的主要是根据用户的观看记录,然后为其推荐相似的影视,所以最后采用了基于内容的协同过滤算法来实现,算法中采用欧几里德距离作为影视相似度的衡量标准。代码如下:# 计算两个物品的相似度(欧几里德距离)def calculate_...

2019-11-09 22:21:09 9253 5

原创 爬虫大全

爬虫大全爬虫大全集合了大家常用的爬虫,为大家日常的开发提供方便。希望大家能共同努力,让这个项目变得丰富而充实。这个项目主要基于 python、scrapy,数据库采用MongoDB数据库,采集到的数据都保存在 MongodbDB数据库。本项目仅为学习之作,请勿用作商业用途,否则后果自负!功能说明最大资源网网址为:www.zuidazy1.net,爬虫名称:zuida,内容:主要包括...

2019-09-25 17:57:33 5313

原创 掌上影视

掌上影视github项目地址:https://github.com/wpwbb510582246/PocketFilm掌上影视是一个可以在线浏览最新影视资源的平台,分为PC端、移动端,同时包括一个爬虫工具,可以自动爬取不同影视平台上的数据,从而保证该平台可以拥有最新的资源。该平台主要提供电影、电视剧、电视直播、戏曲相关资源的浏览与播放。掌上影视的PC端和移动端采用相同的接口来获取数据,接口主...

2019-09-25 17:55:21 2559

原创 基于Python的QQ空间相册中的所有照片下载器

QQAlbumDownloader1、概述这个项目是一个 QQ 空间中的照片下载器,用于一次性下载 QQ 空间相册中的所有照片。2、项目架构这个项目使用 python语言开发完成,基于scrapyj框架,从而使程序的运行更加高效。3、使用方法a、下载谷歌浏览器并安装,下载地址为:https://www.google.cn/chrome/b、查看谷歌浏览器版本信息c、下载对应版本的...

2019-05-27 22:20:06 3046

1.0.43_0.crx

User Agent Switcher for Chrome能将Chrome伪装成各大家不同的浏览器,让你方便测试初始网页。user agent switcher for chrome扩展可以轻松,快捷地修改Chrome浏览器的UA。 支持自动切换模式,让Chrome始终用指定的UA去访问某些网站

2019-07-22

基于python实现类似qq群聊功能(源码)

这是我自己学习python时学习到的使用python来实现类似qq群聊的功能的源码,博客地址:https://blog.csdn.net/wpwbb510582246/article/details/88079047

2019-03-02

IBM PC Assembly Language and Programming (5th ed)英文版

IBM PC Assembly Language and Programming (5th ed)英文版

2016-11-02

TortoiseGit-1.8.12.0-64位中文版

将项目上传到github的工具,可以通过交互式界面上传自己的项目而不需要再用代码的方式来上传

2016-10-01

MyDictionary

这个软件为一个电子词典,里面包括本地查词和在线查此两种查词方式,通过这个软件你可以学习到AutoCompleteTextView的使用方法,同时还可以学习到WebView的使用方法以及如何用WebView去制作一个简单的网页浏览器。

2016-10-01

MobileCommunication

这是自动调用系统的拨号、上网、Email的方法的源代码,通过该源代码你可以快速掌握Android开发中自动调用系统的拨号、上网、Email的方法

2016-09-24

MyWebActivity

这是Android开发中WebView使用方法详解的源代码,能帮助大家快速掌握WebView的使用方法。

2016-09-23

MyAlertDialog

这是AlertDialog的源代码,通过这个源代码可以帮助你快速掌握Android开发中AlertDialog的用法

2016-09-23

MyListView

ListView的使用方法源代码,可以帮你快速掌握ListView的使用方法

2016-09-23

常用颜色色谱表

大家在android开发需要配置颜色时可能不知道每种颜色的代码,所以会感觉很头疼,本款常用颜色表包含了网页设计、平面设计常用的颜色,总共137种,红橙黄绿青蓝紫应有尽有,并且每一种颜色都有相应的中文名称、英文名称、RGB颜色代码,是真正实用的网页颜色代码表,希望能对大家有所帮助。

2016-08-19

leanote-desktop-windows-x64-v2.1

leanote 是一款在线的云笔记服务,开源,支持 Markdown,程序代码高亮,多人协作,笔记历史记录,可以直接将笔记发布为博客等功能。

2016-08-18

100多个Android Demo的集合

这里面有很多android开发中所使用的控件,并且以一种交互式的界面将其展现出来,希望能对android开发初学者有所帮助。

2016-08-17

空空如也

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

TA关注的人

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