第一天
1、JDK 和 JRE 和 JVM 分别是什么,有什么区别?
JDK(Java Development Kit )
JDK是Java开发者的核心工具包,也可以说jdk是Java的sdk(software Development Kit 软件开发工具包),其中包含有JRE(Java运行时环境)、JVM(Java虚拟机)、Java基础类库、JavaDoc、jar等开发者所需的工具包。
JDK主要的三个版本:
JavaSE:Java标准版,初学者学习的版本
JavaEE:Java企业版,开发企业级项目所需要的版本
JavaME:Java微型版,顾名思义,适用于一些小型设备开发,如移动端开发等
JRE(Java Runtime Enrivonment)
JRE是Java运行时环境,若不是开发者安装有JRE就能运行Java程序。JRE又包括JVM,以及Java的所有类库。
JVM(Java Virtual Machine)
JVM是Java的虚拟机,是Java运行程序的环境,用于执行Java的字节码文件,主要的核心就是实现跨平台,能把程序在不同的平台(系统)执行,提高Java程序的移植性和安全性。同时包含又垃圾回收、动态加载等功能。
三者之间的关系
JDK包括JRE,JRE包含JVM,其中JDK主要是J由RE 以及 Java 所需的开发工具组成,JRE 由 JVM 和 Java所有类库组成。
三者之间的区别
- JDK:主要是对Java开发人员的工具
- JRE:运行Java程序所必须的环境
- JVM:跨平台核心部分,能运行Java应用程序。
2、什么是字节码?采用字节码的最大好处是什么?
字节码是源程序在Java编译器编译之后产生,是Java程序的中间代码(产物),然而字节码只面向JVM,最后JVM机制就会将字节码文件进行编程成Java程序。
采用字节码的好处:
字节码具有较好的移植性,不依赖于操作系统或硬件平台
更好的实现跨平台
一次编译,多处运行。
Java程序被编译成字节码,而不是直接编译成机器码,因此Java程序可以在任何支持Java虚拟机的平台上运行。不同的操作系统和硬件平台可能需要不同的JVM实现,但是它们都可以执行相同的字节码程序。这种跨平台的能力是Java的最大优势之一,使得Java程序可以在不同的硬件和操作系统上运行,从而实现高度的可移植性。
3、什么是数据库事务?讲一下事务的 ACID 特性?
数据库事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态。也就是保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),那么这些修改就永久地保存下来;要么数据库管理系统将放弃所作的所有修改,整个事务回滚(rollback)到最初状态。ACID特性主要为以下四种
原子性(atomicity)指事务是一个不可分割的单元,要么全部提交,要么全部失败回滚。
一致性(consistency)指事务执行前后,数据从一个合法性状态变换到另外一个合法性状态。这种状态是语义上的而不是语法上的,跟具体的业务有关。
隔离型(isolation)指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。持久性是通过事务日志来保证的。日志包括了重做日志和回滚日志。当我们通过事务对数据进行修改的时候,首先会将数据库的变化信息记录到重做日志中,然后再对数据库中对应的行进行修改。这样做的好处是,即使数据库系统崩溃,数据库重启后也能找到没有更新到数据库系统中的重做日志,重新执行,从而使事务具有持久性。
数据库事务是指一系列数据库操作(如插入、更新、删除等),这些操作要么全部执行成功,要么全部回滚(撤销)到之前的状态,以保证数据库的一致性和完整性。
ACID是数据库事务主要的四个特性,包括:
原子性(Atomicity):事务是一个原子操作,要么全部执行,要么全部回滚,不能只执行其中一部分操作。如果事务中的任意一项操作失败,则整个事务都必须回滚,以保证数据的一致性。
一致性(Consistency):事务在执行前和执行后,数据库的状态必须保持一致,即满足数据库的完整性约束。例如,如果一个银行账户的余额是100元,那么进行一次转账事务后,不管转账操作是否成功,账户的余额总和仍应为100元。
隔离性(Isolation):每个事务的执行应该是相互隔离的,一个事务所做的修改在提交前对其他事务是不可见的。多个事务并发执行时,每个事务都应该像独立运行一样,相互之间不能干扰。
持久性(Durability):一旦事务提交成功,对数据库的修改就是永久性的,即使发生了系统故障或其他问题,这些修改也应该被保存下来。数据库应该可以恢复到最近一次提交的状态。比如一旦过了晚上十二点,昨天就是昨天了,不可能再回到昨天了的。
ACID特性是数据库事务的关键特点,确保了数据库的一致性、可靠性和稳定性。在设计和实现数据库系统时,需要特别注意这些特性,并采用适当的技术手段来保证数据库事务的正确性和可靠性。
4、HTML常用标签
<html>:定义HTML文档的根元素。
<head>:定义HTML文档的头部,包括文档的元数据(如标题、描述、样式表等)。
<title>:定义文档的标题,通常显示在浏览器的标题栏或书签中。
<body>:定义HTML文档的主体部分,包括网页的内容、图像、链接、表单等。
<h1>-<h6>:定义HTML标题,1~6依次递减
<p>:定义段落,通常用于排版文本内容。
<a>:定义链接,通过href属性指定链接的目标地址。
<img>:定义图像,通过src属性指定图像的源文件路径。
<ul>和<li>:定义无序列表和列表项,通常用于显示菜单、选项列表等。
<ol>和<li>:定义有序列表和列表项,用于按照特定的顺序显示列表项。
<table>、<tr>、<td>:定义表格、表格行、表格单元格,用于排版数据。
<form>、<input>、<button>:定义表单、表单输入字段、提交按钮,用于用户输入和提交数据。
<div> 、 <span> :定义盒子模型
<script> :JS脚本标签
<a> : 超链接标签
5、CSS 选择器有哪些?优先级分别是什么?
元素选择器:通过元素名称选择元素,如p、div等。
类选择器:通过类名选择元素,以.开头,如.class。
ID选择器:通过元素的ID选择元素,以#开头,如#myId。
属性选择器:通过元素的属性选择元素,如[type="text"]表示选择所有type属性值为text的元素。
伪类选择器:用于选择特殊状态的元素,如:hover表示鼠标悬停在元素上时的状态。
后代选择器:用于选择元素的后代元素,如ul li表示选择ul元素下的所有li元素。
相邻兄弟选择器:用于选择相邻的兄弟元素,如h1 + p表示选择紧接着h1元素后面的p元素。
通用选择器:用于选择所有元素,表示为*。
在CSS中,选择器的优先级是由选择器的特殊性和重要性共同决定的,选择器的优先级从高到低分别为:
!important:加上这个标记的样式拥有最高的优先级。
内联样式:直接在元素标签中添加style属性设置样式。
ID选择器:通过ID选择元素的样式优先级次之。
类选择器、属性选择器和伪类选择器:具有相同特殊性时,按照出现的先后顺序决定优先级。
元素选择器和伪元素选择器:优先级最低。
需要注意的是,在选择器优先级相同时,后定义的样式会覆盖前面的样式。在设计CSS样式时,应该尽量避免使用!important,并合理利用选择器的特殊性和优先级,以提高CSS样式的可读性和维护性。
6、有哪些常见的 CSS 布局?
块级布局:通过将元素设置为display: block,元素会独占一行,并在前后自动添加空白,常用于排版段落、标题、导航栏等内容。
行内布局:通过将元素设置为display: inline,元素不会独占一行,而是在同一行内按顺序排列,常用于排版链接、按钮、标签等内容。
行内块级布局:通过将元素设置为display: inline-block,元素不会独占一行,但是可以设置宽度和高度,并且在同一行内按顺序排列,常用于排版图标、按钮等内容。
浮动布局:通过将元素设置为float: left或float: right,使元素脱离文档流并向左或右浮动,常用于实现多栏布局、图文混排等效果。
弹性盒布局:通过将容器元素设置为display: flex,可以设置容器内部元素的排列方向、对齐方式、间距等属性,常用于排版导航栏、卡片布局、响应式布局等。
网格布局:通过将容器元素设置为display: grid,可以将容器内的元素划分为多行多列的网格,并设置网格之间的间距、对齐方式等属性,常用于排版复杂的网站布局、表单布局等。
以上是常见的CSS布局方式,不同的布局方式适用于不同的设计需求和场景,根据实际情况选择最合适的布局方式可以提高CSS样式的可读性和维护性。