Commit b74e0dea authored by jackfrued's avatar jackfrued

更新了部分文档补充了Linux部分的内容

parent 4082e1a3
File deleted
...@@ -219,7 +219,7 @@ ...@@ -219,7 +219,7 @@
# 第二天A第一个醒来 他将鱼分为5份 扔掉多余的1条 拿走自己的一份 # 第二天A第一个醒来 他将鱼分为5份 扔掉多余的1条 拿走自己的一份
# B第二个醒来 也将鱼分为5份 扔掉多余的1条 拿走自己的一份 # B第二个醒来 也将鱼分为5份 扔掉多余的1条 拿走自己的一份
# 然后C、D、E依次醒来也按同样的方式分鱼 问他们至少捕了多少条鱼 # 然后C、D、E依次醒来也按同样的方式分鱼 问他们至少捕了多少条鱼
fish = 1 fish = 6
while True: while True:
total = fish total = fish
enough = True enough = True
...@@ -232,7 +232,7 @@ ...@@ -232,7 +232,7 @@
if enough: if enough:
print(fish) print(fish)
break break
fish += 1 fish += 5
``` ```
贪婪法例子:假设小偷有一个背包,最多能装20公斤赃物,他闯入一户人家,发现如下表所示的物品。很显然,他不能把所有物品都装进背包,所以必须确定拿走哪些物品,留下哪些物品。 贪婪法例子:假设小偷有一个背包,最多能装20公斤赃物,他闯入一户人家,发现如下表所示的物品。很显然,他不能把所有物品都装进背包,所以必须确定拿走哪些物品,留下哪些物品。
...@@ -769,6 +769,8 @@ ...@@ -769,6 +769,8 @@
main() main()
``` ```
> 说明:上面的代码中使用了Emoji字符来表示扑克牌的四种花色,在某些不支持Emoji字符的系统上可能无法显示。
- 对象的复制(深复制/深拷贝/深度克隆和浅复制/浅拷贝/影子克隆) - 对象的复制(深复制/深拷贝/深度克隆和浅复制/浅拷贝/影子克隆)
- 垃圾回收、循环引用和弱引用 - 垃圾回收、循环引用和弱引用
......
"""
多进程和进程池的使用
多线程因为GIL的存在不能够发挥CPU的多核特性
对于计算密集型任务应该考虑使用多进程
time python3 example22.py
real 0m11.512s
user 0m39.319s
sys 0m0.169s
"""
import concurrent.futures
import math
PRIMES = [
1116281,
1297337,
104395303,
472882027,
533000389,
817504243,
982451653,
112272535095293,
112582705942171,
112272535095293,
115280095190773,
115797848077099,
1099726899285419
] * 5
def is_prime(n):
"""判断素数"""
if n % 2 == 0:
return False
sqrt_n = int(math.floor(math.sqrt(n)))
for i in range(3, sqrt_n + 1, 2):
if n % i == 0:
return False
return True
def main():
"""主函数"""
with concurrent.futures.ProcessPoolExecutor() as executor:
for number, prime in zip(PRIMES, executor.map(is_prime, PRIMES)):
print('%d is prime: %s' % (number, prime))
if __name__ == '__main__':
main()
This diff is collapsed.
...@@ -69,35 +69,22 @@ ...@@ -69,35 +69,22 @@
- 启动MySQL服务。 - 启动MySQL服务。
先修改MySQL的配置文件(`/etc/my.cnf`)添加一行`skip-grant-tables`,可以设置不进行身份验证即可连接MySQL服务器,然后就可以以超级管理员(root)身份登录 可以使用下面的命令来启动MySQL
```Shell ```Shell
vim /etc/my.cnf service mysqld start
```
```INI
[mysqld]
skip-grant-tables
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
``` ```
接下来可以使用下面的命令来启动MySQL。 在CentOS 7中,更推荐使用下面的命令来启动MySQL。
```Shell ```Shell
service mysqld start systemctl start mysqld
``` ```
在CentOS 7中建议使用下面的命令来启动MySQL 启动MySQL成功后,可以通过下面的命令来检查网络端口使用情况,MySQL默认使用3306端口
```Shell ```Shell
systemctl start mysqld netstat -nap | grep mysql
``` ```
- 使用MySQL客户端工具连接服务器。 - 使用MySQL客户端工具连接服务器。
...@@ -105,25 +92,30 @@ ...@@ -105,25 +92,30 @@
命令行工具: 命令行工具:
```Shell ```Shell
mysql -u root mysql -u root -p
``` ```
修改超级管理员(root)的访问口令为i_LOVE_macos_123 > 说明:启动客户端时,`-u`参数用来指定用户名,MySQL默认的超级管理账号为`root`;`-p`表示要输入密码(用户口令);如果连接的是其他主机而非本机,可以用`-h`来指定连接主机的主机名或IP地址
```SQL 如果是首次安装MySQL,可以使用下面的命令来找到默认的初始密码。
use mysql;
update user set authentication_string=password('i_LOVE_macos_123') where user='root'; ```Shell
flush privileges; cat /var/log/mysqld.log | grep password
``` ```
将MySQL配置文件中的`skip-grant-tables`去掉,然后重启服务器,重新登录。这一次需要提供用户名和口令才能连接MySQL服务器 上面的命令会查看MySQL的日志带有password的行,在显示的结果中`root@localhost:`后面的部分就是默认设置的初始密码
```Shell 修改超级管理员(root)的访问口令为`123456`。
systemctl restart mysqld
mysql -u root -p ```SQL
set global validate_password_policy=0;
set global validate_password_length=6;
alter user 'root'@'localhost' identified by '123456';
``` ```
也可以选择图形化的客户端工具来连接MySQL服务器,可以选择下列工具之一: > 说明:MySQL默认不允许使用弱口令作为用户口令,所以我们通过上面的前两条命令修改了验证用户口令的策略和口令的长度。事实上我们不应该使用弱口令,因为存在用户口令被暴力破解的风险。近年来,攻击数据库窃取数据和劫持数据库勒索比特币的事件屡见不鲜,要避免这些潜在的风险,最为重要的一点是不要让数据库服务器暴露在公网上(最好的做法是将数据库置于内网,至少要做到不向公网开放数据库服务器的访问端口),另外要保管好`root`账号的口令,应用系统需要访问数据库时,通常不使用`root`账号进行访问,而是创建其他拥有适当权限的账号来访问。
再次使用客户端工具连接MySQL服务器时,就可以使用新设置的口令了。在实际开发中,为了方便用户操作,可以选择图形化的客户端工具来连接MySQL服务器,包括:
- MySQL Workbench(官方提供的工具) - MySQL Workbench(官方提供的工具)
- Navicat for MySQL(界面简单优雅,功能直观强大) - Navicat for MySQL(界面简单优雅,功能直观强大)
......
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
1. 让代码既可以被导入又可以被执行。 1. 让代码既可以被导入又可以被执行。
```Python ```Python
if __name__ == '__main__': if __name__ == '__main__':
``` ```
...@@ -13,7 +12,6 @@ ...@@ -13,7 +12,6 @@
2. 用下面的方式判断逻辑“真”或“假”。 2. 用下面的方式判断逻辑“真”或“假”。
```Python ```Python
if x: if x:
if not x: if not x:
``` ```
...@@ -21,7 +19,6 @@ ...@@ -21,7 +19,6 @@
**好**的代码: **好**的代码:
```Python ```Python
name = 'jackfrued' name = 'jackfrued'
fruits = ['apple', 'orange', 'grape'] fruits = ['apple', 'orange', 'grape']
owners = {'1001': '骆昊', '1002': '王大锤'} owners = {'1001': '骆昊', '1002': '王大锤'}
...@@ -32,7 +29,6 @@ ...@@ -32,7 +29,6 @@
**不好**的代码: **不好**的代码:
```Python ```Python
name = 'jackfrued' name = 'jackfrued'
fruits = ['apple', 'orange', 'grape'] fruits = ['apple', 'orange', 'grape']
owners = {'1001': '骆昊', '1002': '王大锤'} owners = {'1001': '骆昊', '1002': '王大锤'}
...@@ -43,7 +39,6 @@ ...@@ -43,7 +39,6 @@
3. 善于使用in运算符。 3. 善于使用in运算符。
```Python ```Python
if x in items: # 包含 if x in items: # 包含
for x in items: # 迭代 for x in items: # 迭代
``` ```
...@@ -51,7 +46,6 @@ ...@@ -51,7 +46,6 @@
**好**的代码: **好**的代码:
```Python ```Python
name = 'Hao LUO' name = 'Hao LUO'
if 'L' in name: if 'L' in name:
print('The name has an L in it.') print('The name has an L in it.')
...@@ -60,7 +54,6 @@ ...@@ -60,7 +54,6 @@
**不好**的代码: **不好**的代码:
```Python ```Python
name = 'Hao LUO' name = 'Hao LUO'
if name.find('L') != -1: if name.find('L') != -1:
print('This name has an L in it!') print('This name has an L in it!')
...@@ -69,7 +62,6 @@ ...@@ -69,7 +62,6 @@
4. 不使用临时变量交换两个值。 4. 不使用临时变量交换两个值。
```Python ```Python
a, b = b, a a, b = b, a
``` ```
...@@ -78,7 +70,6 @@ ...@@ -78,7 +70,6 @@
**好**的代码: **好**的代码:
```Python ```Python
chars = ['j', 'a', 'c', 'k', 'f', 'r', 'u', 'e', 'd'] chars = ['j', 'a', 'c', 'k', 'f', 'r', 'u', 'e', 'd']
name = ''.join(chars) name = ''.join(chars)
print(name) # jackfrued print(name) # jackfrued
...@@ -87,7 +78,6 @@ ...@@ -87,7 +78,6 @@
**不好**的代码: **不好**的代码:
```Python ```Python
chars = ['j', 'a', 'c', 'k', 'f', 'r', 'u', 'e', 'd'] chars = ['j', 'a', 'c', 'k', 'f', 'r', 'u', 'e', 'd']
name = '' name = ''
for char in chars: for char in chars:
...@@ -104,7 +94,6 @@ ...@@ -104,7 +94,6 @@
**好**的代码: **好**的代码:
```Python ```Python
d = {'x': '5'} d = {'x': '5'}
try: try:
value = int(d['x']) value = int(d['x'])
...@@ -116,7 +105,6 @@ ...@@ -116,7 +105,6 @@
**不好**的代码: **不好**的代码:
```Python ```Python
d = {'x': '5'} d = {'x': '5'}
if 'x' in d and isinstance(d['x'], str) \ if 'x' in d and isinstance(d['x'], str) \
and d['x'].isdigit(): and d['x'].isdigit():
...@@ -131,7 +119,6 @@ ...@@ -131,7 +119,6 @@
**好**的代码: **好**的代码:
```Python ```Python
fruits = ['orange', 'grape', 'pitaya', 'blueberry'] fruits = ['orange', 'grape', 'pitaya', 'blueberry']
for index, fruit in enumerate(fruits): for index, fruit in enumerate(fruits):
print(index, ':', fruit) print(index, ':', fruit)
...@@ -140,7 +127,6 @@ ...@@ -140,7 +127,6 @@
**不好**的代码: **不好**的代码:
```Python ```Python
fruits = ['orange', 'grape', 'pitaya', 'blueberry'] fruits = ['orange', 'grape', 'pitaya', 'blueberry']
index = 0 index = 0
for fruit in fruits: for fruit in fruits:
...@@ -153,7 +139,6 @@ ...@@ -153,7 +139,6 @@
**好**的代码: **好**的代码:
```Python ```Python
data = [7, 20, 3, 15, 11] data = [7, 20, 3, 15, 11]
result = [num * 3 for num in data if num > 10] result = [num * 3 for num in data if num > 10]
print(result) # [60, 45, 33] print(result) # [60, 45, 33]
...@@ -162,7 +147,6 @@ ...@@ -162,7 +147,6 @@
**不好**的代码: **不好**的代码:
```Python ```Python
data = [7, 20, 3, 15, 11] data = [7, 20, 3, 15, 11]
result = [] result = []
for i in data: for i in data:
...@@ -176,7 +160,6 @@ ...@@ -176,7 +160,6 @@
**好**的代码: **好**的代码:
```Python ```Python
keys = ['1001', '1002', '1003'] keys = ['1001', '1002', '1003']
values = ['骆昊', '王大锤', '白元芳'] values = ['骆昊', '王大锤', '白元芳']
d = dict(zip(keys, values)) d = dict(zip(keys, values))
...@@ -186,7 +169,6 @@ ...@@ -186,7 +169,6 @@
**不好**的代码: **不好**的代码:
```Python ```Python
keys = ['1001', '1002', '1003'] keys = ['1001', '1002', '1003']
values = ['骆昊', '王大锤', '白元芳'] values = ['骆昊', '王大锤', '白元芳']
d = {} d = {}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment