xiaoyh 的个人博客

一个只会敲代码的咸鱼

0%

自从来字节后好久没学习过了,从今天开始要开始学习了。

因为想要配置服务器,所以记录下 vim 编辑器的配置

“ vim 是什么

vim 是一种命令行式的编辑器,因为 Linux 操作系统一般都是纯命令行的界面,所以 vim 在 Linux 上用的比较多。因为它有很多强大的功能,深受码农们的喜爱。

“ 如何下载

根据我配置服务器的经验,一般 Linux 只有 vi 编辑器,vim 需要专门去下载。不同的 Linux 发行版有不同的下载方式:

  • centos : yum -y install vim
  • ubuntu : sudo apt-get install vim
阅读全文 »

到虎扑实习了,技术栈是 php ,所以得先安装配置。

下载

PHP 官网下载安装包,下载后解压到指定目录即可。

线程安全与线程不安全

从 2000 年 10 月 20 日发布的第一个 Windows 版的 PHP3.0.17 开始的都是线程安全的版本,直至 5.2.1 版本开始有 Thread Safe(TS,线程安全)和 None Thread Safe(NTS,非线程安全)之分。

目前 PHP 运行的方式有以下几种:

  • CGI:Common Gateway Interface(通用网关接口),是外部应用程序(CGI程序)与 Web 服务器之间的接口标准,为每一个请求都开辟一个进程。
  • ISAPI:Internet Server Application Programming Interface(互联网应用程序接口),是为 Microsoft 所提的 Internet server 的 API,区别于 CGI ,ISAPI 采用多线程的方式
  • FastCGI:CGI 存在收到每个请求时都开辟一个进程等不足,FastCGI可以理解为是征对CGI的改进版

由于 Linux/Unix 系统是采用多进程的工作方式,而 Windows 系统采用多线程的工作方式。即 Linux 系统的任务调度基本单位是进程,Windows 系统的任务调度基本单位是线程。

阅读全文 »

并行与并发

  • 并行:多个任务在同一时刻进行
  • 并发:多个任务在同一段时间间隔进行

举个例子,并行就是两个人分别做任务 A 与任务 B,因此在执行期间无论什么时刻这俩任务都在进行;
而并发是一个人,一会儿做一下任务 A,一会儿做一下任务 B,这只能保证某个时间段这俩任务都在进行。

对于实际情况,CPU 在计算机中也是一种资源,作为资源实体的是 CPU 的时间片。当 CPU 时间片作为资源被分给进程时,进程里面的多个线程互相竞争 CPU 的时间片。

而对于单核 CPU 而言,就相当于一个人做多个任务,那么显然多个线程是并发执行。
那么多核 CPU 自然是相当于多个人做多个任务。不过往往也不是纯粹的并行(比如我做任务 A,你做任务 B),而是并行与并发并存(我和你都是交替地做任务 A 和任务 B)。即使对于单线程,CPU 也不会只让一个核去执行,而是让多个核去合作执行。

阅读全文 »

容器包括 Collection 和 Map 两种,Collection 存储对象的集合,而 Map 存储着键值对的集合。

Collection(接口)

Collection 下也包括 List 和 Set 两种:

List(接口)

List 是非常常用的数据类型,是有序的的 Collection。这里的有序指的是存入与取出的顺序一样,而不是指排序。

一共有三个实现类:ArrayList、Vector、LinkedList。

ArrayList

ArrayList 是最常用的 List 实现类,内部是通过数组实现的。

阅读全文 »

浏览器的同源策略

同源策略是一个重要的安全策略,它限制了从同一个源加载的文档或者脚本如何与另一个源的资源进行交互,这是一个用于隔离潜在恶意文件的重要安全机制。

如果两个 URL 的 protocol、port (如果有指定的话)和 host 都相同的话,则这两个 URL 是同源。这个方案也被称为“协议/主机/端口元组”,或者直接是 “元组”。

没有同源策略限制的两大危险场景

没有同源策略限制的接口请求

当用户登录某知名网站 A 成功后会获取到 cookie,且 cookie 往往会在浏览器中存在很长的一段时间。

黑客诱导用户访问自己的网站,并在自己的网站中藏有对网站 A 的恶意请求脚本(比如转账),由于每次浏览器发起请求都会带着 cookie,所以相当于黑客登录了你的账号。这种攻击方式也叫做 CSRF 攻击。

没有同源策略限制的 Dom 查询

黑客在自己网站中嵌入(通过 iframe 等标签)网站 A 的敏感页面(如登录页面)伪装成网站 A,诱导用户登录自己的钓鱼网站并输入用户名和密码。

其实同源策略对于这一点的影响不大,因为即使不嵌入,也可以仿造网站 A 的敏感页面直接写一个网站出来。

待更新

JVM 分为三个部分:类加载器,执行引擎,运行时数据区。

运行时数据区

运行时数据区由五个部分组成:程序计数器、栈、本地方法栈、堆、方法区。

程序计数器

线程私有,记录当前线程正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)。

线程私有,线程执行 Java 方法的同时会创建一个栈帧,用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,对应着一个栈帧在栈中入栈和出栈的过程。

阅读全文 »

Java 中的死锁

Java 中的死锁主要是线程死锁,是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。

当线程进入对象的 synchronized 代码块时,便占有了资源,直到它退出该代码块或者调用 wait 方法,才释放资源。在此期间,其他线程将不能进入该代码块。

当线程互相持有对方所需的资源时,会互相等待对方释放资源,如果线程都不主动释放所占有的资源,将产生死锁。

阅读全文 »

约束

SQL 约束用于规定表中的数据规则。如果存在违反约束的数据行为,行为会被约束终止。

约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。

NOT NULL

NOT NULL 约束强制字段不接受 NULL 值,即强制字段始终有值。

这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

阅读全文 »

索引是什么

以字典为例,普通的数据库查找,就如同从字典的第一页往后翻去找一个字一样,需要从数据表的第一行开始顺序查找下去。表越大,消耗的时间就越长。

因此查阅字典一般都是通过目录直接定位到查找的值,索引可以理解为数据库的目录,用于提高数据库的查阅速度。

索引的优缺点

优点:提高了数据库的查询效率;

缺点:会降低数据库更新的效率,因为需要修改索引文件。

阅读全文 »

索引

索引可以大大提高 SQL 的检索速度,用户无法看到索引,它们只能被用来加速搜索/查询。

拿汉语字典打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。

建立索引会占用磁盘空间的索引文件。所以,虽然索引提高了查询速度,但同时也会降低更新表的速度。因为更新表时,MySQL 不仅要保存数据,还要保存索引文件。

阅读全文 »