ARTS第一周,2019年3月17日,星期日,天气晴。

A:算法学习(Algorithm)

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:

L   C   I   R
E T O E S I I G
E D H N

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例1:

输入: s = "LEETCODEISHIRING", numRows = 3
输出: "LCIRETOESIIGEDHN"

示例2:

输入: s = "LEETCODEISHIRING", numRows = 4
输出: "LDREOEIIECIHNTSG"
解释: L D R
E O E I I
E C I H N
T S G

算法描述:这个题需要找到规律,按着规律分析即可。先将字符串按照题目规律存放在字节数组中,然后遍历二维数组即可。

代码如下:

class Solution {
public String convert(String s, int numRows) {
if (s == null || s.length() < 1 || numRows <= 1) {
return s;
} int len = s.length();
// 存储转换后的图像
char[][] arrs = new char[numRows][len];
int row = 0, col = 0;
int index = 0;
while (index < len) {
while (row < numRows && index < len) {
arrs[row++][col] = s.charAt(index++);
}
row --; // row 回到最后一行
while (row > 0 && index < len) {
arrs[--row][++col] = s.charAt(index++);
}
// row 回到第二行, col列的第一个字符已经被上面的循环填充
row ++;
} StringBuilder ret = new StringBuilder();
for(int i = 0; i < numRows; i++) {
for (int j = 0; j < len; j ++) {
char c = arrs[i][j];
if(c != '\u0000') {
ret.append(c);
}
}
}
return ret.toString();
}
}

R:Review 英文文档

1、Java性能监控工具:jps

2、链接:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jps.html

3、jps 命令可以列出当前机器上运行的所有 JVM进程,包括 jps 进程自身。

命令格式:jps [option] [hostid]

  - option:选项参数,在没有指定选项参数时,则只会打印 进程端口号应用程序名(或JAR文件名)的简短形式。

  - hostid:主机id,好像可以打印远程机器上的JVM进程信息。如果不指定 hostid,则默认为当前主机。

options:  

  -q : 禁止显示类名、Jar文件名、传递给主方法的参数,只显示本地JVM的端口号列表。

   -m : 显示传递给主方法的参数,如果没有参数只显示主方法类名。对于嵌入式的jvm,值可能为null。

   -l : 显示应用程序的主类的完整包路径名,或应用程序的 jar 文件的完整路径名。

    例如:在idea中启动SpringBoot项目,打印出主类的全路径名

    例如:在命令行通过 java -jar xx-0.0.1-SNAPSHOT.jar 启动项目,输出Jar文件的完整名称。

  -v : 显示启动时传递给jvm的参数。

  -V : 禁止显示类名、Jar文件名、传递给主方法的参数,只显示本地JVM的端口号列表。

hostid:

  如果需要查看其他机器上的 jvm 进程,需要在待查看机器上启动 jstatd 服务,然后通过jps命令查看。

T:技术总结(Technology)

mysql的存储引擎总结:

1、InnoDB存储引擎

  InnoDB 是 mysql 的默认事务型引擎,同时也是使用最广泛的存储引擎。他被设计用来处理大量的短期(short-lived)事务,短期事务大部分情况是正常提交的,很少会被回滚。

  InnoDB 的性能和自动崩溃恢复特性,使得它在非事务型存储的需求中也很流行。因此 InnoDB 在事务型需求和非事务需求中都使用很广泛。

InnoDB概览

  InnoDB 的数据存储在表空间(tablespace)中,表空间是一个由InnoDB管理的黑匣子,由一系列的数据文件组成。在mysql4.1之后,InnoDB可以将每个数据表和索引存储存放在单独的文件中。InnoDB也可以使用裸设备作为表空间的存储介质。

  InnoDB 采用 MVCC(多版本并发控制)支持高并发,并且实现了四个标准的隔离级别(读未提交、读已提交、可重复读、串形化)。其默认的隔离级别是REPEATABLE READ(可重复读),并且通过间隙锁(next-key locking)策略防止幻读的出现。间隙锁使得InnoDB不仅仅锁定查询涉及的行,还会对索引中的间隙进行锁定,防止幻影行的插入。

  InnoDB 表是基于聚簇索引建立的,聚簇索引对主键查询有很高的性能。但是它的二级索引都必须包含主键列,因此主键列要尽可能的小。InnoDB的存储格式是平台独立的,也就是说可以将数据和索引文件从Intel平台复制到 PowerPc平台。

  InnoDB 内部做了很多优化,包括从磁盘读取数据时采用的可预测性预读,能够在内存中自动创建 hash索引 以加速读操作的自适应哈希索引(adaptive hash index),以及能够加速插入操作的插入缓冲区(insert buffer)等。注:建议阅读官方手册中的"InnoDB 事务模型和锁",还有了解 InnoBD的MVCC架构。

  作为事务型存储引擎,InnoDB 通过一些机制和工具支持真正的热备份,Oracle提供的 MySQL Enterprise Backup、Percona 提供的开源的 XtraBackup 都可以做到这一点。MYSQL 的其它存储引擎不支持热备份,要获取一致性的视图需要停止对所有表的写入,而在读写混合的场景中,停止写入可能也以为着停止读写。

2、MyISAM 存储引擎

  MySQL 5.1 及之前,MyISAM是默认的存储引擎。MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务和行级锁、崩溃后的安全恢复。MyISAM绝不是一无是处,对于只读的数据,或者表比较小,可以忍受修复(repair)操作,则依然可以使用MyISAM引擎。

MyISAM存储:

  MyISAM会将表存储在两个文件中:数据文件和索引文件,分别以 .MYD 和 .MYI为扩展名。mysql 会根据表定义来决定采用动态行还是静态 (长度固定) 行。 MyISAM表可以存储的行记录数,取决于可用的磁盘空间或者操作系统中单个文件的最大尺寸。

  在MySQL5.0中,MyISAM如果是变长行,默认配置只能处理 256TB 的数据,因为指向数据记录的指针长度是6字节。在更早版本中,指针长度默认4字节,所以只能处理4GB的数据。而所有的MYSQL版本都支持 8字节的指针。所以要改变 MyISAM表指针的长度 (调高或调低),可以通过修改表的 MAX_ROWS 和 AVG_ROW_LENGTH 选项值实现,两者想乘就是表可能达到的最大大小。修改这两个参数,会导致整张表和索引重建,需要很长时间。

MyISAM特性:

  加锁与并发:mysql会对整张表进行加锁(共享锁或排他锁)。但是在表有读取查询时,也可以插入新的记录(这就是并发插入,CONCURRENT INSERT)。

  修复:对于 MyISAM表,mysql 可以手工或者自动 执行检查和修复操作,这里的修复和事务恢复以及崩溃恢复是不同的概念。执行表的修复可能会导致一些数据的丢失,而且修复很费时。可以通过 CHECK TABLE mytable 检查表的错误,如果有错误可以通过执行 REPAIR TABLE mytable 进行修复。另外,如果mysql服务器已经关闭,可以通过 myisamchk 命令行工具进行检查和修复操作。

  索引特性:对于 MyISAM表,即使是 BLOB 和 TEXT等长字段,也可基于前 500个字符创建索引。 MyISAM表也支持全文索引(基于分词创建的索引),支持复杂的查询。

  延迟更新索引健:创建 MyISAM表时,如果指定 DELAY_KEY_WRITE 选项,在每次修改执行完成时,不会立即将修改的索引数据写入磁盘,而是会写入内存中的键缓冲区(in-memory key buffer),只有在清理键缓冲区或关闭表时才会将对应的索引块写入磁盘。这种方式可以提高性能,但是在数据库或主机崩溃时会造成索引损坏,需要进行修复操作。延迟更新索引的操作可以在全局设置,也可以单个表设置。

MyISAM 压缩表

  如果表创建并导入数据之后,不会进行修改,这样的表或许适合采用  MyISAM表压缩表。

  可以使用 myisampack 对  MyISAM表进行压缩(也叫打包pack)。压缩表是不可以修改的(除非先解压缩、修改数据、再压缩)。压缩表可以极大减少磁盘空间占用,减少磁盘I/O,从而提升查询性能。压缩表支持索引,但索引是只读的。

  以现在的硬件能力,对于大多数场景,读取压缩表数据时的解压带来的开销影响并不大,而减少I/O带来的好处要大的多。压缩时表中的记录是独立压缩的,所以读取单个行时不需要解压整个表(甚至不用解压整个页面)

MyISAM 性能

   MyISAM 引擎设计简单,数据紧密存储,在某些场景下性能很好。但是 MyISAM的表锁是非常典型的性能问题。

3、MYSQL 内建的其他存储引擎

Archive引擎

  Archive引擎只支持 INSERT 和 SELECT 操作。在MySQL5.1之前不支持索引。Archive引擎会缓存所有的写并利用 zlib 对插入的行进行压缩,比MyISAM表的磁盘I/O更少。但是每次 SELECT 都要全表扫描。所以:Archive 表适合日志类或数据采集类应用,这类应用做数据分析时往往需要采集全部数据;或者在一些需要更快速的 INSERT 操作的场合下也可以使用。

  Archive引擎支持行级锁和专用的缓冲区,可以实现高并发插入。在一个查询开始到返回所有行数之前,Archive引擎会阻止其他的 INSERT操作,实现一致性读。另外也实现了批量插入在完成之前对读操作不可见。这种机制模仿了事务和MVCC的一些特性,但Archive引擎不是一个事务型引擎,而是针对插入和压缩做了一些优化。

Blackhole引擎

  Blackhole引擎没有实现存储机制。但服务器会记录 Blackhole表的日志,所以可用于复制数据到备库,或者简单记录到日志。(不推荐使用)

CSV引擎

  CSV引擎可以将普通的 CSV文件作为 MYSQL的表来处理,但这张表不支持索引。CSV引擎可以在数据库运行时拷入或烤出文件。可以实现 Excel数据 -> CSV文件 -> 复制到MySQL数据目录下,然后在 MYSQL中打开使用。同理,外部程序也可以读取 CSV格式的数据。因此 CSV引擎可以作为一种数据交换的机制,很有用。

Memory引擎

  如果要快速的访问数据,并且数据不会被修改,重启后丢失也没关系,那么可以使用 Memory表。Memory表比MyISAM 至少快一个数量级,因为数据都保存在内存中。

  Memory表的结构在重启后还会保留,但数据会丢失。

  Memory表在很多场景可以发挥更好的作用:

  • 用于查找 或者 映射表,例如将邮件和州名映射的表。
  • 用于缓存周期性聚合数据的结果。
  • 用于缓存数据分析中产生的中间数据。

  Memory表支持hash索引,查询很快。但是无法取代传统基于磁盘的表。Memory是表级锁,并发写入较低,不支持BLOB和TEXT列,并且没行长度是固定的(varchar 实际存储时会转为 char)。

  如果MySQL在查询中需要使用临时表来保存结果,内部使用的临时表就是 Memory表。如果查询结果查过Memory的限制,或者含有BLOB或者TEXT字段,则临时表会转换为 MyISAM表。

  区分临时表和 Memory表:临时表是用 create temporary table 语句创建的表,可以使用任何存储引擎,因此和 Memory表不同。临时表只在单个连接中可见,当连接断开时,临时表将不存在。

NDB 集群引擎

  2003年,当时的 MySQL AB公司从索尼爱立信公司收购 NDB数据库。然后开发了 NDB集群存储引擎,作为 SQL 和 NDB原生协议之间的接口。MySQL服务器、NDB 集群存储引擎,以及分布式的、share-nothing的、容灾的、高可用的NDB数据库组合,被称为 MySQL集群(MySQL Cluster)。

S:分享(Share

   在遇到选择的时候,一定要静下心来好好想一想,自己到底想要什么。如果要和别人商量,一定要找行业大佬商量,这样决策会比较正确。

  平时和别人交流的时候,当遇到自己疑惑的地方,并且这个问题以后还有可能会出现,那么一定要当面了解清楚,否则你下次还是不明白,这期间会困绕你很久。

  面对浮躁的社会,不要浮躁、不要和社会上的人比、心里要有一盘大棋,这三年一定要沉淀出一些东西,沉淀出能让自己立于不败的本事。

  有好的想法就去尝试,不要给自己设限。任何事情如果单靠想,想的结果都是会失败,只有行动起来,一点一点的前进,解决过程中的问题,那么才有可能成功。

  对于学习,如果学一个知识点,一定要学懂、学会,并记录下来,尽量和以前的知识串起来,并抽空回顾。如果学了一知半解,并且没有做笔记,没有回顾,那么就等于没学。

ARTS(一)的更多相关文章

  1. KDE声音服务器 arts

    KDE声音服务器 arts arts介绍arts是KDE的核心声音系统,支持多音频流.全双工.网络声音请求.ALSA与OSS驱动后端.JACK声音服务器后端等扩展,它既是声音服务器,也 提供一套音频软 ...

  2. 【ARTS】01_21_左耳听风-201900401~201900407

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  3. 【ARTS】01_20_左耳听风-20190325~20190331

    zz## ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 ...

  4. 【ARTS】01_19_左耳听风-20190318~20190324

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  5. 【ARTS】01_18_左耳听风-20190311~20190317

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  6. 【ARTS】01_17_左耳听风-20190304~20190310

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  7. 【ARTS】01_16_左耳听风-20190225~20190303

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  8. 【ARTS】01_15_左耳听风-20190218~20190224

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  9. 【ARTS】01_14_左耳听风-20190211~20190217

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  10. 【ARTS】01_13_左耳听风-20190204~20190210

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

随机推荐

  1. 牛客网 查找第K小数

    题目链接:https://www.nowcoder.com/practice/204dfa6fcbc8478f993d23f693189ffd?tpId=40&tqId=21522&t ...

  2. 20190408Linux权限管理week1_day5

    权限概述 Linux系统一般将文件可存/取访问的身份分为3个类别:owner(拥有者).group(和所有者同组的用户).others(其他人,除了所有者,除了同组的用户以及除了超级管理员),且3种身 ...

  3. HTTPS(SSL / TLS)免费证书申请及网站证书部署实战总结

    服务器环境:windows server 2008  +  tomcat7 废话不多说,先看部署效果: 一.免费证书申请 Let's Encrypt  简介:let's Encrypt 是一个免费的开 ...

  4. JAVA值传递之基本数据类型和引用数据类型

    #1.基本数据类型值传递 package 经典小Demo.值传递; public class Test { public static void main(String[] args) { int a ...

  5. Docker Compose 配置文件常用指令

    Docker Compose 配置文件常用指令 YAML文件格式及编写注意事项 YAML是一种标记语言很直观的数据序列化格式,可读性高.类似于XML数据描述语言,语法比XML简单的很多. YAML数据 ...

  6. Python socket实现处理多个连接

       socket实现处理多个连接 实现处理多个连接 使用whlie循环实现多个客户端,排队请求服务端 循环监听端口发送信息(windos,Linux) 1.Linux 系统如果客户端断开连接,会循环 ...

  7. JS设计模式(5)发布订阅模式

    什么是发布订阅模式(观察者模式)? 定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 主要解决:一个对象状态改变给其他对象通知的问题,而且 ...

  8. VS2013的x86汇编语言开发环境配置

    转载:https://blog.csdn.net/infoworld/article/details/45085415 转载:https://blog.csdn.net/u014792304/arti ...

  9. build tool 的简单认知

    Build Tool 什么是Build Tool(构建工具)? 构建工具是从源代码自动创建可执行应用程序的程序(例如.apk for android app).构建包括将代码编译,链接和打包成可用或可 ...

  10. 【Core】.NET Core 部署在Linux

    安装.NET  Core SDK 在CentOS上 1.右键打开命令行: 2.为了安装.NET,需要注册微软签名密钥和添加微软相关的支持.这个操作每台机器只能做一次. Add the dotnet p ...