- 博客(38)
- 收藏
- 关注
原创 深入理解redis
一、什么是redis:Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:基于内存运行,性能高效 支持分布式,理论上可以无限扩展 key-value存储系统 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API相比于其他数据库类型,Redis具备的特点是:C/S通讯模型 单进程单线
2021-09-13 16:02:57
1455
1
原创 手写orm
这边主要说下ORM框架主要的几个部分:1、Dialect这个是每个数据库都需要提供dialect对象,并将其在启动的时候进行注册,这个部分主要是为了数据库和GO语言数据类型等其它差异提供转换函数:package dialectimport "reflect"var dialectsMap = map[string]Dialect{}type Dialect interface { DataTypeOf(typ reflect.Value) string TableExistSQ
2021-05-13 17:32:28
350
原创 图灵完备 状态机
状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一个数学模型。下面来给出状态机的四大概念。第一个是 State ,状态。一个状态机至少要包含两个状态。例如上面自动门的例子,有 open 和 closed 两个状态。第二个是 Event ,事件。事件就是执行某个操作的触发条件或者口令。对于自动门,“按下开门按钮”就是一个事件。第三个是 Action ,动作。事件发生以后要执行动作。例如事件是“按开门按钮”,动作是“开门”。编程的时候,一个 Action 一般就对应一个函数。第四个
2021-04-08 15:40:37
764
原创 GO new make
new(T) 和 make(T,args) 是 Go 语言内建函数,用来分配内存,但适用的类型不同。new(T) 会为 T 类型的新值分配已置零的内存空间,并返回地址(指针),即类型为*T的值。换句话说就是,返回一个指针,该指针指向新分配的、类型为 T 的零值。适用于值类型,如数组、结构体等。make(T,args) 返回初始化之后的 T 类型的值,这个值并不是 T 类型的零值,也不是指针*T,是经过初始化之后的 T 的引用。make() 只适用于 slice、map 和 channel.正..
2021-04-07 18:20:33
106
原创 unicode utf-8 str
Unicode与UTF-8Unicode 是「字符集」 UTF-8 是「编码规则」字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point) 编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)decode的作用是将二进制数据解码成unicode编码,如str1.decode('utf-8'),表示将utf-8的编码字符串解码成unicode编码。encode的作用是将unicode编码的字符串编码成二进制数据,如str2
2021-04-07 11:59:38
403
1
原创 GO 依赖注入
依赖注入是软件工程中经常使用到的一种技术,它提供了一种控制反转的机制,把控制权利交给了调用方。调用方来决定使用哪些参数,哪些对象来进行具体的业务逻辑。依赖注入的本质其实是为了将组件的创建与其依赖的创建分离实现原理:通过反射读取对象的依赖(golang是通过tag实现) 在容器中查找有无该对象实例 如果有该对象实例或者创建对象的工厂方法,则注入对象或使用工厂创建对象并注入 如果无该对象实例,则报错好处:1 它让调用方更灵活。2 大量减少定义类型的代码量3 增加代码的可用性,因为调用方
2021-04-06 19:55:17
438
原创 Leetcode算法题总结
一、滑动窗口二、双指针三、快慢指针/ 链表题目四、原地链表翻转五、区间合并六、无序限定范围的数组元素查找O(N)七、BFS八、树的DFS九、DFS/递归/回溯法十、双堆模式十一、2分变种十二、前K大的数模式HEAP十三、K路归并十四、DP 动态规划十五、排序算法十六、树和链表结合十七、树的重新构建十八、位运算十九、字符串二十、stack二十一、math二十二、array二十三、二叉搜索树...
2021-01-30 11:02:00
187
原创 GO语言的堆栈
堆栈1.什么是堆栈:在计算机中堆栈的概念分为:数据结构的堆栈和内存分配中堆栈。a.数据结构的堆栈:堆: 堆在数据结构中一般使用树(比如二叉树)实现,用于排序,称堆排序,最大堆、最小堆,比如最大堆是当插入或是删除一个数据时,永远要保证树的根节点的数据比自己叶节点的数据大,那么根节点的数据永远是最大的,这就保证了每次pop掉一个数据永远是最大的数据栈:一种先进后出的数据结构。b.内存分配中堆栈:栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据
2021-01-28 10:45:36
929
2
原创 Zookeeper
基本概念:Zookeeper:它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。本质上就是zookeeper=文件系统+监听通知机制。集群角色1、leader:负责进行投票的发起和决议,更新系统状态。2、follower:用于接收客户端请求并向客户端返回结果以及在选举过程中参与投票3、observer:也可以接收客户端连接,将写请求转发给lea
2020-11-01 11:30:07
162
原创 ElasticSearch
首先什么是ES?Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。为什么使用ES?elasticsearch不是什么全新的技术,它是将全文检索、数据分析以及分布式技术合并在了一起,其中全文检索指的是Apache lucene,数据分析指的是商用的数据分析软件,分布式技术主要指的就是分布式数
2020-09-10 20:55:46
342
1
原创 PV和PVC
PV的全称是: PersistentVolume (持久化卷),是对底层的共享存储的一种抽象,PV由管理员进行创建和配置,它和具体的底层的共享存储技术的实现方式有关,比如Ceph、GlusterFS、NFS等,都是通过插件机制完成与共享存储的对接PVC的全称是: PersistenVolumeClaim (持久化卷声明),PVC是用户存储的一种声明,PVC和Pod比较类型,Pod是消耗节点,PVC消耗的是PV资源,Pod可以请求CPU的内存,而PVC可以请求特定的存储空间和访问模式。对于真正存储的用户不
2020-09-09 10:27:49
1450
原创 MySql数据库探路
数据库数据库的基本操作:一)、库操作:1、显示已有的数据库句法:SHOW DATABASES [LIKE wild] 如果使用LIKE wild部分,wild字符串可以是一个使用SQL的“%”和“_”通配符的字符串。 举例:显示所有:show databases显示:show databasesLIKE 'test_db';创建数据库:句法:CREATE DATABASE db_name 删除数据库:句法:DROP DATABASE [IF EXIST...
2020-06-16 16:03:01
180
原创 Python装饰器详解
装饰器本质上就是个函数,这个函数接收其它函数作为参数,并将其以一个新的修改后的函数进行替换。下面一个注册的装饰器作为例子:_function = {}def register(func): def wrapper(*args, **kwargs): print('func_name is %s,args=%s,kwargs=%s' % (func.__name__, args, kwargs)) return func(*args, **kwargs)
2020-06-04 14:16:59
147
原创 Python中的call方法
在 Python 中提供了__call__ 方法,允许创建可调用的对象(实例)。如果类中实现了 __call__ 方法,则可以像使用函数一样使用类。#!/usr/bin/env python# -*- coding: utf-8 -*-class Run(object): def __init__(self): pass def __call__(self, data): print('data=%s' % data) r.
2020-06-04 10:23:52
585
原创 Celery异步任务--Djcelery
一、首先看下Celery的工作框架:二、介绍下配置文件:1、首先安装一些组件库:pip install celery pip install celery-with-redis pip install django-celery sudo apt install redis-server2、进行一些配置:a、配置setting.py中的INSTALLED_A...
2019-07-02 10:58:02
697
1
原创 容器技术-Kubernetes学习总结
一、什么是K8S?Kubernetes是用于自动部署,扩展,管理容器化应用程序的开源系统,他将组成应用程序的容器组合成逻辑单元,便于管理和服务发现二、为什么要学习K8S?其实K8S的概念也概括了为什么要学习K8S,在当今互联网流量爆发的时代,继续服务器业务量的扩展,纵向的扩展服务器节点的性能(cpu、mem和存储)显然不太现实,所以横向的通过多节点支持并发协作的方式来实现业务的扩...
2019-07-01 19:41:03
544
原创 容器技术-Kubernetes --架构
Kubernetes Cluster 由 Master 和 Node 组成,节点上运行着若干 Kubernetes 服务。一、先来介绍下Master节点上的服务:Master 是 Kubernetes Cluster 的大脑,运行着如下 Daemon 服务:kube-apiserver、kube-scheduler、kube-controller-manager、etcd 和 Pod 网络...
2019-06-25 14:45:19
262
原创 容器技术-Kubernetes
之前通过docker swarm的介绍,让大家对容器平台引擎有了一个基本的认识,下面来主要介绍和学习当前比较流行docker平台管理引擎Kubernetes,这也是当前云计算最火的基础技术架构。一、通过一个实例来认识K8S在正式的介绍K8S之前,先通过一个例子,让大家对K8S有一个浅显的认识,这里有一个网站,是kubernetes.io 开发的一个交互式教程,通过 Web 浏览器就能使用预...
2019-06-24 17:14:23
290
转载 容器技术-Docker swarm
容器生态系统包含三个部分: 容器核心知识,包括架构、镜像、容器、网络和存储。 容器平台技术,包括容器编排引擎、容器管理平台和基于容器的 PaaS。 容器支持技术,包括多主机管理、跨主机网络方案、监控和日志管理。 之前介绍过docker一些相关知识,有关容器核心技术和容器支持技术,下面来介绍下容器平台技术,这也是这几年最火的云计算相关的知识,如果学习了会大...
2019-06-21 18:00:15
416
原创 Python探路-分布式系统
一、首先了解下集群、分布式和微服务之间的异同:1、集群:集群的意思就是将一个应用程序,部署到多台服务器上面,然后在这些服务器的前面通过负载均衡服务器来择优选择哪一台服务器去执行;集群的优点就是当其中的一个服务器宕机了,其他服务器可以接上继续工作;将应用程序部署在多台服务器时,也提供了数据的吞吐量。2、分布式:可以将分布式理解为,将某一个应用程序,拆分成多个模块来部署,各个模块...
2019-06-18 16:18:55
10115
原创 Python探路-Kafka
之前主要介绍和学习了一些服务端和业务强相关的技术组件和框架,随着业务量的大幅度增加,单一的部署形式越来越不能满足服务的请求,那么业务的扩展就需要服务的增加,但是单纯的水平扩展是不能满足业务需求的,因此微服务就成了大家关注的对象,下面首先介绍下常用的协调系统Kafka:一、Kafka设计的目的在于:1、以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问...
2019-06-15 16:41:17
153
原创 Python探路-Nginx
一直向写关于nginx的博客但是一直没有能够将nginx的内容形成自己的知识体系,所有没有勇气写下去。今天鼓起勇气写下这篇博客,也希望借此形成对nginx的整体认识。首先看下nginx的进程模型:nginx一般是通过一个master进程+多个worker进程(和cpu核数一样多)的模式工作的。worker是master进程通过fork出来的,master用来监听连接,然后把连接交给wo...
2019-06-06 14:40:21
752
原创 Python探路-同步、异步、阻塞、非阻塞、并发、并行
为了在下一集更好的介绍nginx,这边先要梳理下一些比较重要,但又容易比较混淆的概念:https://www.zhihu.com/question/197324731、同步和异步:同步:同步就是发起一个请求,直到请求返回结果之后,才进行下一步操作。异步:当一个异步操作发出后,调用者在没有得到结果之前,可以继续执行后续操作。这就是异步二者的区别还是很明显的:请求发出后,是否需要等...
2019-06-06 10:42:44
230
原创 Python探路-uWSGI服务
一、在介绍uWSGI之前,先介绍几个概念:1、WSGI和uwsgi是两种通信协议,而uwsgi是uWSGI服务器独有的2、uWSGI是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。它要做的就是把HTTP协议转化成语言支持的网络协议。比如把HTTP协议转化成WSGI协议,让Python可以直接使用。参考:https://www.jb51.net/arti...
2019-06-05 18:16:53
392
原创 Python探路-Django
前面介绍了了Python中一些高级知识,下面学习分享下基于Python的WEB架构-----Django。首先介绍下什么是WEB框架,其实就是别人搭好的框框,自己根据项目需求,遵循框架的规则填写自己的东西,以达到实现项目功能,这就是框架本质的意义。而对于一般的web框架,大概都是这样的:而Django是怎样的模式呢?它采用的是MTV模式-M(model)模型、T(template)...
2019-06-05 10:34:42
182
原创 Python探路-多重继承
多重继承都会让python初学者很疑惑,哪怕当时看完,过一段时间也就遗忘了,因此写下了本文,希望借此能够让python初学者能够比较深刻的记住。多重继承查找父类的方法有两种:1、深度优先---针对经典类,即python2.2之前和python2.72、C3算法---针对新式类一、深度优先:可从某个定点v出发,访问此顶点,然后一次从v的违背访问的邻接点触发深度优先遍历图,直至途中...
2019-06-04 16:00:53
2008
原创 Python探路-元类
首先,对于Python来说,万物皆对象,类对象是对象,其实类本质也是对象,这一点是和其它语言不一样的地方,在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python世界中,等级很像道中的道生一,一生二,二生三,三生万物。分五个等级,我们一层一层的往下:1、道即是 type2、一即是 metaclass(元类,或者叫类生成器)3、二即是 class(类,或者...
2019-06-03 11:08:55
148
原创 LINUX探路-软件包管理
在学习linux的过程中会经常性的遇到软件包的下载和安装,目前比较流行的软件包管理的命令主要有Debian和Red Hat,软件包管理系统通常由两种工具类型组成:底层工具用来处理这些任务,比方说安装和删除软件包文件, 和上层工具,完成元数据搜索和依赖解析。1、使用上层工具来搜索资源库元数据,可以根据软件包的名字和说明来定位它。(查找)风格 命令 Debian apt-ge...
2019-05-27 19:37:40
151
原创 linux学习好的网站
1、linux必读的5本书:5.《鸟哥的 Linux 私房菜-基础篇·第三版》by 鸟哥最具知名度的 Linux 入门书《鸟哥的 Linux 私房菜基础学习篇》的最新版,全面而详细地介绍了 Linux 操作系统。豆瓣评分:9.14.《The Linux Command Line》by William E. Shotts Jr.如果你对 Linux 完全不了解安装都不会,看鸟哥...
2019-05-24 11:11:54
718
原创 LINUX探路-shell脚本编程练习
1、创建用户:批量创建用户,用户名为:班级+学号+昵称;每个班为一个组群,能够自动删除所创建的用户,每成功创建或删除一个用户,在屏幕上显示用户名#!/bin/bashecho "start input username"grouppath=/etc/groupgrouplist=()userlist=()groupcount=1for ((i=1;i<3;i=i+1))do...
2019-05-23 19:10:22
366
原创 LINUX探路-网络
linux网络一直是linux学习中比较困难的问题,所以现在整理下网络相关知识供参考,其实,很多人对网络都有一些基础认识,但是真正遇到网络问题,还是不知道从哪下手,归根到底,1、是对网络知识了解太少,2、网络工具或命令使用不纯熟。一、首先介绍几个命令:(一)检查和监测网络1、ifconfig [网络设备] [参数]ifconfig命令用来查看和配置网络设备。当网络环境发生改变时...
2019-05-23 12:59:54
230
原创 linux探路-linux命令
1、创建用户组 groupadd project2、创建用户 useradd -G project username3、groups查看当前登录用户的组内成员groups test查看test用户所在的组,以及组内成员whoami查看当前登录用户名4、vim操作:曾经也在找看看有没有快捷的方法全选,但是网上很多都是重复,并且错误的,比如:1,$y,这是什么?要写...
2019-05-13 22:51:56
96
原创 linux探路-shell scripts
一直相对shell脚本进行系统性学习,由于时间的原因,每次都是看一点,过一段时间又忘了,这次狠下心做一次shell script的学习和分享,和大家一起掌握好shell,下面先大体描述下技术层面的shell,后面主要就是练习。首先什么是shell script呢?它是利用shell的功能所写出来的一个程序,这个程序是使用纯文本文件,将一些shell提供的命令写在里面,再搭配正则表达式、管线、数...
2019-05-13 20:13:28
178
原创 linux探路-例行性工作排程
在linux中有的程序是例行性的,如,只执行一次的任务和循环工作的任务。在正常的项目中,只执行一次的任务可能用的比较少,循环执行的任务可能比较常见,比如在项目中我们工作的进程可能会因为某种原因会导致进程挂掉,不可能手工干预去重启进程,所以这就需要定时任务去查询进程的状态,一旦一次就重启,保证功能的稳定性。在linux的工作排除中,有且只有两种:at和crontab一、仅执行一次的工作排程:...
2019-05-12 11:50:26
162
原创 容器探路-Docker镜像和runtime
一、什么是容器容器:是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。组成:1、应用程序本身,2、依赖:比如应用程序需要的库或其他软件二、为什么使用容器容器和虚机都是为应用提供封装和隔离,但是容器使软件具备了超强的可移植能力。虚机:每...
2019-05-11 15:19:25
5171
原创 linux探路-磁盘与文件系统
首先这里跳过基础的磁盘知识,如磁盘的物理组成。每一个操作系统所使用的文件的属性和权限都不一样即使用的文件系统不一样,所以在对磁盘进行分区后,需要进行格式化才能被操作系统使用。以往的一个分区就是一个操作系统,而现在一个可挂载的数据就是一个文件系统。一、文件系统是怎么工作的:文件系统通常会将数据分别存放在不同的块,权限和属性放置到inode中,至于实际数据则存放在data block区块中,另...
2019-05-08 21:17:58
141
原创 linux探路-文件
首先,为什么要有文件权限这个东东,这个是由于linux多人多任务环境的特性决定的,不同的使用者对某些私密文件注定要有不同的权限,那一共有哪些权限呢?一般指read、write和execute;而使用者对于文件有几种角色呢?一共三种即owner、group和others。一、linux记录这些信息的文件:用户信息记录在/etc/passwd文件下,密码记录在/etc/shadow...
2019-05-07 23:31:14
306
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人