Other

服务器开发学习(一)

web学习 踩坑记录: 1.将WEB-INF下的web类型弄错 右键直接生成xml文件但是后缀名是tbl,导致不能正常读取 2.配置网web文件后发现不能将网址映射到我所需要的路径上,提示500错误无法打开Application 项目结构出错,将Application创建于service包下,导致无法找到Application 3.向服务器端发起post请求,请求返回一个对象,但是出现一下报错: 未对使用到的对象元素设置set与get方法(未使用到的可不设置,本来和服务器也没关系)

第二次blog

(1)PTA题目集、超星作业以及期中考试的总结性前言 知识点总结: 1.对象的继承关系.2.对于抽象类的认识与使用.3.对于四边形的各种形状判断和面积分割的方法求解.4.正则表达式的使用.5.ArrayList类中的增、删、减、查的各个作用.   题目量:题目集四共三道,期中考试共三道,农夫过河一道.  题目难度:题目集四中的三、四尤其是三较难,期中考试三道题难度是过渡的,一、二、三三道题难度依次增大,其中第三道是有关容器类保存点 、线、面难度较大,农夫过河给了大部分源代码,只需要加上一些父类添加适合的属性和方法即可,因此算是比较简单的一个.  (2)设计与分析: 题目集四7-1 sdut-String-2 识蛟龙号载人深潜,立科技报国志(II)(正则表达式): import java.util.Scanner; import java.util.Arrays; public class Main{ public static void main(String[] args){ Scanner in=new Scanner(System.in); while(true){ String s=in.nextLine(); if(s.equals(end)){ break; }else{ String[] a=s.split(\\D+); int sum=0; for(int i=0 ; i<a.length; i++){ if(!a[i].equals()){ int number = Integer.parseInt(a[i]); sum+=number; } } System.out.println(sum); } } } }  本题体现了正则表达式的使用,实现如下功能:读入关于蛟龙号载人潜水器探测数据的多行字符串,从给定的信息找出数字字符,输出每行的数字之和。 1、如果用“.”作为分隔的话,必须是如下写法:String.split(\\.),这样才能正确的分隔开,不能用String.split(.);2、如果用“|”作为分隔的话,必须是如下写法:String.split(\\|),这样才能正确的分隔开,不能用String.split(|);“.”和“|”都是转义字符,必须得加\;3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“acount=? and uu =? or n=?”,把三个都分隔出来,可以用String.split(and|or);使用String.split方法分隔字符串时,分隔符如果用到一些特殊字符,可能会得不到我们预期的结果。我们看jdk doc中说明public String[] split(String regex)Splits this string around matches of the given regular expression.

网络编程一 (网络通信协议)

TCP/IP(Tranmission Control Protocol/ Internet Protocol) 协议 TCP/IP模型 应用层 (应用层、表示层、会话层) 传输层 (TCP层) 网络层 (IP层) 物理链路层 物理层 TCP 协议 :传输控制协议 (打电话) 可靠,效率低 传输前,采用”三次握手“方式,是可靠的 TCP协议在建立连接的两个应用进程:客户端、服务端 TCP协议使用前,先建立TCP连接,形成传输数据通道 可使用大数据量传输,传输完毕后释放资源 UDP 协议: 用户数据协议 (发消息) 无需释放资源,速度快,不可靠 不能传输大量数据,64K以内 不会建立连接,不安全

C语言深度解剖-第一章-关键词

register 因寄存器数量有限,所以数据优化到寄存器的变量有限,而不是放在内存中。 因为变量不是放在内存中,所以不能用取址运算符 & 来获取register变量的地址。 static 修饰变量 静态全局变量 此变量仅限于本文件,其他文件就算用extern也不能用。 定义前引用,也需要extern。 静态局部变量 在函数体里面定义。 此变量存在于内存的静态区。 同一个文件的其他函数也不可使用此变量 修饰函数 不指代存储方式。 函数的作用域仅限于本文件,称内部函数。 作用:不同文件的同名函数,不会发生冲突。

CSS 自定义属性指北

前言 在现代浏览器中, 我们会经常看到这样的属性: element { --main-bg-color: brown; } 这里我们就来介绍一下他, 并提供一些相关的说明 简介 自定义属性(有时候也被称作CSS变量或者级联变量)是由CSS作者定义的,它包含的值可以在整个文档中重复使用。由自定义属性标记设定值(比如: --main-color: black;),由var() 函数来获取值(比如: color: var(--main-color);) 声明 声明一个自定义属性,属性名需要以两个减号(--)开始,属性值则可以是任何有效的CSS值。 如前言中的 --main-bg-color 属性 通常的最佳实践是定义在根伪类 :root 下,这样就可以在HTML文档的任何地方访问到它了: /*:root 选择器匹配文档根元素。*/ /*在 HTML 中,根元素始终是 html 元素。*/ /*也就是说:root 表示的是根元素*/ :root { --main-bg-color: brown; } 注意:自定义属性名是大小写敏感的,--my-color 和 --My-color 会被认为是两个不同的自定义属性。 同时不能包含$,[,^,(,%等字符,普通字符局限在只要是“数字[0-9]”“字母[a-zA-Z]”“下划线_”和“短横线-”这些组合,但是可以是中文,日文或者韩文,例如 body { --深蓝: #369; background-color: var(--深蓝); } 使用 element { background-color: var(--main-bg-color); } 这些自定义属性,仅当需要的时候才会计算,而并不会按其他规则进行保存。比如,你不能为元素设置一个属性,然后让它从兄弟或旁支子孙规则上获取值。属性仅用于匹配当前选择器及其子孙,这和通常的CSS是一样的。 默认值 用 var() 函数可以定义多个备用值(fallback value),当给定值未定义时将会用备用值替换。

排序-基础

一 冒泡排序 平均时间复杂度:O(N^2) 最佳时间复杂度:O(N) 最差时间复杂度:O(N^2) 空间复杂度:O(1) 排序方式:In-place 稳定性:稳定 // 冒泡排序 class BubbleSort{ public LinkedList<Integer> Sort(LinkedList<Integer> list,int len) { Integer flag; for (int i = 0; i < len; i++){ for (int j = 1; j < len - i; j++){ if (list.get(j - 1) > list.get(j)){ flag = list.get(j - 1); list.set(j - 1,list.get(j)); list.set(j,flag); } } } return list; } } 二 插入排序   平均时间复杂度:O(N^2) 最差时间复杂度:O(N^2) 空间复杂度:O(1) 排序方式:In-place 稳定性:稳定 // 插入排序 class InsertSort{ public LinkedList<Integer> Sort(LinkedList<Integer> list,int len) { for (int i = 1; i < len; i++){ Integer flag = list.

linux内核与驱动调试-使用GDB+Qemu调试Linux 内核与驱动

使用GDB+Qemu调试Linux 内核与驱动  时间:20220510,版本:V0.1 作者:robotech_erx  调试内核或者驱动除了双机调试外,还可以使用Qemu来调试。Qemu实现了GDB stub,支持对linux的内核调试。  环境: 主机:ubuntu 20.04 LTS 桌面版 Qemu:QEMU emulator version 4.2.1  1编译带调试信息的内核 内核也可以不用编译,可以直接从发行版里拷贝/下载,ubuntu等这些发行版也有专门的符号服务器。也可以使用kdress等工具从system.map里恢复一个带符号的可调试的vmlinux。  这里还是编译一个: $ sudo apt update $ sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev dwarves -y (1)指定硬件体系架构 $ export ARCH=x86 #如果是其他平台,还需要安装交叉编译器 (2)配置board config,此处配置为 x86_64_defconfig $ make x86_64_defconfig (3)配置内核 # make menuconfig  需要开启配置有: Kernel hacking---> Compile-time checks and compiler options ---> [*] Compile the kernel with debug info [*] Provide GDB scripts for kernel debugging  这里是使用Qemu实现的GDB stub来调试,所以不需要打开KGDB 。

HamsterBear Linux ST7789V FBTFT驱动适配

HamsterBear Linux ST7789V FBTFT驱动适配 平台 - F1C200s Linux版本 - 5.18 TFT屏 - 1.69寸IPS高清ST7789V 修改设备树,在spi0节点下添加 &spi0 { pinctrl-names = default; pinctrl-0 = <&spi0_pd_pins>; status = okay; spi-max-frequency = <50000000>; st7789v: st7789v@0 { #address-cells = <1>; #size-cells = <1>; compatible = sitronix,st7789v; reg = <0>; spi-max-frequency = <50000000>; rgb; buswidth = <8>; rotate = <90>; fps = <60>; spi-cpol; spi-cpha; reset-gpios = <&pio 4 10 GPIO_ACTIVE_HIGH>; /* PE10 */ dc-gpios = <&pio 2 3 GPIO_ACTIVE_LOW>; /* PC3 */ debug = <1>; }; }; 确定内核config打开 需要注意的是,fbtft的驱动只有在内核framebuffer相关驱动开启后才会出现,所以要先开启fb驱动支持 Device Drivers -> Graphics support -> Frame buffer Devices --->,编译进内核 可根据需要将控制台映射到fb功能开启 这里我同时选择了16色的Tux 启动logo 然后寻找fbtft驱动,路径如下: Device Drivers -> Staging drivers -> Support for small TFT LCD display modules --->,编译进内核 修改drivers/staging/fbtft/fb_st7789v.

深入浅出PID算法

前言 博主是工业互联网行码农一枚,虽然不是算法工程师和自动化方向的,但经常参加同事介绍控制算法原理的培训,慢慢的对小部分控制算法有一定了解,其中使用频率最高的控制算法非PID莫属。很多同学在学习PID的时候,会被繁杂的数学公式吓倒,今天我们就抛开数学公式,用逻辑和例子给大家讲明白“到底什么是PID”? PID算法简介 PID是一种控制算法,是 Proportional(比例)、Integral(积分)、Differential(微分)的缩写。它是连续系统中技术最为成熟、应用最为广泛的一种控制算法。 PID控制器主要适用于基本上线性,且动态特性不随时间变化的系统。简单来说就是:类似于需要将某一个物理量“保持稳定”的场合,PID基本都能派上用场。 工业中PID典型的应用场景有:温度控制、流量控制、液位控制等。 生活中PID的应用也很常见:自来水的压力控制、空调的温度控制、平衡车的平衡控制、汽车的定速巡航控制、无人机的悬停控制、火箭飞机的姿态调整等。 实际运行经验和理论分析都表明,运用PID控制算法对许多工业过程进行控制都能得到比较满意的效果。 PID的概念及公式 PID的基本思路是根据偏差量的大小,运用比例、积分、微分计算出一个控制量,将这个控制量输入被控制的系统,系统接收到该输入量后会输出一个相应的输出量,PID控制器再检测该输出量,并再计算偏差,然后再循环以上过程。 原始公式如下: $u(t)=K_p \Bigg( e(t)+\frac{1}{T_i}\int^t_0e(t)dt+T_d\frac{de(t)}{dt}\Bigg)$ $K_p$ —— 控制器的比例系数; $T_i$ —— 积分时间常数; $T_d$ —— 微分时间常数; $u(t)$ —— PID控制器的输出信号; $e(t)$ —— 给定值$r(t)$与测量值之差。 公式可简化为: $u(t)=K_p * e(t) + K_i * \sum_{n=0}^t e(t) + K_d * (e(t) - e(t-1))$ $K_p$ —— 控制器的比例系数; $K_i$ —— 控制器的积分系数; $K_d$ —— 控制器的微分系数; $u(t)$ —— PID控制器的输出信号; $e(t)$ —— 给定值$r(t)$与测量值之差。 $e(t-1)$ —— 上一次给定值$r(t)$与测量值之差。 很多同学可能会被上面数学公式整懵了,没关系,我们先看完下面例子,再回头看来公式,相信你能对以上公式有新的认识。 在学习PID之前,我们需要先了解什么是 开环控制 和 闭环控制,这2个概念能够帮助我们更好的理解PID。