LeetCode-1. Two Sum
LeetCode-20. Valid Parentheses
问题描述
Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
An input string is valid if:
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.
Constraints:
1 <= s.length <= 104sconsists of parentheses only'()[]{}'.
Manjaro踩坑记
早就听闻Manjaro的口碑,其在DistroWatch上的排名也很考前,笔者之前也没有用过基于Arc的发行版,所以安装下来尝尝鲜,顺便把踩过的坑记录一下。
坑一
安装时driver有两个选项:free和nofree。这两个选项下面都会有坑。
- 如果选择了free,那么在双显卡的电脑下会出现一系列的bug,比如桌面经常无故卡死,登录界面输入密码后黑屏等问题。
- 如果选择了nofree,装的是bumblebee版的intel+nvidia的专有驱动。不过安装进度条会卡在93%左右的位置卡很长很长时间。因为安装完毕后执行了
pacman-mirrors,国外的镜像源连接太慢,所以会卡很久。解决方法就是断网然后ps -ef | grep pacman-mirrors找到进程杀掉,然后安装进度条很快就会跳到100%。装好进入系统后重启打开网络,更换为国内的镜像源。
Ubuntu GNOME的一些软件安装
Ubuntu GNOME主题样式的自定义方法
在GNOME 3的早期版本里,可以直接修改/usr/share/gnome-shell/themes/gnome-shell.css来更改GNOME的样式,但从GNOME 3.12 开始使用 GResource 二进制资源文件保存 js/css/svg 等文件。所以,要想更改样式,必须经过下面三步:
使用gresource解压封装好的二进制文件,新建脚本文件unzip.sh,然后执行该脚本,代码如下:
1
2
3
4
5#!/bin/sh
gs="/usr/share/gnome-shell/gnome-shell-theme.gresource"
for r in `gresource list $gs`; do
gresource extract $gs $r > theme/${r##*/}
done
属性获取方法总结
- for in:可获取原型的属性,不可获取不可枚举属性
- for of:只能获取可迭代对象的属性
- Object.keys:原型属性和不可枚举属性都不能获取
- JSON.stringify:原型属性和不可枚举属性都不能获取
- Object.getOwnPropertyByNames:不可获取原型属性,可获取不可枚举属性
以上都不可获取Symbol属性
- Object.getOwnPropertySymbols:可获取Symbol属性
- Reflect.ownKeys:可获取不可枚举属性和Symbol属性,不可获取原型
for...in和Object.keys迭代顺序的深入分析
先说结论
for...in和Object.keys对可枚举属性进行遍历的顺序与属性的书写顺序不一定一致,因为在内部会根据属性key值的类型进行不同的排序逻辑,分三种情况:
- 如果属性名的类型是Number,那么Object.keys返回值是按照key从小到大排序
- 如果属性名的类型是String,那么Object.keys返回值是按照属性被创建的时间升序排序。
背后的执行机制
对象的属性可分为常规属性和排序属性两种,在ECMAScript规范中定义了 「数字属性应该按照索引值大小升序排列,字符串属性根据创建时的顺序升序排列。」在这⾥我们把对象中的数字属性称为「排序属性」,在V8中被称为elements,字符串属性就被称为「常规属性」, 在V8中被称为properties。在V8内部,为了有效地提升存储和访问这两种属性的性能,分别使⽤了两个线性数据结构来分别保存排序属性和常规属性。
以下面这段代码为例进行说明: