Leetcode.5
1234567891011121314151617class Solution {public: string longestPalindrome(string s) { string res = ""; for(int i = 0; i < s.size(); i ++){ int l = i - 1, r = i + 1; while(l >= 0 && r < s.size() && s[l] == s[r]) l --, r ++; if(res.size() < r - l - 1) res = s.substr(l + 1, r - l - 1); l = i, r = i + 1; while(l >= 0 && r < s.size() && s[l] == s[r]) l --, ...
Leetcode.8
123456789101112131415161718192021class Solution {public: int myAtoi(string s) { int res = 0, sign = 1, i = 0, n = s.size(); while(s[i] == ' ') i ++; //处理空格 if(s[i] == '-'){ //处理符号 sign = -1; i ++; } else if(s[i] == '+') i ++; while(i < n && isdigit(s[i])){ //处理数字 if(res > IN ...
知识点
位运算按位异或(^):相同为0,不同为1
可以理解为无进位相加, 满足交换律结合律
0^x = x x^x = 0
按位或运算(|):有1为1
按位与运算(&):同1为1 x & 1 = 1, x 为奇数/判断最低位是否为1
**~**:取反运算
左移:m<<n 表示把m左移n位,最左边的n位将被丢弃,同时在最右边补上n个0
右移:m>>n 表示把m右移n位 m>>1即除以2
x & (-x) 即 x & (~x + 1) 可以获得x的最后一个1
补码:计算机通常以二进制补码的形式存储整数。最高位是符号位,0 表示正数,1 表示负数,其余位为数字位。
正数补码:即原码。如 +3 的二进制补码为 0011。
负数补码:其原码的所有数字位取反,再加一。如 -3 的补码为1101。
idea 快捷键
Idea小tips需要创建新的类时,可以直接在目录中复制粘贴代码,不需要先新建并命名类再粘贴。
自动生成对应方法:alt + 回车
从service接口跳转到service实现类:alt+ control +点击service接口名
查看方法注释:ctrl + q
.var 自动生成等式左边的接收值
blog system- part 3
二、博客前台1、热门文章列表需求:展示浏览量最高的前10篇文章的标题、浏览量。点击跳转到具体的文章。*不展示草稿、删除的文章。按照浏览量进行降序排序。
数据库:article表
步骤
①分析文章表需要哪些数据库字段
②接口设计:Swagger(get/post,需不需要传参数,返回哪些属性)
③写统一响应类和枚举类
④写hotArticleList的2层
⑤跨域配置
⑥启动前端(node版本要适配),可以看到成功返回信息
优化
①建vo包,新建实体类HotArticleVo,用它封装前端需要的数据。在service实现类中进行bean拷贝(学习如何debug查看对象内容)
②字面值处理(定义成常量)
③bean拷贝工具类封装
2、分类列表需求:展示所有分类。①只展示有正常文章(非草稿)的分类 (多表查询)②是正常状态的分类
数据库:article表、category表
步骤
①category表字段设计
②easycode生成entity,mapper接口,service接口,service实现类
③代码实现:不推荐多表查询,写单表的(函数式编程,只返回id + name) ...
blog system- part 2
二、博客前台准备工作
①安装easycode插件
②改easycode中MybatisPlus模板代码,生成Article实体类
③手写mapper接口 service接口实现类
④创建Controller测试接口(放在blog module下)
⑤注释sangeng-framework中的SpringSecurity依赖,方便测试(记得刷新Maven, 并点install)
⑥进行测试
blog system- part 1
一、项目准备我们需要写前台和后台两套系统。两套系统的前端工程都有。所以我们只需要写两套系统的后端。
①创建工程,改父模块pom文件
②创建三个子模块(公共framework、前台blog、后台admin),前台、后台模块依赖公共模块,分别改pom文件
注意:子模块pom的dependencies不要写版本号,因为父模块pom里面已经规定好了
嵌入式
Lab 1基本设置:
Tools >> Port: COM.
Tools >> Board: >> Arduino Nano
Tools >> Processor: >> ATmega328P(Old Bootloader)
1.1
Led L 连着pin13
程序:
①设置pin13为输出模式
②让pin13输出HIGH,点亮L,维持1s
②让pin13输出LOW,熄灭L,维持1s
1.2
按下switch11时,会给pin2 输入LOW信号
程序:
①设置pin13为输出模式,pin2为输入模式
②如果没有按键,让pin13输出HIGH,点亮L;如果按键,让pin13输出LOW,熄灭L
1.5
task1 led1 task2 led2 task3 led3 task10 ledL
Light Dependent Resistor光敏电阻
Leetcode.1 两数之和
123456789101112class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int, int> hash; for(int i = 0; i < nums.size(); i ++){ int ans = target - nums[i]; if(hash.count(ans)) return{hash[ans], i}; hash[nums[i]] = i; } return {}; }};
Lesson in CUHK
数字签名资料:李yl老师视频
数字签名过程:
发送方使用哈希函数对原文进行哈希,得到消息摘要。
发送方使用自己的私钥对消息摘要进行加密,生成数字签名。
发送方将数字签名和原文一起发送给接收方。
接收方使用发送方的公钥对数字签名进行解密,得到消息摘要。
接收方使用相同的哈希函数对原文进行哈希,得到消息摘要。
接收方比较两个摘要是否相同,如果相同,则验证成功,否则验证失败。
注意:
hash函数不可逆,是单向的,不能通过hash函数的结果推算出原文
别人的公钥你可以拥有,自己的私钥只有自己拿着。所以可以拿着自己的公私钥,和别人的公钥
别人用自己私钥加密的,你可以用他的公钥解,这是数字签名(确保是他发的)。别人也可以用你的公钥加密,这个文件只有你的私钥能打开,这是密文(确保安全性)。


