行内元素的padding和margin
html中元素分为三种:块级元素、行内元素(也叫内联元素),内联块级元素。
常用块级元素<div><p><h1><h6><ol><ul><dl><table><address><blockquote> <form>
块级元素特点:
1、每个块级元素都从新的一行开始,并且其后的元素也另起一行。(霸道,一个块级元素独占一行)
2、元素的高度、宽度、行高以及顶和底边距都可设置。
3、元素宽度在不设置的情况下,是它本身父容器的100%(和父元素的宽度一致)
常用内联元素<a>、<span>、<br>、<i>、<em>、<strong>、<label>、<q>
内联元素特点:
1、和其他元素都在一行上;
2、元素的高度、宽度及顶部和底部边距不可设置;
3、元素的宽度就是它包含的文字或图片的宽度,不可改变。
常用内联块元素<img>、&l ...
Springboot整合Mybatis
创建Springboot项目
创建项目的文件结构以及jdk的版本
选择项目所需依赖
修改pom.xml文件添加mybatis-generator 插件mybatis-generator-maven-plugin mybatis比较官方的代码生成器,生成do,mapper,mapper.xml且生成大量mybatis动态sql
<build> <!--spring自带插件--> <finalName>demo-0.0.1-SNAPSHOT</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!--mybatis generator ...
Spring Initializer快速创建项目以及Yaml配置文件
IDEA:使用 Spring Initializer快速创建项目IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目;
选择我们需要的模块;向导会联网创建Spring Boot项目;
默认生成的Spring Boot项目;
主程序已经生成好了,我们只需要我们自己的逻辑
resources文件夹中目录结构
static:保存所有的静态资源; js css images;
templates:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker、thymeleaf);
application.properties:Spring Boot应用的配置文件;可以修改一些默认设置;
STS使用 Spring Starter Project快速创建项目
配置文件配置文件SpringBoot使用一个全局的配置文件,配置文件名是固定的;
•application.properties
•application.yml
配置文件的作用:修改SpringBoot自动配置的默认值; ...
数据结构之排序
插入排序概念插入排序(InsertionSort),一般也被称为直接插入排序。
对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增 1 的有序表
在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。
说明插入排序的平均时间复杂度也是 **O(n^2)**,空间复杂度为常数阶 **O(1)**,具体时间复杂度和数组的有序性也是有关联的。
插入排序中,当待排序数组是有序时,是最优的情况,只需当前数跟前一个数比较一下就可以了,这时一共需要比较 N-1 次,时间复杂度为 **O(N)**。最坏的情况是待排序数组是逆序的,此时需要比较次数最多,最坏的情况是 **O(n^2)**。
过程演示基本思想:每一步将一个待排序的数据插入到前面已经排好序的有序序列中,直到插完所有元素为止。
上图为一动态例子
下面再举个书上的例子:对42,20,17,13,28,14,23,15进行插入排序(升序)
每次循环将比较该数与前面排好顺序的每 ...
Spring Boot 之底层实现原理
POM文件父项目<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>他的父项目是<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.2.6.RELEASE</version> < ...
Springboot入门---环境配置及HelloWorld工程
Spring Boot 入门—HelloWorld工程Spring Boot 简介
简化Spring应用开发的一个框架;
整个Spring技术栈的一个大整合;
J2EE开发的一站式解决方案;
微服务2014,martin fowler
微服务:架构风格(服务微化)
一个应用应该是一组小型服务;可以通过HTTP的方式进行互通;
单体应用:ALL IN ONE
微服务:每一个功能元素最终都是一个可独立替换和独立升级的软件单元;
详细参照微服务文档
环境准备环境约束
–jdk1.8:Spring Boot 推荐jdk1.7及以上;java version “1.8.0_112”
–maven3.x:maven 3.3以上版本;Apache Maven 3.3.9
–IntelliJIDEA2017:IntelliJ IDEA 2017.2.2 x64、STS
–SpringBoot 1.5.9.RELEASE:1.5.9;
统一环境;
MAVEN设置;给maven 的settings.xml配置文件的profiles标签添加
<profile> <id>jdk- ...
操作系统之内存管理
内存管理的需求重定位为什么需要重定位?有两个原因:
多个进程同时在内存中,互相 “挤兑”,地址无法事先确定。
活动进程需要换入换出内存,如果地址换入还要保持先前相同的地址,这会是一个极大的限制。
因此,操作系统必须能够以某种方式把程序代码中的内存访问(逻辑地址)转换成实际的物理地址,并反映程序在内存中的位置,也就是具备重定位的能力。
保护进程必须受到保护,避免其他进程非法读写自己的内存单元。并且,由于重定位,无疑增加保护的难度。因为程序在内存中的位置是不可预测的,一次编译时不可能通过查绝对地址来确保保护。并且,大多数程序语言允许运行时进行地址的动态计算(如数组下标和指针)。因此,必须在运行时检查进程所有的内存访问,确保进程不会越界访问。
注意:内存保护的需要必须由处理器(硬件)来满足,而不是由操作系统(软件)来满足,只是因为操作系统不能预测程序可能产生的所有内存访问;即使可以预测,提前审查每个进程中存在的违法访问也是非常费时的。所以,处理器必须具备保护的能力。
共享多个进程正在执行同一程序,那就内存中只保存一份,让它们共享吧
逻辑组织主要体现在分段技术上,后面分析。
物理组织 ...
操作系统之并发性:互斥与同步
基本概念
原子操作:一个函数(原语)或动作的指令序列不可分割,要么作为一个整体执行(不可中断),要么都不执行。
临界资源:一次仅允许一个进程独自占有使用的不可剥夺资源。
临界区:进程访问临界资源的那一段代码。
互斥:当一个进程正在临界区中访问临界资源时,其他进程不能进入临界区。
同步:合作的并发进程需要按先后次序执行。例如:一个进程的执行依赖于合作进程的消息或信号。当一个进程没有得到来自合作进程的消息或信号时需阻塞等待,直到消息或信号到达才唤醒。
死锁:多个进程全部阻塞,形成等待资源的循环链。
饥饿:一个就绪进程被调度程序长期忽视、不被调度执行。
信号量:用于进程间传递信号的一个整数。在信号两上只可以进行三种操作,即初始化,递增,递减。这三种操作分别都是原子操作。递减作用于阻塞一个进程,递增作用于解除一个进程的阻塞。信号量也称为计数信号量或一般信号量。
并发原理进程交互
进程之间相互不知道对方的存在:独立的进程,不会在一起工作,这种情况的最好的例子是多个独立进程的多道程序设计,相当于批处理作业,也可以是交互式会话或者混合。尽管这些进程不会一起工作,但操作系统需要知道他们对资源的竞争情 ...
操作系统之线程、对称多处理(SMP)和微内核
线程、对称多处理(SMP)和微内核线程概念线程也称为轻量级进程(lightweight process),是程序的一个片段的执行。线程的组成为:线程ID、当前的指针、少量寄存器、堆栈(stack)。线程是CPU调度和分配的基本单位,线程自己不拥有资源,但是线程有自己的堆栈(用于函数实参和内部分配变量存储)。同一个进程下的线程共享进程的资源(包括I/O设备、文件描述符fd、堆、进程的代码段等)。每个进程至少有一个线程,如果进程只有一个线程,那么这个线程就是程序本身。线程间也可以并发执行。线程也拥有三个基本状态:就绪状态、阻塞状态、运行状态。
多线程多线程是指操作系统在单个进程内支持多个并发执行路径的命令。
Single-threaded approach refers to the traditional approach of a single thread of execution per process, in which the concept of a thread is not recognized(单线程指一个进程中只有一个线程在执行的传统方法(还没有明确线程的概念))
...
Collections排序(Comparable和Comparator接口实现)
前言
包装类Collections的排序方法可以运用到各种集合框架,非常方便
接口分析Comparable接口
Comparable接口在 java.lang.Comparable 包下
Comparable接口的实现方法:public int compareTo(T t);
Comparable接口是在集合的(类的)内部实现的排序方式,调用的实质 t1.compareTo(t2);
在排序对象本身支持相互比较所需要的接口(如Integer、String、Double、Float等)时,可以直接调用 Collections.sort() 方法的Comparable接口(参考程序示例)
当数值或ASCII码值从小到大的默认顺序或者排序的根据对象不满足程序需求时,可以重写compareTo方法(参考程序示例)
Comparator接口
Comparator接口在 java.util.Comparator 包下
Comparator接口的实现方法:public int compare(T t1, T t2);
Comparator接口是在集合的(类的)外部实现的排序方式,需要用到一个比 ...