写点什么

ARTS 打卡第三周

作者:苏籍
  • 2023-09-01
    浙江
  • 本文字数:2642 字

    阅读完需:约 9 分钟

Algorithm

复原 IP 地址


主要思路:回溯算法 DFS 模版,先画图找到规律,进行剪枝


class Solution {     List<String> res = new ArrayList<>();    public List<String> restoreIpAddresses(String s) {
int len=s.length(); if(len<4||len>16){ return res; }
dfs(s,len,0,4,new ArrayList()); return res; }
public void dfs(String s,int len,int beginIndex, int resuide,List<String> path){
if(beginIndex==len){
if(resuide==0){ res.add(String.join(".",path)); } return; }
for(int i=beginIndex;i<beginIndex+3;i++){ if(i>=len){ break; } if(len-i >resuide*3){ continue; } if(judgeIpSegment(s,beginIndex,i)){
String curIpSegement=s.substring(beginIndex,i+1); path.add(curIpSegement); dfs(s,len,i+1, resuide-1, path); path.remove(path.size()-1); }
}
}
public boolean judgeIpSegment(String s,int left,int right){
int length=right-left+1; if(length>1 && s.charAt(left)=='0')return false;
int res=0; while(left<=right){ res=res*10 + s.charAt(left)-'0'; left++; } return res>=0&& res<=255;


}

}
复制代码


Review

今天看的一篇是 MySQL 官方文档,关于索引

https://dev.mysql.com/doc/refman/5.7/en/column-indexes.html

索引底层结构式 B+树,能够帮助快速定位到指定条件下的数据 的一种排好序的数据结构


索引可以通过 CREATE TABLE 时候通过 Key 指定、ALTER TABLE ADD、CREATE INDEX 三种方式

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name    [index_type]    ON tbl_name (key_part,...)    [index_option]    [algorithm_option | lock_option] ...
key_part: col_name [(length)] [ASC | DESC]
index_option: { KEY_BLOCK_SIZE [=] value | index_type | WITH PARSER parser_name | COMMENT 'string'}
index_type: USING {BTREE | HASH}
algorithm_option: ALGORITHM [=] {DEFAULT | INPLACE | COPY}
lock_option: LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}sq
复制代码


每个表最多 16 个索引。 每个索引最多支持 16 列。

text 和 blob 可以设置索引,但是需要设置索引长度


每个索引长度限制

关于索引长度的限制,最主要的因素就是存储引擎和字符集。

字符集的影响在于,不同的字符集,单个字符包含的最大字节数有所不同。

对于不同的字符集, 一个字符所占用的字节数也不一样.

  • latin1编码一个字符占用一个字节

  • gbk编码一个字符占用两个字节

  • utf8编码一个字符占用三个字节

  • utf8mb4 一个字符最多包含 4 个字节


  1. innodb 引擎下的索引长度限制

未开启 innodb_large_prefix 时候默认是默认是 767 字节,utf8 每个字符占用 3 个字节、utf8bm4 占用 4 个字节,因此对应的 varchar(255)和 varchar(191)

开启 innodb_large_prefix 时候(5.7 及以上默认开启)在 Innodb 中最长 3072 字节。包括联合索引也受这个长度限制


  1. myisam 引擎索引长度限制

myisam 引擎的每个索引列长度限制为 1000 字节,所有组成索引列的长度和不能大于 1000 字节


创建索引时候 innodb_strict_mode 限制

CREATE INDEX 时,如果指定的索引前缀长度超过了列定义的长度上限,则会出现以下两种场景,

  • 非唯一索引,如果设置 innodb_strict_mode=on,该操作就会抛出一个错误,禁止执行,如果设置 innodb_strict_mode=off,则索引会自动按照列定义的长度上限进行创建,只会提示一个 warning。

  • 唯一索引,无论设置 innodb_strict_mode 与否,都会提示错误,禁止执行,因为这可能导致非唯一的值插入的到表中,违反唯一性约束。


经过验证

创建联合索引时候,如果联合索引多列的定义长度 超过 3072 则会报错

创建单列索引,如果该列超过 3072 不会报错,创建成功,但是索引会自动阶段

通过 ALTER 创建单列索引指定长度时候,会报错。 CREATE TABLE 时候指定 KEY 并不会报错


为什么是 3072 个字节?这个没找到是在一个博客上看到的

原因是1个数据页16K。Mysql使用B+树的数据结构,所以一个索引节点至少要存放两个索引项,否则就退化成链表了,那么1个索引项是8K考虑到二级索引会记录索引信息+主键信息,那么考虑极端情况,索引信息+主键信息都占了50%。
考虑到还需要预留一些记录一些其他空间,取3072
复制代码


Tips


SCP 复制指令

Linux scp 命令用于 Linux 之间复制文件和目录。

scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。

scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。


  1. 从本地复制到远程

scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file][-l limit] [-o ssh_option] [-P port] [-S program][[user@]host1:]file1 [...] [[user@]host2:]file2
复制代码

简易写法:scp [可选参数] file_source file_target


scp local_file remote_username@remote_ip:remote_folder

scp * xxx@ip:/home/suji/
复制代码


  1. 从远程复制到本地

从远程复制到本地,只要将从本地复制到远程的命令的后 2 个参数调换顺序即可,如下实例

scp suji@10.231.232.183:/usr/local/es/elasticsearch-7.6.1/config/elasticsearch.yml /Users/suji/Documents/
复制代码

具体可参考:https://www.runoob.com/linux/linux-comm-scp.html

Share

今天分享的是从吴军老师专栏获取的思考

专业与业余的区别


专业和业余 用打羽毛球来说,业余的人偶尔也能打出一两个或者一两场好球,但是大多数时间发挥是不稳定的,且容易沾沾自喜,而专业的人基本大多数时间都能稳定打出好的球,情绪也比较稳定。

名医和一般的医生区别,并不是名医就一定能治疗疑难杂症,而是他的治疗效果可以预见


专业的人的特点

  1. 在绝大多数情况,都不会带个人情绪到工作中,影响自己的判断和工作

  2. 具有专业素养,能够遵守流程和行业规定。有章法

  3. 具有专业素养,能够愿意画功夫寻找更好的答案,不是交差了事

  4. 具有相对完整的领域知识 或者成体系的知识。 而不是一些知识点。这样才能具有分析问题、解决未知问题的能力

  5. 能力是动态进步的,不断学习,不断应用,不断进步


要在自己熟悉的领域培养好专业素养。养成好的习惯,容易产生好的结果


用户头像

苏籍

关注

还未添加个人签名 2019-01-30 加入

还未添加个人简介

评论

发布
暂无评论
ARTS打卡第三周_ARTS 打卡计划_苏籍_InfoQ写作社区