关注我!带你一路 "狂飙" 到底!

每天分享IT编程技术知识 / 学习积累一点点,后期涨薪亿点点!

  • 博客(136)
  • 收藏
  • 关注

原创 用Python玩跳一跳小游戏,我能开挂

我们收集了很多有关python入门的项目案例,包含了相应的教程和源码,哪怕你从未接触编程,也通过这些教程,完成相应的python小项目,并在实战中,收获python的基础知识点。跟前年的跳一跳小游戏一样,也是通过按压屏幕的时间长短,从而控制这个小角色的跳跃距离。无论怎样的python学习方式,理论固然重要,但从零开始的Python入门项目实战,可能才是你能否快速入门python的关键哦!在刚刚开始玩的时候,可能也会有与之前游戏的同样问题,比如:时间距离之间的关系把握不好,没跳几下就掉到了台下。

2020-07-31 15:57:05 941

原创 Java教程:PC人脸识别登录,竟然出乎意料的简单

最近对写文章稍稍的有点小抵触,写的东西没人看,有点小失落,还好在粉丝朋友的开导下,调整了下自己的心态,只要我分享的东西对大家有帮助就好,至于多少人看那就随缘吧!有时候真不能把事儿自己钻里面想,越想越出不来!接下来我们开始对图片进行比对,百度云提供了一个在线的人脸库,用户登录我们先在人脸库查询人像是否存在,存在则表示登录成功,如果不存在则注册到人脸库。前端 Vue 代码实现逻辑比较简单,tracking.js 打开摄像头识别到人脸信息后,对视频图像拍照,将图片信息上传到后台,等待图片对比的结果就可以了。

2020-07-31 15:52:05 966

原创 Python快速入门,附详细视频教程

网上有关python入门的学习资源非常多,但是我更建议大家,如果是初学python,可以先从书籍看起,因为网上的资料虽多,但很多都是不够系统的,比如讲python的项目视频,这些更适合有一定基础后再去看,而对于才接触python不久的人来说,可以先看书,因为书上的知识相对来说要系统不少。但其他的不用管,我只建议你们就用Pycharm,这个工具是可以免费使用的,成本非常低,至于使用的方式,可以找我,我发给你相应的教程,不难,一学就能会!祝愿所有有兴趣学习Python的伙伴,都能有成!开始,我们先把基础吃透。

2020-07-31 15:35:50 1429 9

原创 如何用c语言和GTK写一个扔色子的程序?

今来写一个简单版本的扔色子的程序。如果只用C语言来写,就随机数就可以了,现在加上了图形界面,代码如下:#include <gtk/gtk.h>#include <time.h>static GtkWidget *ourgif;gint i = 0;int flag=0;void change_bmp(){ srand(time(NULL)); i = rand() % 6; //取值范围是0~5 if(flag==0){ g_print("flag=

2020-07-31 09:37:49 920 1

原创 gtk当中一些好玩的小例子

方法2:参考本人上一篇文章。

2020-07-31 09:37:37 947 1

原创 详解c++中字符指针数组的使用

指针数组,就指向指针的指针,很早以前在说指针的时候说过,但后来发现很多人还是比较难以理解,这一次我们再次仔细说一说指向指针的指针。先看下面的代码,注意看代码中的注解:#include <iostream> #include <string> using namespace std; void print_char(char* array[],int len);//函数原形声明 void main(void) { //---------

2020-07-31 09:37:28 958 1

原创 虚拟机无法上网之修改Ubuntu更新源

大家虚拟机安装ubuntu系统后,有些会出现无法上网问题,如果是连接不到网络,可以参考下篇文章。VM虚拟机不能上网的问题解决_运维_Aaron_Zhang939的博客-CSDN博客​blog.csdn.net还有一种情况是连接超时问题,这种情况一般是修改Ubuntu更新源就能解决。一般直接百度Ubuntu更新源就能出来一大堆,这时候最好是找和自己Ubuntu版本一致的更新源,我的Ubuntu版本是16.04,下面是我找到的一个比较好的更新源,并附上更换步骤:下面是更换步骤:1 备份原来的

2020-07-31 09:37:20 1076 1

原创 线程间同步互斥(4)信号量使用

接下来。来看一看信号量的使用。概念部分:信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。编程时可根据操作信号量值的结果判断是否对公共资源具有访问的权限,当信号量值大于 0 时,则可以访问,否则将阻塞。PV 原语是对信号量的操作,一次 P 操作使信号量减1,一次 V 操作使信号量加1。函数接口部分:#include <semaphore.h>// 初始化信号量int sem_init(sem_t *sem, int

2020-07-31 09:37:12 916 1

原创 从零开始学Python:20课-函数使用进阶

Python内置函数中有不少高阶函数,我们前面提到过的filter和map函数就是高阶函数,前者可以实现对序列中元素的过滤,后者可以实现对序列中元素的映射,例如我们要去掉一个整数列表中的奇数,并对所有的偶数求平方得到一个新的列表,就可以直接使用这两个函数来做到,具体的做法是如下所示。,否则将会引发异常。:注意上面的代码中的calc函数,它同时使用了可变参数、关键字参数、命名关键字参数,其中命名关键字参数要放在可变参数和关键字参数之间,传参时先传入可变参数,关键字参数和命名关键字参数的先后顺序并不重要。

2020-07-30 16:32:27 981 1

原创 const修饰指针和引用释疑

中,pi的类型为int*,而&a的类型为const int* const,只要其中含有int* 就可以。//将const pi看作一体,就与(2)所述相同,只是要求pi必须为const,正如上所说,=号两边的类型不必严格匹配,但必须含有int*, &a的类型为const int* const,含有int*, 所以可以赋值。去掉ri左边的&号,则为int *const ri,因为ri是别名,故ri的类型应与赋值的数类型一致,ri类型为int *const,&i为int *const,可以这么做.

2020-07-30 10:05:48 1035 1

原创 文件传输软件WinSCP的使用

WinSCP软件是windows下的一款使用ssh协议的开源图形化SFTP客户端,也就是一个文件传输的软件,它有什么优点吗?咱们嵌入式开发中经常会将windows中的文件复制到linux系统当中,比较常用的方式就是添加共享文件夹,每次通过添加的共享文件夹来相互传输文件,这里介绍的是一款能够跨系统使用的文件传输软件。软件的安装很简单,与其他软件一样直接安装即可,一直下一步就可以,当安装完软件后,打开软件,会看到一下界面此时,它会让你输入一些信息,主机名就是当前linux用户的IP地址,注意

2020-07-30 10:05:39 1864 1

原创 纯C语言实现bootloader

之前有用很少一部分汇编实现过bootloader,但经过后来慢慢改进,发现是可以用纯C语言实现嵌入式操作系统的引导。下面是之前对不能完全使用C语言引导系统的几点说明:1、C程序中所有的代码都是以函数的形式出现,而函数定义通常会用到参数和在函数里面定义一堆局部变量,而这些变量一旦过多时,寄存器就无法全部保存,此时就会将剩下的变量存到堆栈里面,即,SP寄存器所指向的内存里面,而此时的SP寄存器并未赋初值,也就没有确切的内存地址可用。所以需要用到堆栈的前提是SP堆栈指针已经有了明确指向,否则就是非法访问内

2020-07-30 10:05:23 1056 1

原创 线程间同步互斥(3)条件变量使用

今来看看条件变量的使用!!!与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直 到某特殊情况发生为止。通常条件变量和互斥锁同时使用。条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步 的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起另一个线程使 “条件成立”(给出条件成立信号)条件的检测是在互斥锁的保护下进行的。线程在改变条件状态之前必须首先锁住互斥量。如果一个条件为假,一个线程自动阻塞,并释放等待状态改

2020-07-30 10:05:05 920 1

原创 线程间同步互斥(2)读写锁使用

概念:允许多个读出,但只允许一个写入的需求。读写锁与互斥量类似,不过读写锁允许更改的并行性,也叫共享互斥锁。互斥量要么是锁住状态,要么就是不加锁状态,而且一次只有一个线程可以对其加锁。读写锁可以有3种状态:读模式下加锁状态、写模式加锁状态、不加锁状态。读写锁使用步骤:1、定义:pthread_rwlock_t rwlock;2、初始化:3、上锁3.1申请读锁3.2申请写锁4、解锁5、销毁读写锁例子:要实现的功能是验证通过读写锁实现,读线程

2020-07-30 10:04:55 974 1

原创 利用c++实现的贪吃蛇游戏

在tc 3.0下调试通过,因为tc 3.0不支持bool 类型,所以程序中自定义了个枚举类型变量bool。如果在vc或者bc中运行,可以把这个bool类型注释掉.

2020-07-29 10:27:37 1533 2

原创 数据结构之队列的顺序存储以及实现

之前咱们已经学习了数据结构的最基本的线性表的顺序存储和链式存储,以及线性表中经常使用的栈的顺序存储和链式存储,今天咱们主要学习的是队列的顺序存储,注意的地方是,队列也是线性表的一种,所以也是一对一的存在,在使用过程中,一定要主要它的特点。接下来,咱们就来看一下主要内容。1. 定义队列是限制在两端进行插入操作和删除操作的线性表,允许进行存入操作的一端称为“队尾”,允许进行删除操作的一端称为“队头”。当线性表中没有元素时,称为“空队”。2. 特点先进先出(FIFO)。3. 队列的定义(1

2020-07-29 10:22:40 1202 1

原创 数据结构之栈的链式存储以及实现

对于栈的链式存储,其实咱们之前已经给大家分享过了,其实栈的链式存储和单链表(线性表的链式存储)是一样的,但是栈符合的特性是后进先出,所以需要考虑的是如何实现出栈和入栈。那么通过之前的学习,相信大家应该知道了,其实入栈和出栈就相当于单链表的头插法和头删法,这样实现的话就简单多了,具体代码如下。插入操作和删除操作均在链表头部进行,链表尾部就是栈底,栈顶指针就是头指针。(1)定义栈节点 linkstack_t(2)创建一个空的栈 linkstack_create( )(3)入栈 links

2020-07-29 10:22:29 929 1

原创 Const的几大用法(常用)

Const实际上是函数参数的一部分,在第一个成员函数中它限制这个函数不能改变对象的数据,而第二个则没有。声明成员函数时,末尾加const修饰,表示在成员函数内不得改变该对象的任何数据。也就是说指针指向的内存地址不可变,但可以随意改变该地址指向的内存的内容。在第一个例子中,const用来修饰指针j,j不可变(也就是指向int变量的常指针);第二个例子中,const用来修饰*j,*j不可变(也就是指向int常量的指针)。const也可用来限制指针指向的内存不可变,但指针指向的内存地址可变。

2020-07-29 10:22:23 1052 1

原创 堆和栈的区别(经典版)

这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。

2020-07-29 10:22:09 976 1

原创 什么是真正的空间复杂度?

到底什么才是真正的空间复杂度呢?在空间与时间发生冲突时又该如何权衡呢?本节,我们就来解决这两个问题。来个例子现在有一个算法是这样的,给定一个数组,将数组中每个元素都乘以2返回,我实现了下面两种形式:private static int[] multi1(int[] array) { int[] newArray = new int[array.length]; for (int i = 0; i < array.length; i++) { newAr

2020-07-29 10:18:41 957 2

原创 敲黑板:Linux重定向用法详解

相信大家平时都会有需要复制粘贴数据的时候,如果是打开文件进行复制粘贴,就不可避免的需要较多的鼠标与键盘的操作,就会比较繁琐。那么有没有可以省掉这些繁琐操作的复制粘贴的方法呢?答案是肯定的,那就是重定向。重定向是一种高效的方法,无需大量的鼠标与键盘操作就可以完成数据的转移。重定向可以分为输入重定向以及输出重定向这两种类型。由于所有程序都有输入或者输出,因此输入和输出的重定向是任何编程语言或脚本语言都自带的功能。每当你与计算机交互时,重定向就必然会发生。学会使用重定向,不仅可以让你与计算机更好地交互,还

2020-07-28 17:30:37 819

原创 从零开始学Python:19课-使用PyCharm开发Python应用程序

坚持学习完前18课的小伙伴应该已经感受到了,随着我们对Python语言的认知在逐步加深,我们写的代码也越来越复杂了。“工欲善其事,必先利其器”,如果希望能够更快更好的写出代码,选择一个称手的开发工具是很有必要的。虽然我们之前推荐大家使用的VS Code已经很好了,但是对于复杂应用程序或者商业项目开发来说,我们还有更好的选择,它就是JetBrains公司出品的PyCharm。PyCharm的下载和安装可以在JetBrains公司的官方网站找到PyCharm的下载链接,有两个可供下载的版本,一个是社区版

2020-07-28 16:52:43 1673 1

原创 从零学Python:18-面向对象编程应用

面向对象编程对初学者来说不难理解但很难应用,虽然我们为大家总结过面向对象的三步走方法(定义类、创建对象、给对象发消息),但是说起来容易做起来难。大量的编程练习和阅读优质的代码可能是这个阶段最能够帮助到大家的两件事情。接下来我们还是通过经典的案例来剖析面向对象编程的知识,同时也通过这些案例为大家讲解如何运用之前学过的Python知识。经典案例案例1:扑克游戏。说明:简单起见,我们的扑克只有52张牌(没有大小王),游戏需要将52张牌发到4个玩家的手上,每个玩家手上有13张牌,按照黑桃、红.

2020-07-28 16:48:15 1197 1

原创 从零学Python:17课-面向对象编程(进阶)

继承的语法是在定义类的时候,在类名后的圆括号中指定当前类的父类。子类继承父类的方法后,还可以对方法进行重写(重新实现该方法),不同的子类可以对父类的同一个方法给出不同的实现版本,这样的方法在程序运行时就会表现出多态行为(调用相同的方法,做了不同的事情)。需要提醒大家的是,Python并没有从语法上严格保证私有属性的私密性,它只是给私有的属性和方法换了一个名字来阻挠对它们的访问,事实上如果你知道更换名字的规则仍然可以访问到它们,我们可以对上面的代码稍作修改就可以访问到私有的。,对应的方法是类方法或静态方法。

2020-07-28 15:12:23 997

原创 常用排序算法(c语言篇)

最近重新回顾了一下数据结构和算法的一些基本知识,简单整理下C语言下的常见排序算法。选择排序selectSort选择排序是最简单的一种基于O(n2)时间复杂度的排序算法,基本思想是从i=0位置开始到i=n-1每次通过内循环找出i位置到n-1位置的最小(大)值void selectSort(int arr[], int n){ int i, j , minValue, tmp; for(i = 0; i < n-1; i++) { minValue

2020-07-28 13:46:39 895

原创 C++面试题总结(一)

1. 面向对象的程序设计思想是什么?答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。2. 什么是类?答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。3. 对象都具有的两方面特征是什么?分别是什么含义?答:对象都具有的特征是:静态特征和动态特征。静态特征是指能描述对象的一些属性(成员变量),动态特征是指对象表现出来的行为(成员函数)4. 在头文件中进行类的声明,在对应的实现文件中进行类的定义有什么意义?答:这样可以提高编译效率,因为分开的话只需要编译一次

2020-07-28 13:44:23 1057 1

原创 C++引用之给已有的变量取个别名

1、引用的概述引用是c++对c的重要扩充。在c/c++中指针的作用基本都是一样的,但是c++增加了另外一种给函数传递地址的途径,这就是按引用传递(pass-by-reference),它也存在于其他一些编程语言中,并不是c++的发明。变量名实质上是一段连续内存空间的别名,是一个标号(门牌号) 程序中通过变量来申请并命名内存空间 通过变量的名字可以使用存储空间对一段连续的内存空间只能取一个别名吗? c++中新增了引用的概念,引用可以作为一个已定义变量的别名。 基本语法: Type& .

2020-07-28 13:44:16 1098

原创 C++面试题总结(二)

51. 引用与指针有什么区别?答 :1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。3) 不存在指向空值的引用,但是存在指向空值的指针。52. 描述实时系统的基本特性答 、在特定时间内完成特定的任务,实时性与可靠性。54. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?答 、全局变量储存在静态数据区,局部变量在堆栈中。55. 堆栈溢出一般是由什么原因导致的?答 、没有回收垃圾资源56. 什么函数不能声明为虚函数?

2020-07-28 13:43:59 1019

原创 c++中的动态数组使用

C++的new操作符是该语言一个非常好的语法特性,然而实际使用中却发现new操作符有不少限制,为突出的一点便是用new操作符分配多维数组空间时,不能让数组的每一维都动态可变。本文将对此提出一个简单直观的解决方案,在一个实际问题的简化模型中加以说明,并以此释清许多初学者对C++中new操作符与多维数组的误区。1. 问题的提出--多维可变数组的实际用途  下面是实际编程中遇到问题的一个简化模型。ChessBoard是一个棋盘类,其中的m_board是用来保存棋盘上棋子信息的二维数组。DIMENSION是

2020-07-28 13:43:37 1019

原创 C++引用之用法详解

引用的本质在c++内部实现是一个指针常量. Type& ref = val;c++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同,只是这个过程是编译器内部实现,用户不可见。那么函数的返回值类型必须是。给函数的返回值 取个别名。

2020-07-27 13:28:08 953

原创 代码编写小窍门(解决复制粘贴带行号问题)

大家在初学编程的 时候,经常会从网上复制部分代码,但偶尔复制的情况不尽如人意,比如下边这种情况: 1 #include<stdio.h> 2 #include<signal.h> 3 #include<unistd.h> 4 #include<stdlib.h> 5 #include<fcntl.h>

2020-07-27 13:28:00 1085

原创 守护进程的创建

由于在调用fork函数的时候,子进程拷贝了父进程的会话期,进程组,控制终端等,虽然父进程退出了但是会话期,进程组,控制终端没有改变,因此还不是真正意义上独立了。在linux中父进程先与子进程退出会造成孤儿进程,每当发现一个孤儿进程 时就会自动由1号进程(init)收养它,这样原先的子进程就会变成init的子进程。进程组:一个或多个进程的集合,进程组由进程组的ID来唯一标示 ,每个进程组都有一个组长进程,其组长进程的进程号等于进程组ID,该进程组ID不会因为组长进程退出而受到影响。

2020-07-27 13:27:43 925

原创 编程语言的最终梦想:静态类型安全

好的程序员可以使用类型不那么安全的语言写出类型相当安全的程序,相反的,差一点儿的程序员可能使用类型相当安全的语言写出类型不太安全的程序。听起来吓人,但是,这是和functional language的方针一致的,因为数组是一个要求副作用的数据结构,而functional是要摒弃副作用,所以,functional弃用数组也是很自然的。你也可以较它悬挂指针错误,但是,根据我们对类型匹配错误的定义,我们想把px当成X*, 但实际上它并不是我们期望的类型,所以,它也是类型错误的一种。这句话,也不是类型安全的。

2020-07-27 13:27:35 887

原创 细谈c++的const

C++const关键字小结const 是constant的缩写,本意是不变的,不易改变的意思。const 在C++中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。1、C语言的const特点const int a = 10;//不要把a看成常量//a的本质 是变量 只是 只读变量c语言的const修饰全局变量 默认是(外部链接的)fun.c //c语言的const修饰全局变量 默认是(外部链接的) //外部链接:其他源文件 可以使用 ..

2020-07-27 13:27:26 582

原创 using在c++中的用法

注意:using直接使用 命名空间中的成员 不会和 全局变量冲突。注意:using直接使用 命名空间中的成员 会和 局部变量冲突。

2020-07-24 13:28:09 675 1

原创 C++多态的原理

会调用子类B的构造函数,在B中会将vfptr这个指针指向子类B中的vftable,这样就很清晰了,下面的p->foo(),底层是(void (*)()) (*(int*)(*(int*)p)) ()调用形式,现在的vfptr。第一个成语是foo函数的地址, 我们将foo函数的地址得到,(*(int*)(*(int*)p))得到的是foo函数的地址,调用这个函数(void (*)()) (*(int*)(*(int*)p)) ();指向的是子类B中的虚函数表,自然调用的子类B中的foo函数.

2020-07-24 13:27:50 604

原创 细谈c++对c增强

全局变量检测增强以上c代码c编译器编译可通过,c++编译器无法编译通过。

2020-07-24 13:27:38 598

原创 电脑快捷键的使用

闲来无事,整理一下常见电脑快捷键的使用,希望能帮到那些上课偷偷打游戏、眼神不好、记性不好的同学,哈哈哈,开玩笑。一、电脑锁屏(win+L)有些时候,需要暂时离开座位去处理其他事,可是电脑还有数据再跑。关掉的话,数据就白跑了,不关的话,又不想让别人看到我电脑的资料。那么就按住windows键后,再按L键。这样电脑就直接锁屏了,不用担心电脑的资料外泄。二 、步骤记录器(win+R)1、工作过程中,大佬帮你解决问题时,一顿操作,眼花缭乱,啥也没记住,这个时候就可以使用windows键+R,输

2020-07-24 13:27:27 620

原创 详解c++的命名空间namespace

在c++中,名称(name)可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大,名称互相冲突性的可能性越大。另外使用多个厂商的类库时,也可能导致名称冲突。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入关键字namespace(命名空间/名字空间/名称空间),可以更好地控制标识符的作用域。

2020-07-24 13:27:07 603

原创 从零学Python:第十六课-面向对象编程入门

在Python中,可以使用class关键字加上类名来定义类,通过缩进我们可以确定类的代码块,就如同定义函数那样。在类的代码块中,我们需要写一些函数,我们说过类是一个抽象概念,那么这些函数就是我们对一类对象共同的动态特征的提取。写在类里面的函数我们通常称之为方法,方法就是对象的行为,也就是对象可以接收的消息。方法的第一个参数通常都是self,它代表了接收这个消息的对象本身。print(f'学生正在学习{course_name}.')print(f'学生正在玩游戏.')# 定义数字时钟类。

2020-07-23 17:58:36 969 1

毕设【小程序+在线考试系统】

如果你是最近忙于毕设的大学生,该项目合集也可以作为你的毕业设计,非常具有及时含量,祝你能够拿到优秀毕业生。 如果你是最近忙于毕设的大学生,该项目合集也可以作为你的毕业设计,非常具有及时含量,祝你能够拿到优秀毕业生。 借助在线考试系统来组织在线考试,已经不是什么稀奇的事情了,驾照考试、 模拟考试、趣味测试、培训考试等,大家都会选择在线考试系统! 1.快捷方便、省时省力,打破时间和地域的限制,随时随地可以进行。在线考试没有时间制、也没有空间地域限制,只要有网络,在地铁上、公交车上都可以利用任何碎片化的时进行在线的考试、学习。这对于企业来说,进行培训考试采用在线考... 2.成本低,效率高,借用当今互联网优势,通过考试系统发布考试,将二维码和考试链接散发考生即可完成组织考试。传统考试组织时间长,过程复杂,历时久。如果采取在线考试系统,可以更加轻松操控考试过程。 3.灵活组卷方式:随机试卷、固定试卷。家长可选择从题库抽题随机抽题、手动抽题、手动输入题目、使用Excel或或word文档快捷导入任一方式添加试卷试题。

2023-02-23

空空如也

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

TA关注的人

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