上班摸鱼论
摸鱼概论 摸鱼,是我们日常紧张工作中的一段放松时光,在摸鱼的时刻,你可以做任何你想做的事情,如果你有一个靠窗的工位,你甚至可以望着窗外发呆。记得有一个阳光明媚的下午,我坐在工位上,看着窗外一个女生,在围着园区的小院子,跑圈。那一刻,我仿佛回到了初中,坐在教室里,望着窗外操场,正在体育课上游戏的同学们。 摸鱼,跟开小差有着本质的区别,开小差是指我们当前在做某一个事时的分心,比如我们在参加一个会议,但我们听不下去了,这时候我们就会开小差,人还在会议室里,但是心不知道跑到哪里去了。而摸鱼,则是工作不饱和时的一种个人选择,一天 8 小时的工作时间,你可能花了 5 个小时就把这一天的活全部干完了,那剩下的 3 小时,就只能在摸鱼中度过。当然,我们也可以选择在工作不饱和时跟老板要求更多的工作,以承担更大的责任。但是,这样的选择,一般不会提升我们的工资水平(毕竟不是计件的工作),亦或者当我们的工资水平提高时,我们也很难将其与当下是否选择摸鱼关联起来。 我们喜欢摸鱼,但是呢,我们又害怕老板看到我们正在摸鱼。虽然这并不会有什么实质性的惩罚。但是如果老板看你摸鱼多了,就会怀疑你的工作是否不饱和。把原来排期 5 天的...
分布式
0x00 CAP 理论 经济学中有一个著名的论断叫蒙代尔不可能三角,说货币政策的独立性、汇率的稳定性以及资本自由流动,三者不能都要,最多只能实现其中两个。分布式系统中也有一个类似的 CAP 理论(CAP theorem),说数据的一致性、系统的可用性以及允许分区,三者不能都要,最多只能实现其中两个。 数据的(强)一致性(Consistency):表示数据的更新操作在所有节点间都像原子操作一样,要么同时成功要么同时失败,不会出现部分成功的状况。以数据库为例,则是主从库之间的同步不会出现一个中间状态,主库更新了,但从库没有更新,继而导致查询从库与主库结果不符的现象。 系统的可用性(Availability):表示集群的服务一直处于可用状态,可用状态的要求则是在有限的时间内返回正确的结果。即便部分节点挂了,其它存活的节点也能正常返回数据,哪怕会有不一致的情况发生。 允许分区(Partition Tolerance):分区是指因为网络故障或其它原因导致分布式系统中的部分节点与其它节点失去连接,形成独立分区。如下图所示的情况,node02 为主库,剩下的两个为从库,node02 和 node03...
Java 分层编译
0x00 前言 一开始接触到分层编译是因为我们这的服务每次发布/重启后都会短暂地出现 CPU 满线程池满的情况,然后过一段时间又能自动恢复。经排查后是因为启动时 JVM 将部分热点代码编译为机器代码导致的,这个过程中 JIT 编译器会占用大量的 CPU。 一个 Java 的源代码文件变成可直接执行的机器指令,需要经过两段编译,第一段是把.java 文件转换成.class 文件。第二段是把.class 文件转换为机器指令。 第一段的编译相对固定,也就是将 Java 代码翻译为字节码并打包为 jar 的过程。而字节码的执行则有两种方式,第一种是由解释器(Interpreter)即时解释执行,第二种则是由 JIT 编译器编译执行。具体采用哪种执行方式则主要看当前的代码是否为「热点代码(Hot Spot Code)」。当 JVM 发现某个方法或代码块运行特别频繁的时候,就会认为这是热点代码。此后,JIT 会把部分热点代码的 class 直接编译为本地机器相关的机器码,并进行优化,然后再把翻译后的机器码缓存起来,以备下次使用。JIT 的运行则主要依赖于运行时的 profiling 信息,由此则被称为 Just-in-time Compilat...
DOLG Single Stage Image Retrieval with Deep Orthogonal Fusion of Local and Global Features
0x00 导言 传统的图像检索往往分为两个步骤,第一步即提取图像的全局特征并在搜索引擎中进行搜索,第二步即对检索出图像的局部特征采用空间验证等手段对进行重排序并返回。本文提出了一种新的特征算法,有效融合了局部特征及全局特征,仅一步就可返回最佳结果。 0x01 背景知识 0x00 GeM 池化 对于一张 K×h×wK\times h\times wK×h×w(KKK 为通道数)的特征图 X\mathcal {X} X 而言,GeM 池化的公式表达是这样的: f (g)=[f1 (g)⋯fk (g)⋯fK (g)] where fk (g)=(1∣Xk∣∑x∈Xkxpk) 1pk, ∣Xk∣=h×w\text {f}^{(g)}=[\text {f}^{(g)}_1 \cdots\text {f}^{(g)}_k\cdots\text {f}^{(g)}_K] \\[1em] \text {where}\text {f}^{(g)}_k=(\frac {1}{|\mathcal {X}_k|}\sum_{x\in \mathcal {X}_k} x^{p_k})^{\frac {1}{p_k}},~ |\mathcal {X}_k|=...
Block Based Image Matching for Image Retrieval
0x00 导言 文章地址:Science Direct 我的批注版地址:Commented Paper 这篇文章旨在解决图像检索问题中以子图搜全图的问题。 0x01 背景知识 0x00 VLAD VLAD 算法的简介可简单参考这篇论文的 2.1 小节 All about VLAD。 VLAD 是一个比较老的图像特征提取算法,过程也相对简单: 首先需要在训练图片数据集上训练一个码表(codebook),词表的训练方法为:对训练集中的图像提取 d 维的 SIFT 特征,然后将所有图像的所有 SIFT 描述子汇总在一块,使用 K-means 算法去做一个聚类,然后将所有聚类的中心点组合为一个码表。其中 K 的选择一般为 64 或 256。在此步,我们可以将提取出的 SIFT 兴趣点记为 x=(x1,x2,⋯ ,xn) x=(x_1, x_2,\cdots, x_n) x=(x1,x2,⋯,xn),同时将训练好的码表记为 Cvlad=(c1,c2,⋯ ,cK) C_{vlad}=(c_1, c_2, \cdots, c_K) Cvlad=(c1,c2,⋯,cK),其中 K 为聚类中心点的个数。 对于一张新来的图像...
优雅的 Windows 开发
0x00 背景 本文讲述如何在 Windows Subsystem for Linux 里跑起一个支持 CUDA 的 docker 容器来的。 我们的工作相当于将上图中的 NVIDIA CUDA 换成了 docker container。 0x01 步骤 0x00 安装 WSL 首先,现在 win11 默认装的 WSL 已经是 2.0 版本了,所以无需在命令里单独使用 wsl –set-default-version 2 指定 2.0 版本的 WSL 了。仅使用如下命令即可一键安装 Ubuntu 发行版的 WSL: 1wsl --install -d Ubuntu Tips 不用重启 Windows,仅重启 Ubuntu subsystem 的方法: 1wsl --shutdown 同时,我们可以关闭 Windows Subsystem for Linux GUI 来降低 WSL 的 CPU 占用,以及解决日常高 CPU 占用、屏幕频繁刷新以及频繁获取失去焦点的 bug。可以在 % UserProfile% 目录下新建一个.wslconfig 文件,并写入如下配置: 12 [wsl2] guiApplication...
Deep Image Retrieval A Survey
导言 文章地址:Arxiv 本文是一篇 Survey,主要调研了 2012 年以来的基于深度学习的图像检索方法。这篇 Survey 主要是从如下 3 个科学问题展开: 如何使预训练的模型提取出来的特征超过传统数学模型? 如果我们使用在别的领域训练过的模型(比如:图像分类)所提取出来的特征来做图像检索的话,如何才能让这些模型保持或取得更好的效果呢? 深度特征普遍维度较高,如何才能更好地利用这些特征在大规模图像数据集上取得更好的检索效果呢? 总结 目前来说,现有的 DCNN 模型的来源主要有二:在别的任务上预训练好的以及 fine-tune 过的。二者之发展,可参照下图: 上图中,左侧路线呢是 off-the-shelf 模型,也就是说,一个预训练好的 DCNN 模型就直接拿过来,什么也不做,就直接应用到图像检索任务中。在这方面的研究呢,主要集中在提升表现层的输出质量上,相关的工作则有单次通过模型,或多次通过模型(将一张图片拆分为多个子图然后多次通过模型)。而右侧路线呢,则是针对已有模型在检索任务上进行过 fine-tune 后的模型,工作主要可以分为有监督的学习和无监督的学习两类。 如果从检索效果的提...
Three Things Everyone Should Know to Improve Object Retrieval
0x00 导言 文章地址:Visual Geometry Group - University of Oxford 我的批注版地址:Commented Paper 本文旨在解决在大规模图像数据集中依据给定图片做快速(准实时的)目标检索。 0x01 背景知识 此前解决此类问题,有一个标准的方法:首先,使用词袋模型(BoW)来表示一张图片。其次,使用 TF-IDF(Term Frequency Inverse Document Frequency)算法计算一个 Rank 值用于对图像进行排序和召回。 传统的方法有如下几个痛点:特征提取中的丢失,噪音点,描述子比较标准(距离计算方法)不合适,量化或归一化描述子时带来的损失。 0x00 TF-IDF(Term Frequency Inverse Document Frequency) TF-IDF(Term Frequency Inverse Document Frequency),中文即:词频逆文本指数,是一种用于信息检索的加权技术。这是一种统计方法,用于评估一个词对于一个文件集或者一个语料库中某一份文件的重要程度。字词的重要性与它在文件...
CTF Penetration Writeup 2
0x00 前言 比赛入口: 1http://192.168.50.133/intro.html 代码部分: Flag A level 0: https://pastebin.ubuntu.com/p/HDWBHp3cRY/ Flag A level 1: https://pastebin.ubuntu.com/p/sv2DXCqjTN/ Flag B&C: https://pastebin.ubuntu.com/p/cCrgMFhVTK/ Flag D: Flag E: 0x00 Flag A 这个题的目的很简单——登陆系统。我们可以从代码中看出,三个 level 用的都是相同的登陆逻辑,只不过是对输入内容的过滤措施不一样而已。我们挨个等级来看一下。 level 0: FLAG_A0_13FFEDE591_A 从代码中我们可以看到,level0 的反注入措施只是仅仅将输入中的空格去掉了。我们可以使用块注释符来代替空格: 输入的用户名为: 12-- md5 ('123')='202CB962AC59075B964B07152D234B70'...
CTF Intro
0x00 前言 挖洞,也就是找漏洞,本身就是个很随缘的技术,而且多半是八分靠运气,二分靠实力,尤其是在你不知道你要渗透的网站后端源代码的情况下。所以说,即便找不到漏洞,也不要认为是你个人能力不行导致的。举个例子,Linux 系统被安全人员研究了几十年了,但是到目前为止,被发现的内核提权漏洞你用一双手就能数得过来。这不是研究它的安全人员的能力不行,而是找漏洞本身就是个很随缘的过程。你缘分到了,有个漏洞可能就被你找着了。缘分没到,那也没办法。 很有幸,本科期间遇到一位对的老师,打过一年 CTF 比赛,也曾给校赛出过题。但是我和安全行业的缘分实在没到,所以后来读研、实习也没有选择安全方向。 现在只能以一位业余安全爱好者的身份,在组里,来介绍一些安全方面的常识,组织这么一场比赛,来增进大家的安全防范意识。也算对我曾经学过的知识的一次复习。 0x01 SQLi SQL 注入问题产生的根源在于直接拼接 SQL 语句,而使用预编译的 SQL 语句则没有 SQL 注入的问题。目前已经很少有场景下会直接拼接 SQL 语句了,所以 SQL 注入攻击也在逐渐淡出网络安全圈的视野。不过校级的 CTF 比赛往往还比较喜欢往这个方向上出题...
