-- 创建书名表 CREATE TABLE tb_books( id int primary key auto_increment, name varchar(24) not null comment 书籍名称, isbn varchar(15) not null comment 编号 ); -- 插入书名 INSERT INTO tb_books(name, isbn) values (梦里花落知多少, '9787102832855'), (盗墓笔记, '9787102885255'), (我不, '9787102859865'), (你猜, '9787102896745'); -- 创建作者表 CREATE TABLE tb_author( id int primary key auto_increment, name varchar(12) not null comment 作者 ); -- 插入作者 INSERT INTO tb_author(name) values (三毛), (南派三叔), (大冰); -- 创建关系表 CREATE TABLE tb_book_author( id int primary key auto_increment, book_id int, author_id int, foreign key(book_id) references tb_books(id) ON update cascade ON DELETE cascade, foreign key(author_id) references tb_author(id) ON DELETE cascade ON update cascade ); -- 插入关系 insert into tb_book_author(book_id, author_id) values(1, 1), (2, 2), (3, 3), (4, 3); 上面仅仅演示了 多对多的情况, 无非就是通过中间表来绑定双方的关系
为防止 缓存穿透的情况,我们有时候会引入 布隆过滤器来 增加一层防护, 具体demo如下
一、 搭建好 Redisson 环境, 详见 https://www.cnblogs.com/cgsdg/p/16225349.html
二、 创建 布隆过滤器, 并添加基础数据
import org.redisson.api.RBloomFilter; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class BloomDemo { @Autowired private RedissonClient redissonClient; public void createBloom() { RBloomFilter<String> bloomFilter = redissonClient.getBloomFilter(bloom); bloomFilter.tryInit(1000000, 0.03); //预测插入数量, 误判率 bloomFilter.add(first); bloomFilter.add(second); bloomFilter.add(third);; System.out.println(bloomFilter.contains(second)); System.out.println(bloomFilter.contains(automan)); System.out.println(bloomFilter.count()); } } 测试结果为:
进程管理 1.进程管理命令 top:动态显示当前系统正在执行的进程的相关信息 top各行信息: 1.top - 14:40:34 up 20:25, 3 users, load average: 0.00, 0.01, 0.04 2.Tasks: 99 total, 2 running, 97 sleeping, 0 stopped, 0 zombie 3.%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st 4.KiB Mem : 995896 total, 346452 free, 148176 used, 501268 buff/cache 5.KiB Swap: 1048572 total, 1048564 free, 8 used. 633100 avail Mem 第一行:系统相关 top:命令 14:40:34:当前系统的时间 up 20:25:该服务器运行的时间 3 users:当前登录用户的数量 load average:0.
原题传送门
1. 题目描述 2. Solution 1 1、思路分析 中序遍历:左、根、右。递归实现 2、代码实现
package Q0099.Q0094BinaryTreeInorderTraversal; import DataStructure.TreeNode; import java.util.ArrayList; import java.util.List; public class Solution1 { /* 方法一: 递归 */ public void inorder(TreeNode root, List<Integer> ans) { if (root != null) { inorder(root.left, ans); ans.add(root.val); inorder(root.right, ans); } } public List<Integer> inorderTraversal(TreeNode root) { List<Integer> ans = new ArrayList<>(); inorder(root, ans); return ans; } } 3、复杂度分析 时间复杂度:
import re,sys,time,requests def headx(aab): ab=[] ax1=aab.split('\n') for i in ax1: ax2=i.split(': ') ab.append((ax2[0],ax2[1])) tt=dict(ab) return tt ab='''Host:v2-cty05.kwaicdn.com Connection:keep-alive Range:bytes=0-819199 user-agent:Hodor/NULL/878090sUpWs7vfa6DMrMOaNI7L6FWUuq/cache Request-Id:878090sUpWs7vfa6DMrMOaNI7L6FWUuq Accept-Encoding:identity X-Client-Info:model=Redmi Note 8 Pro;os=Android;nqe-score=26;network=WIFI;signal-strength=4;''' ##url=http://v2-cty05.kwaicdn.com/ksc1/WyO26L9VkrCCICHA2qxByVq6J9ZUolfgQCJeCL__WiJr6BKoMbf6vCmS8RpNZU1VRQddG-1yZQ4a4x5uersqTi1rIgrU3yyeGO9wkqZVdmcgxfa5dpBm0QjOn_3rbvspgs1rE5iUiYqlm_1chbbqE2VPhb0ktoLq6arDhGCPoYi2kk9aUsUTgWhnGxY4HW94.mp4?pkey=AAU0YDo60R_Se7OhFhN87ATmRNax1snrUtybCtDPOt8YH1z3jcRvAp9IC8pFBN3A9_6575IyT4h1-7woYbzifNfNJyBqmrsYrZEEptMZulUee7wyMcZuEWpbkJno-p33Vr0&tag=1-1651703151-h-0-3atxedsk9p-c18046dfc81269b7&clientCacheKey=3xghkva3s5ruq4k_b.mp4&di=7179d5f6&bp=10051&tt=b&ss=vp ##head1=headx(ab) ##head1[user-agent]=a/com.kuaishou.nebula/10.2.50.3105/4.8.9.12.3460.8969e1e/886615a1VcYz044cLVqaRRMmGXVBNrrN/916087jhw6vEOtlWDqo5Wqv66A4iYx6P/cache ##aa=requests.get(url,headers=head1) ##with open('aa.mp4',mode='wb') as f: ## f.write(aa.content) abb='''Host: gdfp.gifshow.com Content-Length: 1123 Content-Type: application/json; charset=UTF-8 Cookie: userId=2161156699;platform=ANDROID_PHONE;channel=XIAOMI;mod=Xiaomi%28Redmi+Note+8+Pro%29;globalId=DFPB2D9DB43F5AB07B1AABA1DA6F463E62236DB53AAF14EB0F8A2AB99D8D9D46;sysver=ANDROID_10;rdid=ANDROID_44be5172df853034;did_tag=7''' head2=headx(abb) url1=http://gdfp.gifshow.com/kuaishou/temp/data/s?secretkey=117d05716732fb8835c5b32cdc6c5e9e&sign=bb10774d112e8553e9b1a9f9532fb31e&appkey=20001×tamp=1651703159 aa=requests.post(url1,headers=head2)
问题描述 有段时间没玩,在创建react项目时,报如下错误
error @typescript-eslint/
[email protected]: The engine node is incompatible with this module. Expected version ^12.22.0 || ^14.17.0 || >=16.0.0. Got 14.15.0 error Found incompatible module. info Visit https://yarnpkg.com/en/docs/cli/create for documentation about this command. 解决方案 在nodejs官网下载nodejs再次安装下即可
https://nodejs.org/zh-cn/download/
查看nodejs的版本号
node -v
1、执行下面代码,结果如何?是否会查出DB_i这条数据,若会,通过网络搜索或同学共同探究出原因? 2、使用其他符号作为转义字符,比如定义ESCAPE ' # '或其他符号,看是否也能转义? 查询以DB_开头,且倒数第3个字符为 i的课程的详细情况。 SELECT * FROM Course WHERE Cname LIKE 'DB\_%i_ _' ESCAPE ' \ ' 首先插入数据: 查询以DB_开头,且倒数第3个字符为 i的课程的详细情况。 SELECT * FROM Course WHERE Cname LIKE 'DB\_%i_ _' ESCAPE ' \ ' 执行后得到: 可见会查出DB_i这条数据。 进行探究,发现匹配字符串后面无论加多少个_都会匹配到这两条数据,并不能做到查询倒数第3个字符为 i 甚至在D后面加任意个_也能做到 在数字后面加任意个_也能做到查询所有开头为数的数据 经过尝试,加任意个空格和任意个_看似都有相同的效果 但是当仅为数加任意空格时,则匹配不到,初步猜测是因为没有任何一条数据的Cname为数 也就是说,末尾加无数个空格匹配时会按照空格前面的字符去匹配,而末尾加无数个_时会进行包含_前面字符的整体的模糊匹配 例如此处数末尾加无数空格时,相当于会去匹配数据库、数学、数据结构、数据处理在数和其它字符中间有没有空格,结果当然是没有,所以什么都没查询到 所以现在依旧可以猜测末尾加任意_时能匹配是因为数据库引擎主动在后面加了空格或者类似空格的空字符 在网上查询资料可以得知: 其中有人提到如果匹配时字符串长度不一样会先扩展较短的字符串,我猜测这可能就是最终的原因,至于扩展时用的是空格还是空字符就不重要了。 关于如何查询匹配到倒数第三个字符,我还找到了一些解决方法: 即使用SUBSTRING函数来实现。 该处也提到了这个问题,解释了为什么我们的查询用的是LIKE还是出现了问题,同时还提到了另一个坑 使用其他符号作为转义字符经检验可以成功: 但是使用通配符作为转义字符是不行的。
1. xxx is not defined - 表示你使用了一个 xxx 变量 - 你使用的这个变量没有被声名过 2. xxx is not a function - 表示你写了一段代码是 xxx() - 表示 xxx 这个变量有,但是不是一个函数你把他当作一个函数来调用 3. Cannot set property 'b' of undefined - 不能给 undefiend 设置一个 b 属性 - 证明你写了一段代码 xxx.b = yyy - 你写的 b 前面的东西是个 undefiend 4. Cannot read property 'clientWidth' of null - 不能从 null 里面读取一个 clientWidth 属性 - 证明你写了一个 xxx.clientWidth - 前面这个 xxx 是一个 null 5. Cannot read property 'clientWidth' of undefiend - 不能从 null 里面读取一个 clientWidth 属性 - 证明你写了一个 xxx.
背景:
使用spring session,把session存储到redis里,对session的管理和扩展更方便,还有一个好处是,不不需要自己维护session的状态,过期会自动删除。
在spring boot里使用redis,需要先引入redis的依赖,如下:
<!-- redis --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> </dependency> <!-- redis 客户端 --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> 一、判断redis某个key的类型
DataType testType = redisTemplate.type(testRedis); 如果读取到redis的key的类型是Integer,想要转成String,怎么办呢?
不建议使用 String.valueOf,很可能会报类型转换错误,正确的方法是使用Integer的toString方法,举个例子:
Integer testValue = (Integer) redisTemplate.opsForValue().get(testRedis);
String testString = testValue.toString();
二、写hash
HashMap<String, Object> map = new HashMap<>(); map.put(name, 张三); map.put(age, 23); map.put(sex, 男); redisTemplate.opsForHash().putAll(user, map); //使用entries获取整个user对象 log.info(user = {}, redisTemplate.opsForHash().entries(user)); 三、读hash
Map<Object, Object> entries = redisTemplate.
1. Perceptron \(\text{If }\sum_iw_ix_i+b\ge 0\)
\[\begin{align} f(x)=1 \end{align} \]
\(\text{Otherwise, } f(x)=0\)
\(\large \textbf{Perceptron Algorithm:}\)
\(\text{Start with }w^0=0\) $\text{While }\exist n_k \text{ s.t. } y_{n_k}(w^k\cdot x_{n_k})\leq 0,\text{ update }w^{k+1} = w^k+y_{nk}x_{nk} $ \(\text{Code}\):
def train_perceptron(x, y, nb_epochs_max): w = torch.zeros(x.size(1)) for e in range(nb_epochs_max): nb_changes = 0 for i in range(x.size(0)): ### cross the batch_size if x[i].dot(w) * y[i] <= 0: w = w + y[i] * x[i] nb_changes = nb_changes + 1 if nb_changes == 0: break; return w \(\text{We can get convergence under 2 assumptions:}\)