我们知道如果是一般的压缩文件,可以用系统自带的或者很好用的压缩工具 Keka 来解压,但如果要解压的压缩文件设置了密码,这个时候怎么做呢?
1. 下载 Homebrew你可以直接去 Homebrew 官网 下载,如何下载 Homebrew 的教程,网上有很多这里不赘述。
2. 安装 fcrackzip我们要用的是一个名为 fcrackzip 的压缩工具,打开终端,在命令行中输入
brew install fcrackzip
然后按下回车后即可安装。
3. 关于 fcrackzip 的参数在终端输入 fcrackzip -h 命令可以查看关于压缩时的详细参数,如下图所示
参数后面都有详细的说明,不再说明,下面直接说下如何使用,请看第四步。
4. 如何使用 fcrackzip 解压带密码的压缩文件直接在终端输入一行代码就行
fcrackzip -b -c 'aA1' -l 1-10 -u
然后在后面跟上你要解压文件的绝对路径(直接把你的文件拖动到终端即可),如下图所示
5. 建议建议把你的文件名改为纯英文字母,比如 aaa 等,因为有的粉丝的文件名包括但不 ...
1. 创建仓库命令
git init: 初始化仓库就是在当前目录下创建一个.git 目录,用于存储 Git 所需的元数据和文件版本记录。该目录包含了 objects、refs/head、refs/tags 和模板文件等基本部分。
git clone [url]: 拷贝一份远程仓库,也就是下载一个项目和它的整个代码历史。
2. 配置
git config --list: 显示当前的 Git 配置
git config -e [--global]: 编辑 Git 配置文件
git config [--global] user.name "[name]" / git config [--global] user.email "[email address]": 设置提交代码时的用户信息
3. 增加/删除文件
git add [file1] [file2] ...: 添加指定文件到暂存区
git add [dir]: 添加指定目录到暂存区,包括子目录
git add .: 添加当前目录的所有文件到暂存区
...
永远不要过早优化,要做到因地制宜,见招拆招。
Vue 应用运行时性能优化措施1. 使用 key对于通过循环生成了列表,应该给每个列表项一个稳定且唯一的 key,这有利于在列表变动时,尽量少的删除、新增、改动元素。
2. 使用冻结对象冻结的对象不会被响应化。有的时候没有必要将数据变成响应式的数据,因为在数据的响应化的过程中需要递归遍历数据,需要耗时。
Object.freeze(this.data)
如果不希望数据被 Observer,其实可以在 created 的生命周期中把数据挂在到 this 上,并不一定都在 data、props 或者是 computed 中定义。另外,这部分数据也是可以被修改的,只是他们的变化不会触发组件重新渲染,因为我们也并不希望,这样比用 Object.freeze 更加灵活。
3. 使用函数式组件参见 函数式组件
使用函数式组件,在 js 执行时间以及渲染时间上稍有减少,但是差别不大,同时在内存占用(消耗)方面会比普通组件占用少,这是因为使用函数式组件不会在 vue 的组件树中生成该组件,不会为函数组件创建实例,只是纯渲染。对于普通组件,vue ...
前言
iTerm2 是默认终端的替代品,也是目前 Mac 系统下最好用的终端工具,集颜值和效率于一身。
最近换了一台新的 MacBook Pro ,需要重装电脑上的常用软件。为了将 ITerm2 DIY 为自己喜欢的样子,花了不少时间。为了方便下次再配置,特地写下此文进行记录。
iTerm2 的下载链接:iTerm2
iTerm2 的配置1. 查看系统所有的 shell 列表cat /etc/shells
设置默认 shell 为 zsh,它功能比较多,会好使一些。
chsh -s /bin/zsh
2. 安装 oh-my-zshoh-my-zsh 是一款社区驱动的命令行工具,它基于 zsh 命令行,提供了主题配置,插件机制,大大提高了可玩(用)性。它的 Github 地址为:https://github.com/ohmyzsh/ohmyzsh
我们可以使用 curl 安装:
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
...
渲染时间点
渲染过程
当浏览器的网络线程收到 HTML 文档后,会产生一个渲染任务,并将其传递给渲染主线程的消息队列。
在事件循环机制的作用下,渲染主线程取出消息队列中的渲染任务,开启渲染流程。
整个渲染流程分为多个阶段,分别是: HTML 解析、样式计算、布局、分层、绘制、分块、光栅化、画
每个阶段都有明确的输入输出,上一个阶段的输出会成为下一个阶段的输入。
这样,整个渲染流程就形成了一套组织严密的生产流水线。
1. 解析 HTML - Parse渲染的第一步是解析 HTML。
解析过程中遇到 CSS 解析 CSS,遇到 JS 执行 JS。为了提高解析效率,浏览器在开始解析前,会启动一个预解析的线程,率先下载 HTML 中的外部 CSS 文件和 外部的 JS 文件。
如果主线程解析到link位置,此时外部的 CSS 文件还没有下载解析好,主线程不会等待,继续解析后续的 HTML。这是因为下载和解析 CSS 的工作是在预解析线程中进行的。这就是 CSS 不会阻塞 HTML 解析的根本原因。
如果主线程解析到script位置,会停止解析 HTML,转而等待 JS 文件下载好,并将 ...
浏览器的进程模型何为进程?程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程
每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。
何为线程?有了进程后,就可以运行程序的代码了。
运行代码的「人」称之为「线程」。
一个进程至少有一个线程,所以在进程开启后会自动创建一个线程来运行代码,该线程称之为主线程。
如果程序需要同时执行多块代码,主线程就会启动更多的线程来执行代码,所以一个进程中可以包含多个线程。
浏览器有哪些进程和线程?浏览器是一个多进程多线程的应用程序
浏览器内部工作极其复杂。
为了避免相互影响,为了减少连环崩溃的几率,当启动浏览器后,它会自动启动多个进程。
可以在浏览器的任务管理器中查看当前的所有进程
其中,最主要的进程有:
浏览器进程
主要负责界面显示、用户交互、子进程管理等。浏览器进程内部会启动多个线程处理不同的任务。
网络进程
负责加载网络资源。网络进程内部会启动多个线程来处理不同的网络任务。
渲染进程(本节课重点讲解的进程)
渲染进程启动后,会开启一个渲染主线程,主线程负责执行 HTML、CSS、JS 代码。
默 ...
本文整理了七种常见 GC 算法的基本原理,包括 GC 标记-清除法、引用计数法、GC 标记-复制算法、GC 标记-压缩算法、保守式 GC、分代垃圾回收、增量式垃圾回收(三色标记法),可以作为学习 GC 知识的框架。
前言本文主要是中村成洋、相川光写的《垃圾回收的算法与实现》一书的读书笔记,没有输出的学习就是一盘散沙。我们要学习 GC 就要系统性的学,形成自己的知识框架,后面再学习其他的 GC 实现,就知道该放在框架的哪个地方,本文起到了作为 GC 知识框架的作用。不管技术风云怎么变化,打牢基础总是不会错的。
一、为什么要有 GC1.1 什么是 GCGC 是 Garbage Collection 的简称,中文称为“垃圾回收”。GC ,是指程序把不用的内存空间视为垃圾并回收掉的整套动作。
GC 要做的有两件事:
找到内存空间里的垃圾;
回收垃圾,让程序能再次利用这部分空间。
满足这两项功能的程序就是 GC。
1.2 为什么要有 GC在没有 GC 的世界里,程序员必须自己手动进行内存管理,必须清楚地确保必要的内存空间,释放不要的内存空间。
程序员在手动进行内存管理时,申请内存尚不存在 ...
如何让你的 APP 图标动起来?这是一个很有意思的事情,从系统提供的切换 APP 图标 的 API 实现中,一步步通过反编译,解决了弹框提醒、进入后台等问题,实现了 APP 的动态图标。并附带有 Github Demo实现 AnimatedAppIcons,效果如下:
Your browser does not support the video tag.
原文链接
一. 什么是链式?可以连续不断地进⾏方法调⽤用的一种语法形式。
二. 探究链式的使用与实现本质示例 1:打豆豆
有位科学家到了南极,碰到一群企鹅。他问其中一个:“你每天都干什么呀?”那企鹅说:“吃饭睡觉打豆豆。”他又问另一个:“你每天都干什么呀?”那企鹅也源说:“吃饭睡觉打豆豆。”他问了许多许多的企鹅,都说:“吃饭睡觉打豆豆。”后来他碰到了一只小企鹅,很可爱的样子,就问它:“小朋友,你每天都干什么呀?”小企鹅说:“吃饭睡觉。”科学家一愣,随即问到:“你怎么不打豆豆呀?”小企鹅委屈的说:“因为我就是豆豆。”
思考一下如何用代码表述这些企鹅每天都做了什么 ❓
普通的实现方式
// 其他企鹅的一天let otherPenguin = Penguin()otherPenguin.eat()otherPenguin.sleep()otherPenguin.strike(penguin: "豆豆")print(otherPenguin.description)// ->吃饭->睡觉->打豆豆
使用链式实现
let longDay = Penguin.sta ...
理解泛型
泛型的定义在 Swift 语言中,泛型是一种编程技术,它允许你编写灵活、可重用的函数和类型,可以工作于任何类型。泛型的主要好处是它可以帮助你避免重复代码,并用一种清晰和抽象的方式来表达代码的意图。泛型的占位类型,可以是 T,也可以是 U,完全由您决定,使用一个由含义的占位符,更能表达含义。例如:系统对数组的定义 struct Array<Element>。
在某场技术活动中,需要管理会场中的观众,每人必须观看两个小时才可以离场(先进先出,无法提前离场)。
会场分为三个会场,分别有以下要求:
主会场 A:有入场号可以进
分会场 B:使用姓名就可以进
女性会场 C: 有号码的女性可以进
在主会场 A 中,由于准备充分,每个入场的观众发放参会证,使用参会证上的号码入场。
使用 Stack 管理观众的入场和离场。Stack 通过 push 方法记录入场的用户号码,通过 pop 方法移除离场的用户。
struct Stack { var items = [Int]() mutating func push(_ item: Int) { ...