NoTrouble's Blog

我们一路奋战,不是为了改变世界,而是为了不让世界改变我们


  • 首页

  • 标签

  • 分类

  • 歌单

  • 搜索

物理层常见问题

发表于 2021-08-24 | 分类于 Computer Networking

在物理层上所传送的数据单位是比特。

物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异, 使其上面的数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。

在互联网使用的各种协议中最重要和最著名的就是 TCP/IP 两个协议。现在人们经常提到的 TCP/IP 并不一定单指 TCP 和 IP 这两个具体的协议,而往往表示互联网所使用的整个 TCP/IP 协议族。

阅读全文 »

计算机操作系统

发表于 2021-08-21 | 分类于 操作系统

进程管理

进程与线程

进程

进程是资源分配的基本单位。

线程

线程是独立调度的基本单位。一个进程中可以有多个线程,它们共享进程资源。

阅读全文 »

Java并发常见问题

发表于 2021-08-21 | 分类于 多线程

何为进程

进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。

何为线程

线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。

阅读全文 »

Spring常见问题

发表于 2021-08-20 | 分类于 Spring

Spring IOC&AOP

IOC

IOC控制反转是一种设计思想,而不是一个具体的技术实现。IOC的思想就是将原本在程序中手动创建对象的控制权,交由Spring框架来管理。

  • 控制:指的是对象创建的权利
  • 反转:控制权交给外部环境IOC容器

将对象之间的相互依赖关系交给IOC容器来管理,并由IOC容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。IOC容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。

在实际项目中一个 Service 类可能依赖了很多其他的类,假如我们需要实例化这个 Service,你可能要每次都要搞清这个 Service 所有底层类的构造函数。如果利用IOC的话,你只需要配置好,然后在需要的地方引用就行了,这大大增加了项目的可维护性且降低了开发难度。

在 Spring 中, IOC容器是 Spring 用来实现 IOC的载体, IOC 容器实际上就是个 Map(key,value),Map 中存放的是各种对象。

IOC 最常见以及最合理的实现方式叫做依赖注入(Dependency Injection,简称 DI)

阅读全文 »

InnoDB对MVCC的实现

发表于 2021-08-20 | 分类于 MySQL

一致性非锁定读

对于 一致性非锁定读(Consistent Nonlocking Reads) 的实现,通常做法是加一个版本号或者时间戳字段,在更新数据的同时版本号 + 1 或者更新时间戳。查询时,将当前可见的版本号与对应记录的版本号进行比对,如果记录的版本小于可见版本,则表示该记录可见。

在 InnoDB 存储引擎中,多版本控制 (multi versioning) 就是对非锁定读的实现。如果读取的行正在执行 DELETE 或 UPDATE 操作,这时读取操作不会去等待行上锁的释放。相反地,InnoDB 存储引擎会去读取行的一个快照数据,对于这种读取历史数据的方式,我们叫它快照读 (snapshot read)。

在 Repeatable Read 和 Read Committed 两个隔离级别下,如果是执行普通的 select 语句(不包括 select ... lock in share mode ,select ... for update)则会使用 一致性非锁定读(MVCC)。并且在 Repeatable Read 下 MVCC 实现了可重复读和防止部分幻读。

阅读全文 »

MyBatis常见问题

发表于 2021-08-19 | 分类于 MyBatis

#{}和${}的区别是什么

  • ${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。${}是字符串替换,Mybatis在处理${}时,就是把${}替换成变量的值
  • #{}是预编译处理,Mybatis在处理时,会将sql中的#{}替换为?,调用PreparedStatement的set方法来赋值,#{}可以有效的防止SQL注入,提高系统安全性

阅读全文 »

经典垃圾收集器

发表于 2021-08-16 | 分类于 JVM

Serial回收器:串行回收

Serial收集器是最基础、历史最悠久的收集器,曾经(在JDK1.3.1之前)是HotSpot虚拟机新生代收集器的唯一选择。这个收集器是一个单线程工作的收集器,但它的“单线程”的意义并不仅仅说明它只会使用一个处理器或一条收集线程去完成垃圾收集工作,更重要的是强调在它进行垃圾收集时,必须暂停其他所有工作线程,直到它收集结束。

阅读全文 »

HTTP协议

发表于 2021-08-15 | 分类于 Computer Networking

基础概念

请求和响应报文

客户端发送一个请求报文给服务器,服务器根据请求报文中的信息进行处理,并将处理结果放入响应报文中返回给客户端。

请求报文结构:

  • 第一行是包含了请求方法、URL、协议版本;
  • 接下来的多行都是请求首部Header,每个首部都有一个首部名称,以及对应的值;
  • 一个空行用来分隔首部和内容主体Body
  • 最后是请求的内容主体

阅读全文 »

MySQL基本使用

发表于 2021-08-12 | 分类于 MySQL基础

数据库(DB, DataBase),作用:存储数据,管理数据。

数据库分类

  • 关系型数据库
    • MySQL、Oracl、SqlServer、DB2、SQLlite
    • 通过表和表之间,行和列之间的关系进行数据的存储
  • 非关系型数据库
    • Redis,MongDB
    • 对象存储,通过对象的自身属性来决定

DBMS数据库管理系统

  • 数据库的管理软件,科学有效的管理我们的数据

阅读全文 »

线程池

发表于 2021-08-10 | 分类于 多线程

自定义线程池

组件:线程池,阻塞队列。

阅读全文 »
<1…345…13>

130 日志
31 分类
51 标签
GitHub E-Mail
© 2024 NoTrouble