自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(91)
  • 收藏
  • 关注

原创 java之super关键字

一、super 关键字的特点:1.super 和 this 关键字的特点类似 super 代表的是父类对象的引用2.当子父类的成员出现同名时 可以通过 super 来区别3.子类的构造方法中 通过super 关键字调用父类的构造方法强调:当构造一个子类对象的时候一定会先调用父类的构造方法来构造父类的对象调用父类构造方法的语句必须是子类构造方法中的第一条指令。二、代码:package jicheng.heavysea.java;class Person{ String n

2021-03-14 21:04:42 260

原创 爬取国家药品监督总局化妆品生产许可证的数据

需求:爬取国家药品监督总局中基于化妆品生产许可证的相关数据http://scxk.nmpa.gov.cn:81/xk/通过抓包分析:首页中对应的企业信息数据是通过ajax动态请求得到的点击进入企业的详情页,发现:url的域名都是一样的,只有携带的参数(id)不一样id 值可以从首页对应的ajax请求到的json串中获得故:域名和id值可拼接一个完整的企业详情页的url# -*-coding:utf-8 -*-import requestsimport jsonif __name__

2021-03-14 20:47:12 898

原创 java关键字(this static)

一、this关键字1.在类的方法中,使用this关键字代表的是调用此方法的对象的引用2.this 可以看作一个变量 它的值是当前对象的引用3.使用this 可以处理方法中的成员变量和形参同名的问题4.当在方法内需要用到调用到该方法的对象时,就可以用·this5.在类的构造方法中可以调用this([参数列表])来调用该类的指定构造方法class Student{ private int age; String name; double score;

2021-03-11 20:35:46 157

原创 java之包

为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。一、打包的意义标准java库是由一系列包组成 包括 java.lang java.util java.net 等等标准java包就是层次型包结构,就如同硬盘上嵌套的子目录一样,我们可以使用嵌套层次结构来组织包java 的包是为了更好

2021-03-11 20:24:55 100

原创 java访问修饰符

public 该类或非该类均可以访问private 只有该类可以访问protected 该类及其子类的成员可以访问,同一个包中的类亦可以访问默认 同一个包中的类可以访问class Student{ private int age; String name; double score; private int sex; // private 私有属性 只能在类的内容访问 privat

2021-03-11 20:03:20 98

原创 requests模块之破解百度翻译

json模块:JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数组,也就是python里面的列表。json.dump()用于将dict类型的数据转成str,并写入到json文件中。通过抓包知百度翻译中词语含义在sug包中,响应数据类型是json类型# -*-coding:utf-8 -*-import jsonimport requestsif __

2021-03-10 18:02:52 268 2

原创 requests模块之简易网页采集器

import requestsresponse = requests.get('http://www.baidu.com')print(response.status_code) # 打印状态码print(response.url) # 打印请求urlprint(response.headers) # 打印头信息print(response.cookies) # 打印cookie信息print(response.text) #以文本形式打印网页源码p

2021-03-10 16:07:47 148

原创 串的存储和基本操作

一、 串的定义串,即字符串是由零个或多个字符组成的有限序列,串中字符的个数称为串的长度子串:串中任意个连续的字符组成的子序列主串:包含子串的串字符在主串中的位置:字符在串中的序号子串在主串的位置:子串的第一个字符在主串中的位置串是一种特殊的线性表,数据元素之间呈线性关系串的数据对象限定为字符集(如中文字符、英文字符、数字字符、标点字符等)...

2021-02-10 12:02:43 630

原创 队列的链式存储

一、用链式存储实现队列// 链式队列结点typedef struct LinkNode{ int data; struct linkNode *next;}LinkNode; // 链式队列 typedef struct { //队列的队头和队尾指针 LinkNode *front,*rear;}LinkQueue;二、初始化队列//初始化队列(带头结点)void InitQueue(LinkQueue &Q){ Q.front=Q.rear=(Li

2021-02-05 16:40:52 1030

原创 独立按键和矩阵按键

当按下K1时,RXD与GND导通,输出低电平可通过软件或者硬件电路进行消抖#include "reg52.h"typedef unsigned char u8;typedef unsigned int u16;sbit led1 = P2^0;sbit k1 = P3^1;void delay(u16 i){ while(i--);}void keyset(){ if(k1 == 0){ //判断按键是否按下去 delay..

2021-02-03 16:10:08 1286

原创 树莓派3B mjpg-streamer 的使用

方法步骤如下正式开始前的配置sudo apt-get update #更新软件列表sudo apt-get upgrade #更新软件sudo apt-get install subversion #Subversion是一个自由开源的版本控制系统sudo apt-get install libjpeg8-dev #JPEG支持库sudo apt-get install imagemagicksudo apt-get install libv4l-dev #4l是小写

2021-02-03 11:06:17 270

原创 静态数码管和动态数码管

静态数码管#include "reg52.h"typedef unsigned char u8;typedef unsigned int u16;sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;u8 code word[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //code使其保存在单片机ROM中 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71

2021-02-01 22:48:30 2290

原创 C51 蜂鸣器编程

一、蜂鸣器的原理蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。三极管的作用为驱动,通过三极管放大驱动电流,从而可以让蜂鸣器发出声音。二、蜂鸣器声音的改变改变单片机引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。改变输出电平的高低电平占空比(改变高电平比上整个周期的时间),则可以控制蜂鸣器的声音大小三、代码实现

2021-01-29 16:26:34 6368 2

原创 队列的顺序存储

一、队列的定义:队列是只允许在一端进行插入,另一端进行删除的线性表特点:先入队的元素先出队,先进先出队尾:允许插入的一端队头:允许删除的一端front 指向队头元素rear 指向队尾元素的后一个元素(下一个应该插入的位置)循环队列:将存储空间在逻辑上变成“环状”判断队满和队空此时队满的情况下,会浪费一个存储空间,因为若继续存储,会使rear指向d,即rear == front,而这是判断队空的情况队列已满的条件:队尾指针的再下一个位置是队头(Q.rear+1)%MaxSize =

2021-01-29 12:36:46 646

原创 顺序栈的实现(栈的顺序存储)

一、栈的基本概念栈是只允许在一端进行插入或删除操作的线性表逻辑结构:与线性表相同数据的运算:插入、删除操作有所区别特点:后进先出二、栈的顺序存储的实现1.栈的定义和初始化注意:在内存中还要申请top栈顶指针空间,top记录的是数组的下标栈顶指针记录的是数组的下标#define MaxSize 10 //定义栈中元素的最大个数typedef struct { int data[MaxSize]; //静态数组存放栈中元素 int top; //

2021-01-28 23:26:05 1680

原创 C51 LED流水灯

LED灯闪烁#include "reg52.h"typedef unsigned char u8;typedef unsigned int u16;//对 p2^0口进行位定义sbit led1 = P2^0;//延时函数void delay(u16 i){ while(i--);}void main(){ while(1){ led1 = 0; delay(50000); led1 = 1;

2021-01-28 14:57:27 440

原创 C语言 简单选择排序法

简单选择排序是指一种排序算法,在简单选择排序过程中,所需移动记录的次数比较少。最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。一、基本思想在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。二、排序步骤:以从小到大进行排序为例:数组里面有4个元素: len = 4a[0] = 10a[1] = 1a[2] = 20a[3] = 51.第0轮选择最小数放到a[0]:

2021-01-27 11:40:08 4528

原创 c语言 冒泡排序法

一、什么是冒泡法冒泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序。二、举例实现 (从小到大)以冒泡法(从小到大)为例原理:比较相邻的元素,将值大的元素交换到右边原始数组数据:8 4 20 5 总共4个数 len = 41.冒泡法过程列出:相邻两个数比较,大的数交换到右边第0轮4 8 20 5 、4 8

2021-01-26 00:03:03 2910

转载 socket,tcp,http三者之间的区别和原理

http、TCP/IP协议与socket之间的区别下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置:7 应用层例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP6 表示层例如XDR、ASN.1、SMB、AFP、NCP5 会话层例如ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets4 传

2021-01-24 00:47:40 269

原创 顺序表和链表的比较

一、逻辑结构都是线性表,都是线性结构二、存储结构1.顺序表:顺序存储优点:支持随机存取、存储密度高缺点:大片连续空间分配不方便,改变容量不容易2.链表:链式存储优点:离散的小空间分配方便,改变容量方便缺点:不可随机存取,存储密度低三、基本操作1.创建2.销毁:顺序表:若是静态分配创建静态数组,系统会自动回收空间若是动态分配,则要手动free链表:依次删除各个结点3.增删:4.查找四、顺序表和链表的选择选择顺序表 表长可预估 查询(搜索)操作比较多选择链表

2021-01-23 23:57:04 253

原创 双链表 循环链表及静态链表

一、什么是双链表双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。二、双链表的创建和初始化typedef struct DNode{ int data; struct DNode *prior,*next; }DNode,*DLinklist;bool InitDLinkList(DLinklist &L){ L

2021-01-23 21:41:41 289

原创 线性表------顺序表的定义和操作

线性表定义线性表是具有相同数据类型的n个数据元素的有限序列,其中n为表长一、顺序表的定义定义:用顺序存储的方式实现线性表顺序存储,把逻辑上的相邻的元素存储在物理位置上也相邻的存储单元中。二、顺序表的实现–静态分配#define MaxSize 10 typedef struct{ int data[MaxSize]; //用静态的数组存放数据元素 int length ;}Sqlist

2021-01-21 11:52:44 822

原创 网络编程(基于TCP的scoket网络编程)

一、有关概述1.TCP UDP 对比:1. TCP面向连接(如打电话要先拨号建立连接)UDP 是无连接的 即发送数据之前,不需要建立连接2. TCP 提供可靠的服务,(通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达)UDP尽最大努力交付,不保证可靠交付3. TCP 面向字节流,实际上是TCP把数据看成一连串无结构的字节流UDP 没有拥塞控制 因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议)4. 每一条TCP连接只能是点到点的UDP

2020-12-30 17:54:42 336

原创 linux结构框图

Linux shellshell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器。另外,shell编程语言具有普通编程语言的很多特点,用这种编程语言编写的shell程序与其他应用程序具有同样的效果。...

2020-12-26 17:35:00 378 1

原创 文件系统的认知

什么是文件系统?常规认知: 根目录文件系统是操作系统用于明确存储设备组织文件的方法。以上说的方法:就是文件管理系统(程序),简称文件系统文件系统(文件管理系统的方法)的种类有哪些?FAT VFAT NTFS EXT1/2/3/4 HFS …树莓派查看文件系统的命令: df -Tvfat : boot(bootloader, kernel)ext4 : 根目录tmpfs : 内存文件系统什么是分区?windows: 随意(面向普通用户PC),目录即分区C(装系统的位..

2020-12-26 17:02:24 161

原创 树莓派linux源码配置和编译

一、树莓派linux源码配置驱动代码的编写驱动代码的编译需要一个提前编译好的内核编译内核就必须配置配置的最终目标会生成 .config文件,该文件指导Makefile去把 有用东西组织成内核厂家配linux内核源码,比如说买了树莓派,树莓派linux内核源码1.第一种方式:cp 厂家.config .config2.第二种方式:make menuconfig 一项项配置,通常是基于厂家的config来配置3.第三种方式:完全自己来1.如何配置树莓派的Linux内核驱动两种

2020-12-26 16:34:27 869

原创 树莓派的交叉编译及软硬链接介绍

一、交叉编译介绍交叉编译 是在一个平台上生成另一个平台上的可执行代码。比如:1.我们再windows上面编写C51代码,并编译成可执行代码,如xx.hex,是在c51上面运行,不是在windows上面运行 2. 我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上面运行,不是在ubuntu linux上面运行编译:是在一个平台上生成在该平台上的可执行代码二、为什么要交叉编译?平台上不允许或不能够安装我们所需要的编译器比如C511.因为目的平台上

2020-12-26 14:34:53 288

转载 树莓派Wiringpi库

wiringPi是一个很棒的树莓派IO控制库,使用C语言开发,提供了丰富的接口:GPIO控制,中断,多线程,等等。树莓派wiringPi库详解

2020-12-26 13:36:19 125

原创 树莓派的串口通信

初次使用树莓派串口编程,需要配置1. 修改 cmdline.txt文件cd /boot/sudo vim cmdline.txt删除【】之间的部分dwc_otg.lpm_enable=0 【console=ttyAMA0,115200】 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait2.修改 inittab文件cd /etc/sudo vim i

2020-12-26 13:32:15 243 1

原创 linux库相关概念

一、总述使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。二、分类程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared libraries)、动态加载函数库(dynamically loaded libraries)1、静态函数库,是在程序执行前就加入到目标程序

2020-12-26 13:26:29 192

原创 linux多线程编程

一、linux线程介绍1.进程和线程"进程——资源分配的最小单位,线程——程序执行的最小单位"1.典型的UNIX/Linux进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。2.进程是程序执行时的一个实例,是担当分配系统资源(CPU时间、内存等)的基本单位。在面向线程设计的系统中,进程本身不是基本运行单位,而是线程的容器。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和

2020-11-14 21:50:31 392

原创 linux进程 --- exec族函数

exec函数族:exec函数族分别是:execl, execlp, execle, execv, execvp, execvpeexec族函数的作用:我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时,该进程被完全替换为新程序。因为调用exec函数并不创建新进程,所以前后进程的ID并没有改变。功能:在调用进程内部执行一个可执行文件。可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件。函数原型:#includ

2020-11-09 15:08:18 192

原创 linux进程学习

进程有关概念:1.什么是程序,什么是进程,有什么区别? 程序是静态的概念,gcc xxx.c -o pro 磁盘中生成pro文件,叫做程序 进程是程序的一次运行活动,就是程序跑起来,系统中就多了一个进程。2.如何查看系统中有哪些进程? 使用ps指令查看 实际工作中,配合grep来查找程序中是否存在某一进程 ps -aux|grep pro3.什么是进程标识符? 每一个进程都有一个非负整数表示的唯一ID 叫做pid,类似身份证 pid = 0; 称为交换进程

2020-11-08 23:23:12 84

原创 实现CP指令

#include <fcntl.h>#include <stdio.h>#include <unistd.h>#include <string.h>#include <stdlib.h>int main(int argc,char **argv){ if(argc !=3){ printf("param is error\n"); } int fdSrc;

2020-11-08 21:46:55 211

原创 C语言文件操作函数及fopen和open的区别

编程操作 :*FILE file;定义FILE结构体指针变量,这个指针指向的FILE结构体的内存空间是系统自动分配的.打开方式描述“r”以只读方式打开文件,文件必须存在.“r+”以可读写的方式打开文件,文件必须存在.“w”以只写方式打开文件,文件不存在则创建;文件存在则擦除文件中的内容.“w+”以可读写的方式打开文件,文件不存在则创建;文件存在则擦除文件中的内容.“a”以只写方式打开文件,文件不存在则创建;文件存在则新内容从文件内容末尾开始写入.

2020-11-08 21:44:02 445

原创 文件操作原理

文件描述符:文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。按照惯例,UNIX shell 使用文件描述符0与进程的标准输入结合,文件描述符1与标准输出结合,文件描述符2与标准错误输出结合。STDIN_FILENO、STDOUT_F

2020-11-08 11:58:58 358

原创 文件编程

Linux文件编程open头文件:#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);pathname:路径名flags: 打开或创建文件的方式mode 在flags中使用O_C

2020-11-08 11:51:23 151

原创 线性表----单链表从指定节点后方插入新节点

#include <stdio.h>struct Test{ int data; struct Test *next;};void printLink(struct Test *head){ struct Test *p; p = head; while(p != NULL){ printf("data = %d\n",p->data);

2020-10-22 16:46:25 729

原创 线性表----单链表从指定节点前方插入新节点

#include <stdio.h>struct Test{ int data; struct Test *next;};void printLink(struct Test *head){ struct Test *p; p = head; while(p != NULL){ printf("data = %d\n",p->data);

2020-10-22 16:46:01 1078

原创 线性表----单链表删除指定节点

#include <stdio.h>struct Test{ int data; struct Test *next;};void printLink(struct Test *head){ struct Test *p; p = head; while(p != NULL){ printf("data = %d\n",p->data);

2020-10-22 16:45:37 227

空空如也

空空如也

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

TA关注的人

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