Makefile
0. 简介Makefile 关系到了整个工程的编译规则。一个工程中的源文件不计其数,并且按类型、功能、模块分别放在若干个目录中,Makefile 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个 Shell 脚本一样,其中也可以执行操作系统的命令。
Makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。 make是一个命令工具,是一个解释Makefile中指令的命令工具。
1. 语法规则1.1 基本语法123456789# rules1target1: prerequisites1 command1 command2# rules2target2: prerequisites2 command3 command4 command5
注意:
command 必须以Tab(\t)键开头
Makefile有隐含时间戳逻辑
target timestamp > prerequisi ...
CSRF
0x00 CSRF简介 CSRF(Cross-site request forgery)跨站请求伪造,也被称为 One Click Attack 或者 Session Riding,是一种对网站的恶意利用。由于目标站点无 Token / Referer 限制,导致攻击者可以用户的身份完成操作达到各种目的。
攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件、发消息、甚至财产操作:转账、购买商品等)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。这利用了web中用户身份认证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
0x01 CSRF 攻击原理123451.用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;2.在用户信息用过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;3.用户未退出网站A之前,在同一浏览器中打开一个TAB页访问网站B;4.网站B接受到用 ...
Untitled
title: conda更换软件源date: 2020-03-07 11:53:23tags: Setting修改 condarc 配置文件这里以添加清华源为例
12345678910111213cat <<'EOF' > ~/.condarcchannels: - defaultsshow_channel_urls: truedefault_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua ...
torchvision
torchvision.transforms12345678from torchvision import transforms# 对原有图片进行裁剪,保留长宽比transforms.resize(num) # 把一个取值范围是[0,255]的PIL.Image或者shape为(H,W,C)的numpy.ndarray,转换成形状为[C,H,W],取值范围是[0,1.0]的torch.FloadTensortransforms.ToTensor()# 给定均值:(R,G,B) 方差:(R,G,B), 把 Tensor 正则化transforms.Normalize(mean, std)
Jackson 踩坑
Jackson 反序列化对象冲突Jackson 反序列化对象时,如果所需反序列化对象 Setter 存在重载,则会提示错误。
Code 如下:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;import org.junit.Test;public class MyTest { @Test public void jacksonTest() throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(new MyClass(1 ...
Untitled
0. JVM 内存结构目前主流的 JVM 都基于 Hotspot VM 来设计并且采用“分代回收”的算法。“分代回收”的原理:对象的生命周期不同,所以针对不同生命周期的对象可以采取不同的回收方式,以便提高回收效率。Hotspot VM 将内存划分为不同的物理区,就是“分代”思想的体现。如图所示,JVM 内存主要由新生代、老年代、永久代构成。
Young Generation :大多数对象在新生代中被创建,其中大部分对象的生命周期很短。每次新生代的垃圾回收(Minor GC)后只有少量对象存活,所以选用标记-复制算法,只需要少量的复制成本就可以完成回收。
新生代内又分三个区:一个 Eden 区,两个 Survivor 区,大部分对象在 Eden 区中生成。当 Eden 区满时,还存活的对象将被复制到两个 Survivor 区(中的一个)。当这个 Survivor 区满时,此区的存活且不满足“晋升”条件的对象将被复制到另外一个 Survivor 区。对象每经历一次 Minor GC,年龄加1,达到“晋升年龄阈值”后,被放到老年代,这个过程也称为“晋升”。显然,“晋升年龄阈值”的大小直 ...
Java Exceptions & Errors
1. Java 异常类的层次结构图片摘自 Simple Snippets
从图中可以看出, Exceptions 类和 Errors 类都继承于 Throwable 类。
2. Java Exception直接上源码(摘自 JDK 11.0.10 )
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980public class Exception extends Throwable { static final long serialVersionUID = -3387516993124229948L; /** * Constructs a new exception with {@code null} as its detail message. * The cause is ...
String / StringBuilder / StringBuffer
1. String 不可变的原因直接上源码(摘自 JDK 11.0.10 )— 仅取部分源码非全部
1234public final class String implements java.io.Serializable, Comparable<String>, CharSequence { @Stable private final byte[] value;}
从源码中可以看到 String 类中使用 final 修饰一个 byte[] 来保存字符串,因此 String 对象是不可变的。
2. StringBuilder源码(摘自 JDK 11.0.10)— 仅取部分源码非全部
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354public final class StringBuilder extends AbstractStringBuilder implements j ...
Java equals
equals作用equals()的作用是用来判断两个对象是否相等
源码来源于 JDK 11.0.10
1234// 定义于 Object 类public boolean equals(Object obj) { return (this == obj);}
因为equals()定义于 Object 类中,所以所有的 Java 类都会实现该方法。即所有的类都可以通过equals()对两个对象进行比较。在上述源码中可以看到,默认的equals()方法就是实现的 ==操作,即比较两个对象地址是否相同。
由此可将所有的 Java 类分为两类:
覆盖equals()方法:用自定义的方法来判断两个对象是否相等。通常覆盖的选择为,判断两个对象的内容是否相等,如果相同返回 true ,否则,返回 false;
123456789101112131415161718192021222324public class Test01 { public static void main(String[] args) { Student ...
Java Annotation
Java 注解从 JDK5 开始支持加入源代码的特殊语法元数据
1. 内置注解
@Override
检查该方法是否是重写方法,如果父类 / 实现的接口中不存在该方法时,会提示编译错误
@Deprecated
标记过时的方法,如果使用被标记为此注解的方法,会提示便衣警告。
@SuppressWarnings
镇压警告,使编译器忽略注解声明中的警告
12345678910111213141516171819202122public class Test01 extends Object{ // 重写 @Override public String toString() { return super.toString(); } // 方法弃用 @Deprecated public static void test(){ System.out.println("Deprecated"); } // 镇压所有警告 @S ...