自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 资源 (2)
  • 收藏
  • 关注

原创 ubuntu无法打开terminal终端

1、问题ubuntu18.04系统中,系统中默认python3版本为python3.6,然后自己换了python3.7,并更改了python3所指定的软连接,到python3.7。之后突然发现无法打开terminal终端,鼠标点击不起作用,在vscode中的终端输入gnome-terminal 报错ImportError: No module named gi.repository2、解决输入sudo apt-get install -y python-gobject成功解决..

2021-06-24 10:16:44 1858

原创 django-admin创建项目是报错

1、问题django在创建项目中,使用django-admin startproject mysite时报错,alone@ubuntu:~/test/djangorestframework_test$ django-admin startproject mysiteCommandError: /home/alone/test/djangorestframework_test/mysite/manage.py already exists. Overlaying a project into an

2021-06-18 15:59:48 1887

原创 mysql设置用户和用户权限

一般出于对数据库的保护,我们会针对某些用户访问数据库后只有操作某些库的权限,如果所有用户都以root登录的话,就可能出现删库跑路的情况,哈哈。1、先新建一个库,名为 xiaoy_mallcreate datebase xiaoy_mall charset=utf8;2、新建mysql用户,设置登陆密码create user xiaoy identified by '123456';3、授予用户 xiaoy访问 xiaoy_mall数据库的权限grant all on xiaoy_mall.*

2021-01-14 15:25:25 231

原创 MySQL进阶(10)—— 常用MySQL技巧

1、SQL 执行顺序编写顺序SELECT DISTINCT <select list>FROM <left_table> <join_type>JOIN <right_table> ON <join_condition>WHERE <where_condition>GROUP BY <group_by_list>HAVING <having_condition>ORDER BY &l

2020-10-14 10:18:18 183

原创 MySQL进阶(9)—— 并发参数调整及mysql锁的问题

1、MySQL并发参数调整从实现上说,MySQL Server 是多线程结构,包括后台线程和客户服务线程。多线程可以有效利用服务器资源,提高数据库的并发性能。在 MySQL 中,控制并发连接和线程的主要参数包括 max_connections、back_log、thread_cache_siez、table_open_cache。max_connections采用 max_connections 控制允许连接到 MySQL 数据库的最大数量,默认值是 151。如果状态变量 connections_e

2020-10-14 10:04:41 295

原创 MySQL进阶(8)——应用优化以及查询缓存、内存管理优化

1、应用优化前面介绍了许多数据库的优化策略,但是在实际生产环境中,由于数据库本身的性能局限性,就必须对前台的应用进行一些优化,来降低数据库的访问压力。1.1、使用连接池对于访问数据库来说,建立连接的代价是比较昂贵的,因为我们频繁的创建关闭连接,是比较耗费资源的,我们有必要建立 数据库连接池,以提高访问性能。1.2、减少对 MySQL 的访问1.2.1、避免对数据进行重复检索在编写应用代码时,需要能够理清对数据库的访问逻辑。能够一次连接就获取到结果的,就不用两次连接,这样可以大大减少对数据库无用的

2020-10-10 20:55:45 469

原创 MySQL进阶(7)—— 索引的使用以及SQL优化

1、索引的使用1.1、准备环境create table `tb_seller` ( `sellerid` varchar (100), `name` varchar (100), `nickname` varchar (50), `password` varchar (60), `status` varchar (1), `address` varchar (100), `createtime` datetime, primary key(`sellerid`))engine=i

2020-10-06 17:22:12 282

原创 MySQL进阶(6)—— 优化SQL步骤

1、查看SQL执行效率MySQL 客户端连接成功后,通过 show [session|global] status 命令可以提供服务器状态信息。show [session|global] status 可以根据需要加上参数“session”或者“global”来显示 session 级(当前连接)的计结果和 global 级(自数据库上次启动至今)的统计结果。如果不写,默认使用参数是“session”。下面的命令显示了当前 session 中所有统计参数的值:show status like 'Com

2020-10-04 19:05:11 182

原创 MySQL进阶(5)—— mysql的体系结构及存储引擎概述

1、体系结构概述整个MySQL Server由以下组成:Connection Pool :连接池组件Management Services & Utilities : 管理服务和工具组件SQL Interface:SQL接口组件Parser:查询分析器组件Optimizer:优化器组件Caches & Buffers:缓冲池组件Pluggable Storage Engines:存储引擎File System:文件系统1)连接层最上层是一些客户端和连接服务,包含本

2020-10-03 15:56:57 202

原创 tmux配置文件

这里我使用的是nord的主题# Copyright (C) 2017-present Arctic Ice Studio <development@arcticicestudio.com># Copyright (C) 2017-present Sven Greb <development@svengreb.de># Project: Nord tmux# Repository: https://github.com/arcticicestudio/nord-tmux

2020-09-20 15:24:55 321

原创 MySQL进阶(4)——触发器

1、介绍触发器是与表有关的数据库对象,指在 insert/update/delete之前或之后,触发并执行触发器中定义的 SQL 语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持 语句级触发。触发器类型NEW和OLD的使用INSERT型触发器NEW表示将要或者已经新增的数据UPDATE型触发器OLD表示修改

2020-09-14 20:21:37 140

原创 MySQL进阶(3)——存储过程和函数

1、存储过程和函数概述存储过程和函数是 实现经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。存储过程和函数的区别在于 函数必须有返回值,而存储过程没有。函数:是一个有返回值的过程过程:是一个没有返回值的函数2、创建存储过程CREATE PROCEDURE procedure_name([pro_parameter[, ...]])begin -- SQL语

2020-09-14 19:28:30 258

原创 MySQL进阶(2)——视图

1、视图概述视图(View)是一种虚拟存在的表。视图并不再数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗的讲,视图就是一条 SELECT 语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条 SQL 查询语句上。视图相对于普通的表有事主要包括以下几项:简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对于用户来说已经是过滤的复合条件的结果集。安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理

2020-09-13 16:54:36 119

原创 MySQL进阶(1)——索引

1、索引概述MySQL官方对于索引的定义为:索引(index)是帮助MySQL获取数据的数据结构(有序)。在数据之外,数据库系统还维护满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。左边是数据表,一共有两列七条数据,最左边的是数据记录的物理地址(注意逻辑上相邻的记录在磁盘上并不一定是物理相邻的)。为了加快Col2的查找,可以卫华一个右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这

2020-09-12 21:04:51 168

原创 杭州有赞一面面经

1、实习项目经历(大数据的数据库的查询优化策略)切片查询,缓存。。。2、http状态码https://www.runoob.com/http/http-status-codes.html3、tcp的三次握手和四次挥手三次握手:第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己

2020-09-12 16:01:44 314

原创 Docker实践11-容器间的网络

1、外部访问容器容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。实际情况我们不会采用此方式,而会使用-p如果要查看一个容器使用的端口以及映射情况,除了可以使用docker ps查看以外,还可以使用 docker container ls 查看。-p的作用:-p 则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格

2020-08-21 11:03:33 185

原创 Docker实践10-docker compose配置文件详解

imageservices: web: image: hello-world在 services 标签下的第二级标签是 web,这个名字是用户自己自定义,它就是服务名称。 image 则是指定服务的镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。 例如下面这些格式都是可以的:image: redisimage: ubuntu:14.04image: tutum/influxdbimage: example-registry.com:4000/p.

2020-08-21 10:04:04 179

原创 Docker实践09-compose命令

Compose常用命令1. 命令docker-compose --help会看到如下这么多命build Build or rebuild servicesbundle Generate a Docker bundle from the Compose fileconfig Validate and view the Compose filecreate Create servicesdow

2020-08-21 09:29:46 143

原创 Docker实践08-使用docker-compose搭建Django+MySQL+Redis项目

1、准备工作mkdir docker_composecd docker_composemkdir 01_djangomkdir 02_mysqlmkdir 03_redis2、构建django项目注意:使用之前制作的Django镜像(2.0)版本进入到01_django文件夹建立Dockerfile文件新建Dockerfile文件,如下:FROM ubuntu:16.04# 复制文件到容器ADD requirements.txt /home# 跳转到指定目录WORK

2020-08-21 09:26:39 1770

原创 Docker实践07-docker-compose的简介及安装

1. 引入通过前面的知识,我们知道使用一个 Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器,从而得到一个镜像。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。使用流程:创建 docker-compose.yml 配置文件(yaml语法)使用 docker-compose 来指令管理这个集群2. 介绍Compose 项目是 Do

2020-08-20 13:28:54 183

原创 docker实践06-Dockerfile参考手册

1、简介Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。例:docker build -f /path/to/a/DockerfileDockerfile的基本结构:Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜

2020-08-20 11:24:48 129

原创 Docker实践05-通过dockerfile构建django项目

1. 目的通过构建dockerfile来完成django项目的构建。2. 实现新建一个名为 ubuntu_django 的空文件,进入该文件新建一个requirements.txt用来安装项目所需依赖aliyun-python-sdk-core-v3==2.13.10certifi==2019.9.11chardet==3.0.4Django==1.11.11django-redis==4.10.0idna==2.8itsdangerous==1.1.0Jinja2==2.10.3

2020-08-20 09:11:32 1472

原创 Docker实践04-使用Dockerfile定制镜像

1. 引入在上节的docker commit中,我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 DockerfileDockerfile 是一个文本文件,其内包含了一条条的 指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。2. 准备工作1、下载ngin

2020-08-19 19:00:27 261

原创 Docker实践03-commit创建镜像(了解)

制作镜像方式1(了解)引入有时,我们在一个容器中安装了需要的软件或者进行了较为复杂的配置,此时能否把这个容器制作成一个镜像呢?答案是肯定的查看镜像Ubuntu16.04创建容器修改更新源为国内的注意,Ubuntu中决定更新源的文件是/etc/apt/source.list,可以将其内容修改为如下:deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricteddeb http://mirrors.tuna.t

2020-08-19 12:36:32 117

原创 Docker实践02-docker的初步使用

1. 运行终端打开终端,输入docker images ,如果运行正常,表示docker已经可以在本电脑上使用了2. docker常用命令如下指令说明docker images查看已下载的镜像docker rmi 镜像名称:标签名删除已下载的镜像docker search 镜像从官方仓库(hub.docker.com)查找镜像docker pull 镜像名称:标签名标签名默认是 latest,代表最新版本。docker run创建容器doc

2020-08-19 11:11:29 144

原创 Docker实践01-docker介绍

1、引入开发工作中为了能够快速的在一个电脑设备上快速的使用某个功能,例如为了在Windows系统上快速使用Linux等软件,我们可以安装VMware虚拟换软件,然后在VMware软件上安装Linux,此时就可以实现在Windows电脑上“寄生”出另外一个电脑,而且这个虚拟的电脑功能与真实的电脑性能虽然有差距但是运行基本功能还是达到要求。通过VMware我们可以很轻松的将虚拟出来且装有Linux系统的“电脑”,快速的复制到另外的真实物理机上,且他们之间是隔离的,一台挂掉,不会影响另外一台上面说的这些VM

2020-08-18 17:15:02 110

原创 十大排序算法实现及动图演示

0、算法概述0.1 算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。0.2 算法复杂度排序方法平均情况最好情况最坏情况稳定性空间复杂度冒泡排序O(n2)O(n)O(n2)稳定O(1)选择排序O(n2)O(n2)

2020-08-18 11:35:12 141

原创 二叉树及相关遍历操作

1、基本概念二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)2、性质(特性)性质1:在二叉树的第 i 层上至多有 2(i-1)个节点(i > 0)性质2:深度为 k 的二叉树至多有 2k-1 个节点 (k > 0)性质3:对于任意一颗二叉树,如果其叶节点树为 N0 ,而度数为 2 的节点总数为 N2,则 N0 = N2 + 1性质4:具有n个节点的完全二叉树的深度必为 log2(n+1)性质

2020-08-18 09:40:13 200

原创 树的基本概念及分类

1、树的概念树(tree)是一种抽象数据类型(ADT)或是这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。他是由 n (n>=1)个有限节点组成一个具有层次关系的集合。把他叫做“树”是因为它看起来像一颗倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个节点有零个或多个子节点没有父节点的节点称为根节点每一个非根节点有且只有一个父节点除了根节点外,每个子节点可以分为多个不相交的子树2、树的术语节点的度:一个节点含有的子树的个数称为该节点的度;树的度:一

2020-08-17 16:47:33 1352

原创 二分查找及时间复杂度

1、搜索搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真或假,因为该项目是否存在。搜索的几种常见方法:顺序查找、二分法查找、二叉树查找、哈希查找。2、二分法查找二分法查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中的元素是按升序排序,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分为前、后两个子表,如果中间位置记录

2020-08-17 14:22:10 6049 1

原创 排序与搜索

1、排序算法排序算法(Sorting algorithm) 是一种能将一串数据依照特定顺序进行排列的一种算法。2、排序算法的稳定性稳定性: 稳定排序算法会让原本有相等键值的记录维持相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的记录 R 和 S ,且在原本的列表中 R 出现在 S 之前,在排序过的列表中 R 也将会是在 S 之前。当相等的元素是无法分辨的,比如像是 整数,稳定性并不是一个问题。然而,假设一下的数对将要以他们的第一个数来排序。(4, 1) (3, 1) (3, 7) (5

2020-08-17 11:31:39 106

原创 归并排序及实现

归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小后,然后合并两个有序数组,基本思路就是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。1、归并排序的分析2、python代码实现"""归并排序"""def merge_sort(alist): n = len(alist) if n <= 1: return alis

2020-08-17 11:17:30 224

原创 希尔排序及实现

希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,值直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分为一组,算法终止。1、希尔排序过程希尔排序的基本思想是:将数组在一个表中并对列进行插入排序,重复这个过程,不过每次用更长的列(步长更长了,列数更少了)来进行。最后整个表就只剩一列了。将数组转换至表是为了更好地理解这算法,算法

2020-08-11 18:10:40 425

原创 快速排序及实现

快速排序(Quicksort),又称 划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割为独立的两部分。其中一部分的所有数据都比另外一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,一次达到整个数据变成有序序列。步骤为:从数列中挑出一个元素,成为“基准”(pivot)重新排序数列,所有元素比基准小的摆放在基准面,所有元素比基准值大的摆在基准的后面(相同的数可以放到任一边)。在这个分区结束之后,该基准就处于数列的中

2020-08-11 15:24:16 287 1

原创 插入排序与实现

插入排序(Insertion Sort)是一种简单直观的排序算法。他的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。1、插入排序分析2、python代码实现"""插入排序"""def insert_sort(alist): n = len(alist) # 从第二个位置开始,即下标0,到n-1 for i in range(1, n):

2020-08-11 11:41:33 215

原创 选择排序及实现

选择排序(Selecion sort)是一种简单只管的排序算法。他的工作原理如下首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则他不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对 n 个元素的表进行排序总共进行至多 n-1 次交换。在所有的完全依靠交换区移动元素的排序方法中,

2020-08-11 09:42:31 194

原创 冒泡排序及实现

1、冒泡排序冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完后才能。这个算法的名字又来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素,重复以上

2020-08-10 19:38:15 494

原创 栈和队列

1、栈栈(stack),有些地方成为堆栈,是一种容器,可存入数据元素,访问元素,删除元素,他的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(top)和输出数据(pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。由于栈数据结构只允许在一端就行操作,因而按照后进先出(LIFO,Last In First Out)的原理运作。栈结构的实现push(item)(入栈)pop()(出栈)peek()(返回栈

2020-08-10 17:10:14 104

原创 链表

链表引入:为什么需要链表?顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。链表的定义链表(Linkend list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)1、单项链表单向链表也叫单链表,是链表中最简单的一种形式,他的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指

2020-08-07 20:34:31 191

原创 顺序表

1、顺序表的基本表现形式图(a)表示的是顺序表的基本形式,数据元素本身连续存储,每个元素所占的存储单元大小固定相同,元素的下标是其逻辑地址,而元素存储的物理地址(实际内存地址)可以通过存储区的起始地址Loc(e0)加上逻辑地址(第i个元素)与存储单元大小(c)的乘积计算而得,即:Loc(ej) = Loc(e0) + c*i故,访问指定元素时无需从头便利,通过计算便可获得对应地址,其时间复杂度为 O(1)。如果元素的大小不同意,则需采用图(b)的元素外置的形式,将实际数据元素另行存储,而顺序表中个

2020-08-05 21:15:13 406

51单片机io口产生多路pwm信号

通过单片机的定时器同时产生多路可调的pwm周期信号,适用于stc89系列,stc12系列等多种型号单片机

2019-07-23

使用51单片机的io1口产生pwm周期信号

通过stc12c5a60s2自带的pwm信号口(ccp0,ccp1),即P1^3,P1^4,产生两路占空比可调。代码注释完整,包括pwm信号产生原理、频率计算等。

2019-07-23

空空如也

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

TA关注的人

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