基本配置

  1. sudo权限: 修改/etc/sudoers,或者rootadduser <username> sudo并重启
  2. apt软件包管理系统换源:/etc/apt/sources.list修改软件发布源
    deb http://站点/目录名/stretch版本名 main contrib non-free三类软件包
    Debian官方软件源:官网/mirror/list
  3. /usr/share/doc 有安装软件的信息

1.0 命令篇

基本命令

参考资料 https://missing-semester-cn.github.io/2020/course-shell/
  • 关机、重启
    shutdown
    -h now halt,挂起,相当于 halt
    -r now reboot,重启
    poweroff
    reboot

  • 手册
    man 命令

  • 导航
    pwd 显示当前所在目录
    cd 进入文件夹 '..' 上级目录 '.'当前目录 '/'开头的是绝对路径`

  • 查看文件
    ls 列出所有文件
    ls -l 查看文件权限信息

  • 创建文件夹
    mkdir 文件夹名
    rmdir 删除文件夹

  • 没有vim的时候如何创建、编辑、查看文件
    touch 文件 创建文件
    echo 文本 > 文件 echo+重定向输入文件(会把原来内容覆盖)
    echo 文本 >> 文件 追加输入(在原来内容的结尾另起一行输入)
    cat 文件 查看文件
    除了使用cat看文件,还有tac(从最后一行开始显示),more, less(可以翻页,好用)

  • 压缩
    压缩一整个目录,使用 tar
    压缩单个文件 bzip2 gzip(-d解压)
    tar -cvf 目标名 文件名 压缩 , tar -xvf解压

  • 查找
    grep 用法 grep "word" filename

grep "string" * # 在所有文件中搜索string
grep -r "string" # 递归搜索
`find`用法 `find filename`
阅读全文 »

Web浏览器

网址就是请求服务器上对应的文件
DNS从顶级域名开始根据网址查IP。DNS服务器通过缓存查过的IP来加快服务响应(缓存拥有有效期)。
浏览器调用Socket库建立连接管道

TCP/IP协议栈

应用将数据分割为许多个网络包,TCP加上头部发送出去。需要发送的信息会缓存起来,超出计时时间或者数据量大于一个包大小时才发出去。
TCP需要确认对方收到数据,但是为了不浪费时间,实际上TCP在等待确认信息的过程中也在发送包,这个方法称为滑动窗口
为了使接收方有足够的时间处理数据,接收方有一个接收缓存,当缓存满了会在TCP头部中通知发送方;处理完成,缓冲区有空余时也会通过TCP头部通知发送方。
通信完成后,发送方会保留套接字一段时间,以防对方的FINISH信号发送有延迟,把新的相同端口的套接字错误删除。

用电信号传输数据时,用高电平表示1,低电平表示0.为了防止连续的低电平读不出来,会有一条时钟信号(固定切换高低电平)
ICMP:定义各种消息,如超时、无法到达、超出转发能力

UDP在发送的数据少于一个包(重发也只需要发一个包,代价小,如DNS查询控制信息)、发送的数据具有时效性(如音视频,必须快速发送,即使重发也没有意义)的情况下使用。UDP只负责收发数据,对方没收到就全部重发一遍。

参考教程: https://www.ruanyifeng.com/blog/2019/10/tmux.html
  • tmux使会话与窗口解绑,一个窗口source .bashrc更新了,另一个窗口可能没有
  • ctrl+b 前缀键
    % 分成左右两栏
    " 分成上下两栏
    up 选择上边的窗口
    [ 查看历史记录

窗口

  • <C-d> 删除窗口
  • <C-b> z 最大化/最小化一个窗口
  • <C-b> c 创建一个新的窗口,使用 <C-d>关闭
  • <C-b> N 跳转到第 N 个窗口,注意每个窗口都是有编号的
  • <C-b> p 切换到前一个窗口
  • <C-b> n 切换到下一个窗口
  • <C-b> w 列出当前所有窗口

ThinkPHP 6.0文档

Composer安装

composer create-project topthink/think tp
# tp是应用根目录名称,可以修改

访问

  1. localhost/tp/public/ 首页
  2. 首页/index.php/index controller下的Index类
  3. 首页/index.php/index/?s=hello/value 调用controller下Index类的hello方法,并传入参数value(URL兼容模式)
  4. 首页/index.php/hello_world 调用controller下HelloWorld类
  5. 首页/index.php/group.blog 调用controller/group下的Blog类

输出数组

$data = array('a' => 1, 'b' => 2, 'c' => 3);
return json($data);

开启调试

在应用根目录下新建.env文件

APP_DEBUG = true

[APP]
DEFAULT_TIMEZONE = Asia/Shanghai

[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = test
USERNAME = username
PASSWORD = password
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true

[LANG]
default_lang = zh-cn

数据库

$user = Db::connect('mysql')->table('tp_user')->select();
// 确定数据库和数据表
return json($user);

// 或者有Model User
$user = User::select();

Model

<?php
namespace app\model;

use think\Model;

class User extends Model
{
protected $connection = 'databaseName';
}

查询

Db::getLastSql();可以看上一条sql语句

一条数据

Db::table('tableName')->where('fieldName', fieldValue)->find(); // 查询不到返回null
// findFail在查询不到时抛出异常;findEmpty在查询不到时返回空数组

整个表(数据集)

Db::table('tableName')->select();
Db::name('tableNameWithoutPrefix')->select();

某条记录的字段值

Db::name('tableName')->where('id', $id)->value('field');

一列(键值对)

Db::name('name')->column('fieldAsValue', 'fieldAsKey');

插入

一条数据

// strict 表示强行插入
Db::name('user')->strict(false)->insert($data);
// 有相同主键则替换
Db::name('user')->replace()->insert($data);
// 根据主键自动判断
Db::name('user')->save($data);

多条数据

Db::name('user')->insertAll($data);

修改

Db::name('user')->where('id', 232)
->update([
// 下面是SQL表达式
'email' => Db::raw('UPPER(email)'),
'price' => Db::raw('price + 1'),
'status'=> Db::raw('status - 2')
]);

删除

// 根据主键删除多条数据
Db::name('user')->delete([48,49,50]);
// 匹配删除
Db::name('user')->where('id', 47)->delete();
// 全部删除
Db::name('user')->delete(true);

模板

composer require topthink/think-view

Task Scheduler

WIN+R, taskschd.msc
在这里可以设置定时任务、登录任务。
有些软件的开机自启动就设置在这里。比起组策略有更多的可选项(延迟启动,网络和电源要求等)

Group Policy Editor

WIN+R, gpedit.msc
在这里可以设置一些开关机时执行的任务

Computer Configuration -> Windows settings -> Scripts -> Shutdown -> Properties -> Add

静默运行脚本

Task Scheduler没有办法隐藏窗口
在Task Scheduler运行该vbs脚本,目标脚本路径作为参数即可实现静默运行。

' minRun.vbs
' Run minRun.vbs Task Scheduler在可选参数提供实际脚本地址
' 检查是否提供了批处理文件路径参数
If WScript.Arguments.Count = 0 Then
WScript.Echo "Error: No batch file path provided."
WScript.Quit 1
End If

' 获取批处理文件路径参数
Dim batchFilePath
batchFilePath = WScript.Arguments(0)

' 检查批处理文件是否存在
If Not FileExists(batchFilePath) Then
WScript.Echo "Error: Batch file not found at " & batchFilePath
WScript.Quit 1
End If

' 创建 WScript.Shell 对象
Set oShell = CreateObject("Wscript.Shell")

' 执行批处理文件
' 使用 0 表示不等待批处理文件执行完成
' 使用 True 表示以同步方式运行(等待批处理执行完成)
oShell.Run batchFilePath, 0, True

' 清理
Set oShell = Nothing

' 检查文件是否存在的辅助函数
Function FileExists(filePath)
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
FileExists = fso.FileExists(filePath)
End Function

1.0 编辑

% 表示注释
; 表示不显示结果,只执行语句
clear 清除内存变量
clc 清除全部
pretty 用分式表示公式
simplify 化简命令
exp(x) 指数, e^x
log2(x) 以2为底数的对数
阅读全文 »

全键盘操作指南

终端操作

  • code <Folder> 打开工作区;相当于 CTRL+K, CTRL+O
  • code -diff file1 file2 对比两个文件(颜色标注)
  • code <File> 打开文件
  • CTRL + ←/→ 逐词跳转
  • CTRL+K 清理终端
  • CTRL+P: >Tasks 新建任务,用 CTRL+P: >run 运行;相当于 make

Panel操作

CTRL+P 打开Panel

  • @ 符号:寻找symbol,如函数名、变量名;相当于CRTL+SHIFT+.
  • # <String> 符号:全局搜索字符串
  • >join line 选中多行合并为一行

编辑区操作

  • CTRL+G <Line_Number> 跳到指定行
  • CTRL + ←/→ 逐词跳转;相当于vim的 w
  • ALT + ↑/↓ 移动某行代码
  • ALT + SHIGT+ ↑/↓ 复制某行代码
  • CTRL+P: >Snippets 创建代码模板
  • SHIFT+ALT+F12 找到某个命名的全部引用(而不是简单的搜索)
  • SHIFT+ALT+F 格式化代码,相当于 >Format Document

设置 settings.json

显示.gitignore屏蔽文件

关闭 Search: Use Ignore Files,或

"search.useIgnoreFiles": false

自定义终端

"terminal.integrated.defaultProfile.windows": "MSYS2-UCRT64",
"terminal.integrated.profiles.windows": {
"MSYS2-UCRT64": {
"path": "D:\\your\\path\\MSYS2\\msys2_shell.cmd",
"args": [
"-defterm",
"-no-start",
"-here",
"-ucrt64"]
}
},

Chapter2 指令:计算机的语言

本章将介绍MIPS汇编语言指令。

三条设计原则

  1. 简单源于规整 Simplicity favors regularity.
  2. 越小越快 Smaller is faster.
  3. 优秀的设计需要适宜的折中方案 Good design demands good compromises.

2.2 硬件的操作与操作数

规整

add a, b, c // a = b + c MIPS汇编语言使用这样的固定记法。
每条MIPS算术指令只执行1个操作,仅有3个变量。

操作数必须来自寄存器

变量f、g、h、i、j依次分配给$s0~$s4,编译下面的C语句

f = (g + h) - (i + j);
---
add $t0, $s1, $s2 // t0 = s1 + s2
add $t1, $s3, $s4
sub $s0, $t0, $t1 // s0 = t0 + t1

数据传输

只有少量数据存在寄存器中,因此需要在存储器和寄存器间传输数据

A的基址是存在$s3,编译下面的C语句

A[12] = h + A[8]
---
lw $t0, 32($s3) // 先读数,再相加;32为偏移量,8*4byte
add $t0, $s2, $t0
sw $t0, 48($s3) // 存数

立即数

addi $t0, $t1, 4 // t0 = t1 + 4;无需读取4,作为立即数相加
subi $t0, $t1, 4
阅读全文 »

保护文件

防护中心 - 高级防护 - 自定义防护 - 锁定文件读取、创建、修改、删除权限

说明:%%是注释%%

程序设计

  1. 首先写<view class="class_name"></view>来结构化设计;每个class对应一个css样式
<view class="container">
<image class="avatar" src="../images/avatar/avatar-1.jpg"></image>
<text class="motto">Welcome, Orange Can</text>
<view class="journey-container">
<text class="journey">Start your journey of miniprogram</text>
</view>
</view>
  1. css中放样式信息,写法如下;全局样式可以放app.css
/* 示范写法 */
.class_name{
attribute: rpx;
location_attribute: center;
}
/* 一般网页可以这样布局 */
.container{ /* 最外层的<view> */
display: flex; /* 布局方式 */
flex-direction: column; /* 列,从上到下;reverse是从下到上;可选row */
align-items: center; /* 居中 */
}
阅读全文 »
0%