分类 小技巧 下的文章

0. 准备物料

物料用途
16GB以上U盘用于引导和存放重装系统介质
微PE工具箱安装文件用于引导电脑进入工具箱安装系统
系统镜像依照您的电脑当前的系统版本准备,本文以Win10为例

1. 部署拯救U盘

非常强烈大家使用一个U盘提前部署PE系统,且部署此系统不会影响正常U盘的使用,以备系统崩溃或者紧急修复使用。

1.1 获取微PE工具箱

本文推荐微PE工具箱,推荐的点:简单,边界,无广告。

下载地址:https://www.wepe.cn/download.html

微PE工具箱下载图

如何选择版本:

  1. 一般选择最新的即可,如果最新的PE工具箱无法运行,则直接安装最老版本。
  2. 如果你了解电脑的启动方式为UEFI,则选择最新,反之最老

1.2 安装微PE工具箱

准备一个大于16GB的U盘,请备份U盘中的数据,因为在接下来的过程中会格式化U盘。

打开下载的文件,选择右下角的其他安装方式:安装到U盘

微PE安装界面

切换到安装到U盘界面,默认选项一般无需改动,但建议勾选下面两个选项,最后选择安装到U盘即可

  • [x] 包含DOS工具
  • [x] 同时复制安装包

安装到U盘界面

⚠ 在安装前再次提示:

安装会格式化U盘:指U盘的数据会被全部清空,请提前备份数据!

暂时关闭安防软件:因为需要对U盘分区以及加载引导,部分安防软件会阻止程序写入。

最后等待软件提示安装成功即可。

1.3 认识新U盘

在安装成功后,电脑上会识别出2个分区:

分区名可使用?备注
未命名
(或者根据安装时填写的U盘卷名,通常也是空间最大的一个)
可以日常使用U盘文件存放分区
EFI不可以用于引导急救系统,不要修改内部文件

在日常使用过程中建议为日常使用分区做独立标识名,以便自己或借给他人使用能够了解。

1.4 复制安装镜像

请在U盘分区的根目录下创建一个文件夹system_images,将您的安装镜像复制到这个文件夹中。

安装镜像类型可以为:

*.ios

*.wim

*.gho

建议放您常用的系统以便安装,建议使用原版镜像或可靠的安全来源镜像。

2. 启动重装之路

2.1 了解BIOS引导

本文不会解释引导逻辑,但您需要知道目前有两种引导模式,且两者一般对应不同的分区表

  1. UEFI启动 -> GPT分区表
  2. Legacy启动 -> MBR分区表

在目前主流的电脑多数使用UEFI启动,部分老旧的电脑使用Legacy启动,但我们也可以通过引导菜单来简要查看。

引导菜单快捷键:
不同品牌引导菜单快界面

如果您的电脑不在上述表中或按键无响应,则需要自行百度一下,你就知道。

2.2 选择启动设备

如果成功进入引导菜单,将会看到下面的示例引导菜单:

支持UEFI启动,一般在设备名称前会有UEFI或者EFI字样,选择含有此前缀的U盘,查看是否能够正常进入PE工具箱系统画面。

此处为WindowsPE系统选择界面:

默认等待进入第一选项或者直接回车。

如果第一个选项在您的电脑上无法显示,则需要选择第二个选项进入。

2023-08-13T07:43:31.png

等待系统加载:

最终能够展示PE系统界面,即成功一大步~

如果在UEFI模式下启动失败,则需要使用Legacy启动重新加载PE系统。

2.3 别着急,还需要再确认分区表

在一开始介绍了电脑的两种启动模式,但这不代表你你的电脑原本就是使用现有方式进入。

如果使用Legacy启动则可以不需要再确认了,因为您的电脑只有MBR分区表。

打开分区工具:

GPT分区表:

MBR:

从上方两张图也可以很直观的看出,GPT分区表是至少有3个分区起(部分GPT也有2个分区),且首个分区也有我们一开始再认识新U盘上提到的EFI分区。

因此本着不修改原有分区表的原则,进行重装系统。

重点提示:

如果您使用UEFI启动进入PE工具箱发现分区表为MBR,则需要回到选择启动设备阶段 ,选择不含有UEFI或EFI字样的U盘设备重新启动PE工具箱。

此外解释一下为什么不修改分区表,原因有很多:

  1. 可能这个电脑原生不支持UEFI启动,或为虚拟UEFI不完善。
  2. 小白可能改了分区表可能不会配置BIOS启动模式,导致无法启动系统。
  3. 转换分区表还需要额外建立引导分区或激活分区。
  4. MBR分区不支持2TB以上的硬盘。
  5. 其他原因...

如果您大胆尝试,可以修改分区表尝试是否能够使用UEFI进行启动系统,但建议在有专业人员的指导下进行修改。

3. 改写系统的命运

3.1 改写启动!

启动桌面上CGI备份还原软件:

3.2 选择镜像

打开软件后:
软件一般会自动选择系统盘,但还需要自己再确认一下,以免格式化到其他分区。
在下方选择放在system_images文件夹下的镜像。

ISO文件或者WIM文件一般内部会有多个系统镜像,会自动弹出新的窗口再选择安装需要的系统版本:

最后再下方确认安装分区以及系统版本无误点击执行:

3.3 最终确认

需要勾选以下选项:

  • [x] 格式化
  • [x] 修复引导
  • [x] 完成后重启,

等待还原完成:

在非专业人员情况下,尽量不要动电脑以及插拔U盘。
进度条有可能会多次归零,不必担心,耐心等待安装完成自动重启。

4. 新系统命运到来

4.0 重启又进PE工具箱?

如果重启后又进入的PE工具箱,则先拔出U盘即可,然后才重启电脑。

不必担心,安装的系统文件都已写入到硬盘中。

4.1 新命运归来

新系统在启动过程中会重启数次,若能看到启动服务基本上重装完成。

按照激活系统流程,和你的新系统展开新的命运之旅吧。


文中涉及软件均来自互联网,为了系统安全,示例均为原版系统,请支持正版。

前言

有几次在学习的时候,官方提供的工具刚好是一个对Web工具没有任何加密措施,毕竟学习是无时无刻(说白了就是无时无刻的卷),虽然都是一些学习数据,将服务直接暴露在公网上总是觉得不安全,因此对Web服务额外进行Basic验证。

技术点

Nginx+htpasswd

实战

如果你的机器上安装的是Apache服务,那么htpasswd也许是会附带安装的,但如果你安装的是Nginx服务,那也不用担心,对此我们也可以额外安装这个工具。

htpasswd

安装htpasswd

sudo apt install apache2-utils

生成鉴权文件

htpasswd -bc .{domain}.pass {username} {password}

建议对生成的鉴权文件加上.进行基础隐藏操作,防止被扫描到

htpasswd命令详解

htpasswd命令详解

Nginx

配置文件

生成鉴权的文件后,我们要对需要加上的server域名下添加以下两条

 auth_basic "admin area"; # 启用鉴权
 auth_basic_user_file "/etc/nginx/http_auth/.{domain}.pass"; # 指定鉴权文件

添加完成后重启服务即可。

成果

成果

小提示

  • 建议对HTTP服务加上SSL证书,以防中间人窃听密码。

数据类型映射

Protobuf数据类型描述打包C++语言映射GO语言映射
bool布尔类型1字节boolbool
double64位浮点数Ndoublefloat64
float32为浮点数Nfloatfloat32
int3232位整数Nintint32
uin32无符号32位整数Nunsignedintuint32
int6464位整数N__int64int64
uint6464为无符号整Nunsigned__int64uint64
sint3232位整数,处理负数效率更高Nint32int32
sing6464位整数处理负数效率更高N__int64int64
fixed3232位无符号整数4unsignedint32uint32
fixed6464位无符号整数8unsigned__int64uint64
sfixed3232位整数、能以更高的效率处理负数4unsignedint32int32
sfixed6464为整数8unsigned__int64int64
string只能处理ASCII字符Nstd::stringstring
bytes用于处理多字节的语言字符、如中文Nstd::string[]byte
enum可以包含一个用户自定义的枚举类型uint32N(uint32)enum结构体:struct/数据:int32
message可以包含一个用户自定义的消息类型Nobjectofclassstruct

Tips

  • N 表示打包的字节并不是固定。而是根据数据的大小或者长度。
  • 例如int32,如果数值比较小,在0~127时,使用一个字节打包。
  • 关于枚举的打包方式和uint32相同,GO情况下不同。
  • 关于message,类似于C语言中的结构包含另外一个结构作为数据成员一样。
  • 关于 fixed32 和int32的区别。fixed32的打包效率比int32的效率高,但是使用的空间一般比int32多。因此一个属于时间效率高,一个属于空间效率高。根据项目的实际情况,一般选择fixed32,如果遇到对传输数据量要求比较苛刻的环境,可以选择int32。

映射到 JSON

对于前端数据交换还是用JSON会更加多一些,因此映射JSON后的结构体。

Proto3JSONJSON example
messageobject{"fooBar": v, "g": null, …}
enumstring"FOO\_BAR"
mapobject{"k": v, …}
repeated Varray[v, ...]
booltrue,falsetrue, false
stringstring"hello"
bytesbase64 string"YWJjMTIzIT8kKiYoKSctPUB+"
int32, fixed32, uint32number1, -10, 0
int64, fixed64, uint64string"1", "-10"
float, doublenumber1.1, -10.0, 0, "NaN", "Infinity"
Anyobject{"@type": "url", "f": v, … }
Timestampstring"1972-01-01T10:00:20.021Z"
Durationstring"1.000340012s", "1s"
Structobject{...}
Wrapper typesvarious types2, "2", "foo", true, "true", null, 0, …
FieldMaskstring"f.fooBar,h"
ListValuearray[foo, bar, …]
ValueValue
NullValuenull
Emptyobject{}

一、校验数字的表达式

  • 数字:^[0-9]\*$
  • n位的数字:^\d{n}$
  • 至少n位的数字:^\d{n,}$
  • m-n位的数字:^\d{m,n}$
  • 零和非零开头的数字:^(0|[1-9][0-9]\*)$
  • 非零开头的最多带两位小数的数字:^([1-9][0-9]\*)+(\.[0-9]{1,2})?$
  • 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})$
  • 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
  • 有两位小数的正实数:^[0-9]+(\.[0-9]{2})?$
  • 有1~3位小数的正实数:^[0-9]+(\.[0-9]{1,3})?$
  • 非零的正整数:^[1-9]\d\*$ 或 ^([1-9][0-9]\*){1,3}$ 或 ^\+?[1-9][0-9]\*$
  • 非零的负整数:^\-[1-9][]0-9"\*$ 或 ^-[1-9]\d\*$
  • 非负整数:^\d+$ 或 ^[1-9]\d\*|0$
  • 非正整数:^-[1-9]\d\*|0$ 或 ^((-\d+)|(0+))$
  • 非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d\*\.\d\*|0\.\d\*[1-9]\d\*|0?\.0+|0$
  • 非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d\*\.\d\*|0\.\d\*[1-9]\d\*))|0?\.0+|0$
  • 正浮点数:^[1-9]\d\*\.\d\*|0\.\d\*[1-9]\d\*$ 或 ^(([0-9]+\.[0-9]\*[1-9][0-9]\*)|([0-9]\*[1-9][0-9]\*\.[0-9]+)|([0-9]\*[1-9][0-9]\*))$
  • 负浮点数:^-([1-9]\d\*\.\d\*|0\.\d\*[1-9]\d\*)$ 或 ^(-(([0-9]+\.[0-9]\*[1-9][0-9]\*)|([0-9]\*[1-9][0-9]\*\.[0-9]+)|([0-9]\*[1-9][0-9]\*)))$
  • 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d\*\.\d\*|0\.\d\*[1-9]\d\*|0?\.0+|0)$

校验字符的表达式

  • 汉字:^[\u4e00-\u9fa5]{0,}$
  • 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
  • 长度为3-20的所有字符:^.{3,20}$
  • 由26个英文字母组成的字符串:^[A-Za-z]+$
  • 由26个大写英文字母组成的字符串:^[A-Z]+$
  • 由26个小写英文字母组成的字符串:^[a-z]+$
  • 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
  • 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
  • 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
  • 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
  • 可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+
  • 禁止输入含有~的字符:[^~\x22]+

三、特殊需求表达式

  • Email地址:^\w+([-+.]\w+)\*@\w+([-.]\w+)\*\.\w+([-.]\w+)\*$
  • 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?
  • InternetURL:[a-zA-z]+://[^\s]\* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]\*)?$
  • 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
  • 电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
  • 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
  • 电话号码正则表达式(支持手机号码,3-4位区号,7-8位直播号码,1-4位分机号): ((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)
  • 身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X:(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)
  • 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
  • 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
  • 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 8-10 之间):^(?=.\*\d)(?=.\*[a-z])(?=.\*[A-Z])[a-zA-Z0-9]{8,10}$
  • 强密码(必须包含大小写字母和数字的组合,可以使用特殊字符,长度在8-10之间):^(?=.\*\d)(?=.\*[a-z])(?=.\*[A-Z]).{8,10}$
  • 日期格式:^\d{4}-\d{1,2}-\d{1,2}
  • 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
  • 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
  • 钱的输入格式:

    1. 有四种钱的表示形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]\*$
    2. 这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]\*)$
    3. 一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]\*)$
    4. 这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧。下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
    5. 必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$
    6. 这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
    7. 这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})\*(.[0-9]{1,2})?$
    8. 1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})\*)(.[0-9]{1,2})?$
    9. 备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
  • xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
  • 中文字符的正则表达式:[\u4e00-\u9fa5]
  • 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
  • 空白行的正则表达式:\n\s\*\r (可以用来删除空白行)
  • HTML标记的正则表达式:<(\S\*?)[^>]\*>.\*?|<.\*? /> ( 首尾空白字符的正则表达式:^\s\*|\s\*$或(^\s\*)|(\s\*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
  • 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
  • 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
  • IPv4地址:((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}

# 反向面试

> 大部分翻译自:https://github.com/viraptor/reverse-interview ,亦有其他网友补充。

下面列表里的问题对于参加技术面试的人来说可能有些用。
列表里的问题并不一定适用于某个特定的职位或者工作类型, 也没有排序
最开始的时候这只是我自己的问题列表, 但是慢慢地添加了一些我觉得可能让我对这家公司亮红牌的问题。
我也注意到被我面试的人提问我的问题太少了, 感觉他们挺浪费机会的。

如果你问过的问题没有被列出来, 请提交一个 PR。

翻译:

[English](https://github.com/viraptor/reverse-interview)
[Korean](https://github.com/JaeYeopHan/Interview_Question_for_Beginner/blob/master/Reverse_Interview/README.md)
[Portuguese](https://github.com/viraptor/reverse-interview/blob/master/translations/PORTUGUESE.md)

## 预期使用方式

- 检查一下哪些问题你感兴趣
- 检查一下哪些是你可以自己在网上找到答案的
- 找不到的话就向面试官提问

绝对不要想把这个列表里的每个问题都问一遍。

请记住事情总是灵活的,组织的结构调整也会经常发生。
拥有一个 bug 追踪系统并不会保证高效处理 bug。CI/CD (持续集成系统) 也不一定保证交付时间会很短。

# 职责

- On-call (电话值班)的计划或者规定是什么?值班或者遇到问题加班时候有加班费吗?
- 我的日常工作是什么?
- 团队里面初级和高级工程师的比例是多少?(有计划改变吗)
- 入职培训会是什么样的?
- 自己单独的开发活动和按部就班工作的比例大概是怎样的?
- 每天预期/核心工作时间是多少小时?
- 在你看来,这个工作做到什么程度算成功?
- 我入职的岗位是新增还是接替之前离职的同事?(是否有技术债需要还)?(zh)
- 入职之后在哪个项目组,项目是新成立还是已有的?(zh)

# 技术

- 公司常用的技术栈是什么?
- 你们怎么使用源码控制系统?
- 你们怎么测试代码?
- 你们怎么追踪 bug?
- 你们怎么集成和部署代码改动?是使用持续集成和持续部署吗?
- 你们的基础设施搭建方法在版本管理系统里吗?或者是代码化的吗?
- 从计划到完成一项任务的工作流是什么样的?
- 你们如何准备故障恢复?
- 有标准的开发环境吗?是强制的吗?
- 你们需要花费多长时间来给产品搭建一个本地测试环境?(分钟/小时/天)
- 你们需要花费多长时间来响应代码或者依赖中的安全问题?
- 所有的开发者都可以使用他们电脑的本地管理员权限吗?
- 公司是否有技术分享交流活动?有的话,多久一次呢?(zh)

# 团队

- 工作是怎么组织的?
- 团队内/团队间的交流通常是怎样的?
- 如果遇到不同的意见怎样处理?
- 谁来设定优先级 / 计划?
- 如果被退回了会怎样?(“这个在预计的时间内做不完”)
- 每周都会开什么类型的会议?
- 产品/服务的规划是什么样的?(n周一发布 / 持续部署 / 多个发布流 / ...)
- 生产环境发生事故了怎么办?是否有不批评人而分析问题的文化?
- 有没有一些团队正在经历还尚待解决的挑战?
- 公司技术团队的架构和人员组成?(zh)
 

# 公司

- 有没有会议/旅行预算?使用的规定是什么?
- 晋升流程是怎样的?要求/预期是怎样沟通的?
- 技术和管理两条职业路径是分开的吗?
- 对于多元化招聘的现状或者观点是什么?
- 有公司级别的学习资源吗?比如电子书订阅或者在线课程?
- 有获取证书的预算吗?
- 公司的成熟度如何?(早期寻找方向 / 有内容的工作 / 维护中 / ...)
- 我可以为开源项目做贡献吗?是否需要审批?
- 有竞业限制或者保密协议需要签吗?
- 你们认为公司文化中的空白是什么?
- 能够跟我说一公司处于不良情况,以及如何处理的故事吗?

# 商业

- 你们现在盈利吗?
- 如果没有的话,还需要多久?
- 公司的资金来源是什么?谁影响或者指定高层计划或方向?
- 你们如何挣钱?
- 什么阻止了你们挣更多的钱?
- 你们认为什么是你们的竞争优势?

# 远程工作

- 远程工作和办公室工作的比例是多少?
- 公司提供硬件吗?更新计划如何?
- 额外的附件和家居可以通过公司购买吗?这方面是否有预算?
- 有共享办公或者上网的预算吗?
- 多久需要去一次办公室?
- 公司的会议室是否一直为视频会议准备着?

# 办公室工作

- 办公室的布局如何?(开放的 / 小隔间 / 独立办公室)
- 有没有支持/市场/或者其他需要大量打电话的团队在我的团队旁边办公?

# 待遇

- 如果有奖金计划的话,奖金如何分配?
- 如果有奖金计划的话,过去的几年里通常会发百分之多少的奖金?
- 有五险一金或者其他退休养老金等福利吗?如果有的话,公司有配套的商业保险吗?

# 带薪休假

- 带薪休假时间有多久?
- 病假和事假是分开的还是一起算?
- 我可以提前使用假期时间吗?也就是说应休假期是负的?
- 假期的更新策略是什么样的?也就是说未休的假期能否滚入下一周期
- 照顾小孩的政策如何?
- 无薪休假政策是什么样的?