- 博客(188)
- 资源 (13)
- 问答 (2)
- 收藏
- 关注
原创 大数据技术介绍
为了方便大家梳理清楚大数据学习路线,本文从以下四个方面来介绍大数据技术:大数据技术栈大数据发展史大数据应用大数据开发岗位一、大数据技术栈之前有同事问我怎么转大数据开发,他在网上搜了一堆大数据相关的技术,但是不知道从哪里开始入门,也不知道要学习哪些技术,这些技术栈之间的关系是什么。我一开始转大数据的时候也有点懵逼,整体接触了一遍之后才把大数据技术栈给弄明白了。做大数据开发,无非要干四件事情,采集、存储、查询、计算。此外,一些开发必备的基础语言能力是需要的。我按照这几个维度,对大数据常见技术栈做
2022-01-10 11:10:11
17530
1
原创 Python自学成才之路 分布式计算解决方案actor
以下内容来自于cookbook,个人觉得这篇文章对于设计分布式计算任务有一定的借鉴意义,感兴趣的同学可以阅读原文:https://python3-cookbook.readthedocs.io/zh_CN/latest/c12/p10_defining_an_actor_task.htmlactor模式是一种最古老的也是最简单的并行和分布式计算解决方案。一个actor就是一个并发执行的任务,只是简单的执行发送给它的消息任务。actor之间的通信是单向和异步的。因此,消息发送者不知道消息是什么时候被发送,
2020-09-08 22:53:53
727
原创 python自学成才之路 死锁的解决方案
以下内容是我阅读cookbook上的死锁解决方案的读后感,感觉上面的思想很不错,想给大家分享下,我在其中加了一些我自己的理解,感兴趣的话可以阅读原文:https://python3-cookbook.readthedocs.io/zh_CN/latest/c12/p05_locking_with_deadlock_avoidance.html#id3关于死锁有一个经典的问题,”哲学家就餐问题“,题目是这样的:五位哲学家围坐在一张桌子前,每个人 面前有一碗饭和一只筷子。在这里每个哲学家可以看做是一个独立的
2020-09-07 22:04:34
771
原创 python自学成才之路 线程间协作之Semaphore,threading.local()
信号量信号量用来控制线程并发数的,信号量里面维护了一个计数器,这个计数器可以理解为锁的数量,线程通过acquire方法去申请锁,每申请到一个锁,计数器就减1。线程通过release释放锁,每释放一个锁,计数器就加1。当计数器为0的时候,通过acquire方法去申请锁会被阻塞,直到有其它的线程释放锁让计数器不为0才有可能申请到锁。信号量有两种BoundedSemaphore或Semaphore,用Semaphore举个栗子:import threading, timeclass myThread
2020-09-06 11:50:50
491
原创 Python自学成才之路 线程间协作 lock,condition,event的使用
多线程并发时会出现线程安全问题,如果不解决线程并发安全问题可能会让程序出现不可预料的情况。python提供了一些工具包来解决多线程安全问题,下面介绍其中常见的工具。1.Threading.Lock()锁的作用是将一段操作管理起来,确保每个时刻只有一个线程可以执行这段操作,这样就能确保里面的共享变量在并发的情况下对它的操作不会出现预期之外的一次。比如有多个售票窗口,如果不对售票操作加锁,就会导致出售的门票数大于可售的门票数。lock常用方法:lock.acquire:获取锁,锁被其它线程持有时会被阻塞
2020-09-05 23:32:49
602
原创 Python自学成才之路 多线程开发
1.创建线程Python中提供了threading模块来创建线程,创建方式有两种。1)直接通过threading.Thread来创建import threadingdef singing(): print(threading.currentThread().name + " - 正在唱歌 ")def dancing(): print(threading.currentThread().name + " - 正在跳舞 ")if __name__ == '__main
2020-09-05 00:08:47
347
原创 Python自学成才之路 进程间通信
程序在创建子进程时,会完全复制一份主进程的环境,包括变量,函数,类等。所以在子进程中使用的变量,函数,类和主进程之间隔离的,子进程之间也是隔离的。看下面这个案例:from multiprocessing import ProcessAGE = 1def hello(): print('hello')def greet(names): global AGE AGE += 1 names.append('jack') print('======子进程
2020-09-03 22:03:09
313
原创 Python自学成才之路 多进程开发
在python中可以通过os.fork()创建子进程,但是这种方式只能在linux,unix,mac下面使用,不能跨平台,所以一般不推荐使用这种方式。Python提供了一个multiprocessing模块来创建多进程,这种方式写起来更简单,且支持跨平台,一般推荐使用multiprocessing模块来创建多线程。1.使用Process来创建进程from multiprocessing import Processimport osdef pringLog(msg): print(msg
2020-09-02 23:17:26
308
原创 python自学成才之路 miniconda创建虚拟环境
前面虚拟环境是安装在一个Python解释器下的,如果想使用不同版本的Python环境该怎么创建呢?这个时候miniconda就派上用场了。Miniconda可以在创建虚拟环境时指定安装不同版本的Python解释器。Miniconda下载地址:https://docs.conda.io/en/latest/miniconda.html安装好miniconda后将scripts目录配置到环境变量中,就可以愉快的玩耍moniconda了。1.创建一个虚拟环境conda create -n envname
2020-09-01 22:19:05
2201
1
原创 Python自学成才之路 玩转虚拟环境
Python自带的那个环境是系统环境,同一个项目的不同版本可能会依赖不同版本的依赖包,如果都放在系统环境下会使系统环境变得很庞大,同时操作起来也不太方便,如果给每个项目都单独配置一个环境,各个项目之间互不干扰,开发起来就方便些,每个项目单独的环境叫做虚拟环境。virtualenv安装虚拟环境工具pip3 install virtualenv1.创建一个虚拟环境C:\Users\11622>cd D:\Python learningC:\Users\11622>d:D:\Pytho
2020-08-31 21:05:52
328
原创 Python自学成才之路 with到上下文管理器
在做文件IO操作时,有一个with语句,他能够自动的对文件进行打开和关闭操作。with open('d:\\abc.txt', 'w') as f: f.write('hello world')With有这个特效,其实背后实际上是基于__enter__和__exit__这两个魔术方法来实现的。一个对象实现了__enter__和__exit__这两个魔术方法后,也能使用with语法。举个栗子,把大象放进冰箱有三步操作,第一步打开冰箱,第二步把大象放进冰箱,第三步关上冰箱,如果使用with语法可
2020-08-30 20:17:33
298
原创 Python自学成才之路 生成器的使用
为何需要生成器?假如现在有一个需求,需要打印从1到1亿的整形。如果我们采用普通的方式,直接调用range函数,那么程序肯定会崩溃,因为range(1,100000000)函数直接产生一个从1-1亿的列表,这个列表中的所有数据都是存放在内存中的,会导致内存爆满。这时候我们可以采用生成器来解决这个问题,生成器不会一次性把所有数据都加载到内存中,而是在循环的时候临时生成的,循环一次生成一个,所以在程序运行期间永远都只会生成一个数据,从而大大节省内存。生成器是什么?使用yield的函数是生成器,生成器是一个迭
2020-08-27 00:06:53
361
原创 Python自学成才之路 迭代器的使用
可迭代对象实现了__iter__魔术方法的对象是可迭代对象(Iterable)迭代器实现了__iter__和__next__魔术方法的对象是迭代器(Iterator)迭代器和可迭代对象的区别在于迭代器是可以通过for循环来遍历的,而可迭代对象如果没有实现__next__魔术方法是不能用for来遍历的。判断一个对象是否是可迭代对象使用isinstance()判断一个对象是否是Iterablefrom collections import Iterable, Iteratorret = isin
2020-08-25 00:06:29
312
原创 Python自学成才之路 彻底搞懂python变量作用域
python 作用域分成四种L(Local):最内层,包含局部变量,比如一个方法内部。E(Enclosing):包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个函数(或类) A 里面又包含了一个函数 B ,那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。G(Global):当前脚本的最外层,比如当前模块的全局变量。B(Built-in):包含了内建的变量/关键字等。,最后被搜索看个案例:# 全局变量num = 30def o
2020-08-14 23:45:01
374
原创 Python自学成才之路 魔术方法之属性访问控制
Python中提供了一些魔术方法来控制对象属性的访问,赋值,删除过程。属性访问魔术方法__getattr__(self, item)__getattribute__(self, item)其中__getattr__只有在属性不存在时会被调用,__getattribute__无论属性是否存在都会被调用,item参数就是要访问的属性。属性赋值魔术方法__setattr__(self, key, value)给对象属性赋值或者添加新属性时会被调用。属性删除魔术方法__delattr__(se
2020-08-13 22:31:11
360
原创 Python自学成才之路 魔术方法之比较运算符,赋值运算符
关于魔术方法的定义可以参考前面两节比较运算符Python2中比较运算符魔术方法是__cmp__(self, other)_, 通过自定义比较规则,如果self大于other则返回正数,等于返回0,小于返回负数。这个方法在python3中不适用,python3中使用以下魔术方法来做比较。__eq__:等于__ne__:不等于__lt__:小于__gt__:大于__le__:小于或等于__ge__:大于或等于通过实现以上方法,对象也能做比较运算,如下所示:class Person
2020-08-11 23:04:03
415
原创 Python自学成才之路 魔术方法之一元,二元运算符
文章目录一元运算符__pos__函数__neg__函数__abs__函数__invert__函数二元运算符一元运算符一元运算符有+,-,~等,要想使这些一元运算符对对象起作用,需要在定义类的时候实现对应的魔术方法。定义一个坐标类class Coordinate(object): def __init__(self, x, y): self.x = x self.y = y def __pos__(self): return sel
2020-08-11 00:11:23
766
原创 Python自学成才之路 魔术方法之打印对象实例
魔术方法:“魔术方法就是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的。”写过java的人都知道,java中如果想要打印对象信息,有一个toString方法。类实现这个方法后,打印对象时,可以打印出对象的字段信息,如果类没有实现这个方法,打印出来的则是对象的内存地址,看不到对象的具体字段信息。python也一样,看下面一个案例。class Person(object
2020-08-10 00:11:52
459
原创 Python自学成才之路 装饰器必用的wraps注解
保留元信息先看一个案例:def my_decorate(func): def inner_fun(*args, **kargs): print('here is my_decorate') func() return inner_fun@my_decoratedef greet(): print("say hi")print(greet.__name__)输出:inner_funGreet函数的名字为何会变成了inner_
2020-07-29 22:38:20
517
原创 Python自学成才之路 使用函数作为装饰器
前面都是用类作为装饰器(传送门),主要是用类作为装饰器理解起来更容易。其实函数也可以用来做装饰器,因为函数本身就是可调用的,而且函数作为装饰器用得更多。同样函数作为装饰器可分为装饰器带有参数和不带参数。第一种:不带参数的装饰器不带参数的装饰器需要以函数作为参数,最后返回一个函数,如下所示:def my_decorate(func): def wrapper(*args, **kwargs): func(*args, **kwargs) return wrapper
2020-07-28 23:14:13
347
原创 Python自学成才之路 带有参数的装饰器
文章目录第一种:装饰器不带参数第二种:装饰器带参数上一节留了点悬念。(上一节)函数和装饰器都可以添加参数,但是装饰器结构上的区别在于装饰器是否带参数。第一种:装饰器不带参数看下面一个案例:class my_decorate(object): def __init__(self, f): """ 如果装饰器不带参数,函数需要作为参数传递给这个类的构造器 """ print("进入到 __init__") sel
2020-07-25 22:01:42
284
原创 Python自学成才之路 装饰器编程之初试装饰器
装饰器可以理解为是一个控制过程,这个控制过程需要函数作为参数。一个函数加了控制过程之后,这个函数执行前后控制过程都能够做一些处理。有点类似于java里面的aop。为了方便理解,先用类来创建一个装饰器。class my_decorator(object): def __init__(self, f): print("进入到装饰器 __init__()") f() def __call__(self): print("进入装饰器 __cal
2020-07-25 21:33:23
267
原创 Python自学成才之路 元类中的__new__和__init__方法
文章目录 前面一节留了点悬念,这一节来做解释,相信看完这节你会对元类有更加深刻的认识。 元类其实和普通类一样,普通类的__new__方法是创建实例,__init__方法是初始化实例,说是初始化,其实就是可以给实例添加一些属性。在元类中也是一样,只是元类__new__创建的是类实例,__init__是对类实例做修改。&
2020-07-19 23:40:27
885
原创 Python自学成才之路 详解类的三个重要方法__new__,__init__,__call__
文章目录__call__方法__new__和__init__这里对类做两种划分,元类和普通类(基类中不包含type)。__call__方法首先介绍一下__call__方法,python中要想一个类的对象能够像函数一样被调用,那这个类需要实现__call__方法。比如像下面这样:class Person(object): def __call__(self): print('__call__')person = Person()person()__call__方
2020-07-16 23:30:59
465
原创 Python自学成才之路 什么是元类
文章目录什么是元类?元类是干什么的?有哪些元类?为什么要学元类?什么是元类?有这么一个类class A(object): passa = A()print(type(a))输出:<class '__main__.A'>类A的实例a类型是<class ‘main.A’>,如果把type用在类A上会输出什么?print(type(A))输出:<class 'type'>输出结果<class ‘type’>,这个type到
2020-07-15 22:20:18
751
原创 Python自学成才之路 终于弄清楚类方法,静态方法的区别了
class Person(object): num = 0 def __init__(self, name, age): self.name = name self.age = age Person.classMethod() def instanceMathod(self): print('name: %s, age = %s'%(self.name, self.age)) @staticmethod.
2020-07-12 19:36:19
1081
1
原创 python自学成才之路 类属性和实例属性,__slots__方法
目录类属性和实例属性__dict__方法__slots__方法类属性和实例属性python里面属性分两种,类属性和实例属性。如何去区分一个属性是类属性还是实例属性?在__init__中带有self的是实例属性,与方法平级的是类属性。class Man(object): gender = 'man' def __init__(self, name, age): self.name = name self.age = age def beha
2020-07-12 00:08:46
395
原创 python自学成才之路 numpy 基础
文章目录本文的目的是了解numpy以及numpy的一些基本操作创建numpy1.直接使用np.array传入python数组的方式创建2.使用np自带的函数来创建2.1 ones函数 创建元素都是1的np数组2.2 zeros函数 创建元素都是0的np数组2.3random函数 创建随机数组查看numpy1.使用shape函数查看np数组形状1.1二维数组1.2 三维数组1.3 多维数组2.获取n...
2019-09-02 23:56:11
3300
12
原创 Idea打包含所有依赖的jar包
正常情况下使用maven打的jar包是不包含项目所依赖得jar包的,所以通过java –cp xxx.jar com.test.MainClass 来运行jar包的时候会抛出Exception in thread “main” java.lang.NoClassDefFoundError: 异常,网上的解决方法通常都是在pom文件里面加上一些相关插件的配置,这种方式一搜一大把,但是我在使用这些...
2019-05-03 16:30:17
8079
4
原创 Idea开发maven插件
文章目录场景描述插件功能插件开发第一步:创建插件项目第二步:插件实现2.1 声明mojo类(插件)2.2 添加参数2.3 execut方法实现自定义插件功能2.4插件使用场景描述最近博主开发了一个用于接收数据的接口服务器,一开始数据是外部购买的,数据源只有一个地方,但是随着业务的拓展,公司不打算全部数据都从外部购买,而是将其中一部分数据交给公司爬虫部门来爬取,这样数据源变成了两处。但是博主的接...
2019-04-08 18:18:49
7213
2
原创 python自学成才之路 文件读写操作
IO操作格式python对文件IO操作有两种格式,第一种是如下形式:filepath = 'IOtest.txt'try: f = open(filepath,'r') print(f.read())finally: if f: f.close()第二种是如下形式:filepath = 'IOtest.txt'with open(filepa...
2019-04-02 14:02:02
548
1
原创 python自学成才之路 类详细用法
文章目录python类简介创建一个类实例的创建和使用类继承导入模块中的类python类简介python是一门面向对象编程的语言,python的类和java中的类思想上有很多一样的地方,比如python类也是通过class修饰,里面也有成员属性,成员方法,也有构造函数,也可以继承和重写父类方法等等,但是和jave的类在写法上有很大的不同。创建一个类class Animal(): d...
2019-04-01 17:01:36
709
原创 python自学成才之路 函数详细用法
文章目录函数简介函数参数实参和形参参数传递1.位置配对2.通过关键字配对函数默认值任意数量的实参任意数量关键实参函数的导入1.导入整个模块2.导入特定函数函数简介python函数定义格式如下:def function_name(params): ''' 函数体 '''和java定义函数不一样的地方在于,java对于无返回值的函数需要使用void修饰,有返回值的函数需要显示的指定返回...
2019-03-31 23:46:31
1131
5
原创 python自学成才之路 字典详细用法
文章目录字典介绍遍历字典1.遍历字典的键2.遍历字典上的值3.遍历键和值字典嵌套1.字典列表2.字典中嵌套列表和字典字典介绍字典使用{}表示,内部是一个个键值对,类似于java中的map,但是java中的map有泛型做约束,而python字典则没有。字典的键必须是可hash的,像字符串和整形是可hash,但是如果使用列表或者字典作为键则会报键不能hash异常,如下所示listtest = [...
2019-03-31 21:44:35
437
1
原创 python自学成才之路 列表,元组,集合详细用法
文章目录列表简介列表crud操作创建列表访问列表元素1.通过索引访问列表元素2.通过for循环遍历列表修改列表元素添加元素1.通过append向列表末尾添加元素2.通过insert方法向指定位置添加元素删除元素1.使用del删除指定位置元素2.使用pop删除末尾元素3.使用pop弹出指定位置的元素4.根据值使用remove删除元素列表排序1.列表永久排序,使用sort默认按照首字母升序排序2.传递...
2019-03-31 18:18:24
540
原创 redis实战第十五篇 redis cluster的批处理中ask重定向解决方案
ask重定向现象请参考【传送门】分别使用mget和pipline做批处理1.使用mget批量获取,如果存在重定向问题,会抛出异常。 @Test public void testMget(){ JedisCluster jedis = RedisClusterUtil.getJedis(); List<String> results =...
2019-02-18 10:34:10
1173
原创 redis实战第十四篇 redis cluster ask重定向
redis cluster除了有一个moved重定向,还存在ask重定向。ask重定向代表的状态比较特别,它是当slot处于迁移状态时才会发生。例如:一个slot存在三个key,分别为hello1、hello2、hello3,假设此时slot正在处于迁移状态,hello1已经迁移到了目标节点,此时如果在源节点获取hello1,则会报出ask重定向错误。下面通过手动迁移slot来模拟ask重定向问...
2019-02-18 10:29:50
4039
1
原创 redis实战 migrate异常NOAUTH Authentication required.
当redis cluster集群设置密码的时候,使用migirate需要加上密码,否则会报如下异常:(error) ERR Target instance replied with error: NOAUTH Authentication required.redis在3.0之前是不支持migrate带有password的,在3.0之后可以在migrate中加入auth参数来做权限校验12...
2019-02-18 00:10:24
3674
原创 redis实战第十三篇 jedis连接redis cluster
redis cluster客户端有两种;Dummy:又称为傀儡客户端,redis的重定向机制会返回当前键所在的槽和对应的节点,dummy客户端根据这一机制随机连接任一redis获取键所在的节点,这种客户端实现代码简单,每次只需要根据重定向的信息再次发送请求即可,但是这样弊端也和明显,根据重定向再次发送请求额外增加了开销。smart:它会在内部维护一个slot→node的映射关系,本地就可以实现...
2019-02-16 20:35:39
7652
原创 redis实战第十二篇 redis cluster请求重定向
在集群模式下,redis在接收到键任何命令时会先计算该键所在的槽,如果改键所在的槽位于当前节点,则直接执行命令,如果改键位于其它节点,则不执行该命令,返回重定向信息。比如hello这个键槽866上,而曹866位于31节点上,假设在32上执行get hello ,则会返回重定向信息。127.0.0.1:6380&gt; get hello(error) MOVED 866 192.168.0....
2019-02-16 11:15:10
5205
2
bashdb-4.2-0.8
2018-03-01
nagios-4.1.1.tar.gz centreon-2.5.4.tar.gz
2017-08-10
多文件内容拷贝到一个文件上(解决中文乱码) java实现
2015-05-08
C语言程序运行时出现的问题
2013-09-24
C语言程序运行时出现问题
2013-09-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人