html笔记 ai问答

if (params != null && params.isEmpty())

这两个重复吗

不,这两个条件并不重复。

params != null 是检查 params 是否为 null,而 params.isEmpty() 是检查 params 是否为空。这两个条件涉及了不同的概念。

params != null 是在检查 params 对象是否存在。如果 params 为 null,则这个条件为假(false)。

params.isEmpty() 是在检查 params 集合是否为空。如果 params 集合为空,则这个方法返回真(true)。

只有当这两个条件都满足时(即 params 对象存在且集合为空),整个 if 语句中的条件才为真(true)。

在HTML中,JavaScript函数的调用方式主要有以下几种:

内联调用:直接在HTML元素的事件属性中调用JavaScript函数。这是最常见的调用方式之一。

html

<button οnclick="myFunction()">点击我</button>

<script>

function myFunction() {

alert("你点击了按钮!");

}

</script>

脚本块中调用:在<script>标签内部的代码块中直接调用函数。

html

<script>

function myFunction() {

alert("函数被调用了!");

}

myFunction(); // 直接调用函数

</script>

事件监听器调用:通过JavaScript为HTML元素添加事件监听器来调用函数。这种方式可以实现更细粒度的事件处理和函数调用。

html

<button id="myButton">点击我</button>

<script>

document.getElementById('myButton').addEventListener('click', myFunction);

function myFunction() {

alert("你点击了按钮!");

}

</script>

窗口加载时调用:使用window.onload或DOMContentLoaded事件来在页面加载完成后调用函数。

html

<script>

window.onload = function() {

myFunction();

}

function myFunction() {

alert("页面已加载完成!");

}

</script>

定时器调用:使用setTimeout或setInterval函数来在指定的延迟后或在重复的间隔内调用函数。

html

<script>

setTimeout(myFunction, 2000); // 2秒后调用函数

function myFunction() {

alert("2秒已过!");

}

</script>

通过HTML元素的data-属性调用:虽然不常见,但你可以通过HTML元素的自定义data-属性来存储需要传递给函数的信息,并在事件处理程序中调用该函数。

html

<div id="myDiv" data-value="hello">点击我</div>

<script>

document.getElementById('myDiv').addEventListener('click', function() {

var value = this.getAttribute('data-value');

myFunction(value);

});

function myFunction(message) {

alert("你传递的消息:" + message);

}

</script>

通过HTML表单提交调用:在表单的onsubmit事件处理器中调用函数,通常用于验证表单数据或处理表单提交。

html

<form οnsubmit="return validateForm()">

<!-- 表单字段 -->

<input type="submit" value="提交">

</form>

<script>

function validateForm() {

// 验证逻辑

if (/* 验证失败 */) {

return false; // 阻止表单提交

}

// 处理表单提交

return true;

}

</script>

这些是HTML中调用JavaScript函数的一些常见方式。根据具体的需求和场景,可以选择适合的方式来调用函数。

在jQuery中,`("p span")\`和\`("p > span")`两个选择器虽然看起来相似,但它们的选择范围是有区别的:

  • `$("p span")`会选择所有位于`p`元素内的`span`元素,无论`span`元素嵌套在`p`元素内部的深度如何。这意味着不论`span`是直接子元素还是间接子元素(例如在`div > p > span`这样的层级结构中),只要它在`p`元素内,都会被选中。

  • 而`$("p > span")`则更精确,它只会选择那些作为`p`元素**直接子元素**的`span`元素。也就是说,只有当`span`元素紧接在`p`元素之后且没有其他元素夹在中间时,才会被这个选择器选中。

总结来说,如果要选取仅限于`p`标签下一级别的`span`标签,请使用`("p \> span")\`;如果要选择\`p\`标签下的任何级别的\`span\`标签,则使用\`("p span")`。

Java中for循环的遍历方式

在Java中,for循环有几种不同的遍历方法,这取决于你想要遍历的数据结构。以下是一些常见的遍历方法:

基本for循环(索引遍历):

这是最常见的遍历数组或列表的方法,通过索引来访问元素。

java

int[] array = {1, 2, 3, 4, 5};

for (int i = 0; i < array.length; i++) {

System.out.println(array[i]);

}

List<String> list = Arrays.asList("a", "b", "c");

for (int i = 0; i < list.size(); i++) {

System.out.println(list.get(i));

}

增强for循环(for-each循环):

从Java 5开始,引入了增强for循环(也称为for-each循环),它简化了遍历数组或集合的过程。

java

int[] array = {1, 2, 3, 4, 5};

for (int number : array) {

System.out.println(number);

}

List<String> list = Arrays.asList("a", "b", "c");

for (String item : list) {

System.out.println(item);

}

迭代器遍历:

对于实现了Iterable接口的数据结构(如List、Set等),你可以使用迭代器(Iterator)来遍历。

java

List<String> list = Arrays.asList("a", "b", "c");

Iterator<String> iterator = list.iterator();

while (iterator.hasNext()) {

String item = iterator.next();

System.out.println(item);

}

Lambda表达式与Stream API:

从Java 8开始,可以使用Stream API和Lambda表达式来遍历和处理集合中的元素。

java

List<String> list = Arrays.asList("a", "b", "c");

list.stream().forEach(item -> System.out.println(item));

// 或者使用更简洁的方法引用

list.forEach(System.out::println);

传统for循环与步长:

你可以使用带有步长的传统for循环来遍历数组或列表,例如,每次跳过一定数量的元素。

java

int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

for (int i = 0; i < array.length; i += 2) { // 跳过一个元素

System.out.println(array[i]);

}

并行流遍历:

利用Java 8引入的并行流(parallel streams),可以在多核处理器上并行遍历和处理集合中的元素。

java

List<String> list = Arrays.asList("a", "b", "c", "d", "e");

list.parallelStream().forEach(System.out::println);

以上就是在Java中使用for循环进行遍历的一些常见方法。选择哪种方法取决于你的具体需求,例如遍历的数据结构、是否需要并行处理、是否需要对元素进行转换或过滤等。

这两个HTML代码片段的主要区别在于<form>标签的使用。让我们逐一分析:

第一个代码片段:

html

<body>

<form>

<input>

</form>

</body>

在这个代码片段中,<input>标签被包含在一个<form>标签内。<form>标签通常用于收集用户输入,并允许用户提交这些数据到服务器。这个<form>标签可以包含多个输入字段(如文本框、复选框、单选按钮等),并且通常会有一个提交按钮来触发表单的提交。

然而,在这个例子中,<form>标签内只有一个<input>标签,并没有指定表单的提交目标(例如,action属性)或提交方法(例如,method属性,通常是GET或POST)。这意味着如果用户在这个输入框中输入了数据并点击了提交按钮(虽然在这个例子中并没有显示提交按钮),浏览器会不知道如何处理这些数据。

第二个代码片段:

html

<body>

<input>

</body>

在这个代码片段中,<input>标签没有包含在<form>标签内。这意味着这个输入框没有与任何表单相关联。这样的输入框通常用于收集用户的单个数据点,但它本身不能提交数据。通常,这样的输入框会配合JavaScript代码来实现特定的功能,例如动态更新页面上的其他元素。

总结:

第一个代码片段中的<input>标签是一个表单输入字段,但由于缺少必要的表单属性(如action和method),它实际上并不能正常工作。

第二个代码片段中的<input>标签是一个独立的输入字段,没有与表单关联,通常用于实现一些简单的交互功能。

在大多数情况下,如果你打算收集用户输入并希望这些数据能被提交到服务器,你应该使用<form>标签来包裹你的输入字段。如果你只是想创建一个不参与表单提交的输入框,那么可以将其放置在<form>标签外部。

当然可以,让我们逐行解释上面的 CSS 代码:

css

body, html {

height: 100%; /* 设置 body 和 html 元素的高度为 100%,使得它们占据整个视口的高度 */

margin: 0; /* 移除 body 和 html 元素的外边距,确保它们紧贴屏幕边缘 */

display: flex; /* 设置 body 和 html 元素的显示方式为弹性盒子布局(flex layout) */

justify-content: center; /* 在主轴(默认为水平方向)上居中子元素 */

align-items: center; /* 在交叉轴(默认为垂直方向)上居中子元素 */

}

#centered-div {

width: 50vw; /* 设置 id 为 "centered-div" 的元素的宽度为视口宽度的 50% */

height: 50vh; /* 设置 id 为 "centered-div" 的元素的高度为视口高度的 50% */

background-color: #f00; /* 设置 id 为 "centered-div" 的元素的背景颜色为红色,这只是为了使其可见,你可以根据需要更改颜色 */

}

这段 CSS 代码的作用是确保一个具有特定 ID 的 div 元素(在这个例子中是 centered-div)能够占据浏览器视口宽度和高度的 50%,并且这个 div 会被居中显示。

body, html { ... }:这是一个选择器,它选择了文档中的 body 和 html 元素。

height: 100%;:将 body 和 html 的高度设置为视口高度的 100%,确保它们填充整个浏览器窗口。

margin: 0;:移除 body 和 html 的外边距,这通常是为了避免浏览器默认的外边距导致的不必要的空白。

display: flex;:将 body 和 html 的显示属性设置为弹性盒子,这使得它们的子元素可以使用弹性盒子布局的对齐属性进行居中。

justify-content: center;:在弹性盒子的主轴上居中子元素,主轴默认为水平方向。

align-items: center;:在弹性盒子的交叉轴上居中子元素,交叉轴默认为垂直方向。

#centered-div { ... }:这是一个 ID 选择器,它选择了具有 ID centered-div 的元素。

width: 50vw;:将 centered-div 的宽度设置为视口宽度的 50%。vw 是视口宽度单位,1vw 等于视口宽度的 1%。

height: 50vh;:将 centered-div 的高度设置为视口高度的 50%。vh 是视口高度单位,1vh 等于视口高度的 1%。

background-color: #f00;:设置 centered-div 的背景颜色为红色。这通常是为了使元素在页面中可见,你可以根据需要更改这个颜色。

通过这种方法,centered-div 会占据视口宽度和高度的 50%,并且由于 body 和 html 的弹性盒子布局设置,它会被水平和垂直居中显示。

如果你不想使用display: flex来实现一个div元素在视图中上下居中,还有其他几种方法可以实现。下面是一些常见的方法:

  1. 使用position和transform

你可以将父元素设置为相对定位(position: relative),然后将子元素(你想要居中的div)设置为绝对定位(position: absolute),并使用transform属性来居中。

html

<div style="position: relative; height: 100vh;">

<div style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);">

<!-- 这里是你想要居中的内容 -->

</div>

</div>

  1. 使用margin自动

如果你的div有固定的宽度,你可以使用上下margin设置为auto来实现垂直居中。

html

<div style="height: 100vh; display: flex; align-items: center; justify-content: center;">

<div style="margin: auto; width: 100px; /* 其他样式 */">

<!-- 这里是你想要居中的内容 -->

</div>

</div>

注意:这里的外部div仍然使用了display: flex,但是它是为了同时实现水平和垂直居中。如果你只需要垂直居中,并且div有固定的高度,你可以去掉flex相关的样式。

  1. 使用表格布局

虽然这种方法比较古老,但你可以使用表格布局来实现垂直居中。

html

<div style="display: table; height: 100vh; width: 100%;">

<div style="display: table-cell; vertical-align: middle; text-align: center;">

<div style="display: inline-block;">

<!-- 这里是你想要居中的内容 -->

</div>

</div>

</div>

  1. 使用CSS Grid

CSS Grid布局也是一个强大的布局系统,可以用来实现垂直居中。

html

<div style="display: grid; place-items: center; height: 100vh;">

<!-- 这里是你想要居中的内容 -->

</div>

在这个例子中,place-items: center;同时实现了水平和垂直居中。

选择哪种方法取决于你的具体需求和兼容性考虑。例如,如果你需要支持较老的浏览器版本,可能需要避免使用transform或CSS Grid。每种方法都有其优缺点,因此选择最适合你项目需求的方法是很重要的。

要使一个 <div> 元素显示在上层,即确保它位于其他元素之上,你可以使用 CSS 的 z-index 属性。你已经为 <div> 元素设置了 z-index: 999,这通常是一个相对较高的值,应该足以使元素显示在上层。但是,要使 z-index 起作用,你还需要确保满足以下条件:

定位属性:z-index 仅对定位元素(即那些 position 属性设置为 relative、absolute、fixed 或 sticky 的元素)有效。因此,你需要确保 <div> 元素具有适当的定位属性。

父元素的定位:如果一个元素设置了 z-index,但其父元素没有设置定位(position),则 z-index 可能会不起作用。通常,确保父元素至少有一个定位的上下文(即父元素具有 position 属性设置为除 static 以外的值)是个好主意。

更高的 z-index 值:如果其他元素也设置了 z-index,并且它们的值比你的 <div> 元素更高,那么这些元素仍然会显示在你的 <div> 元素之上。确保你的 <div> 元素具有最高的 z-index 值。

堆叠上下文:在某些情况下,即使 z-index 值更高,元素也可能不会显示在上层,因为它们处于不同的堆叠上下文中。这通常与 CSS 属性如 transform、filter、opacity 等的使用有关。

基于你提供的代码,你的 <div> 元素已经设置了 z-index: 999 和 margin: 10px auto,但没有设置 position 属性。要使 z-index 起作用,你需要添加 position 属性。例如,你可以将 <div> 的样式更改为:

html

<div style="background: antiquewhite; text-align: center; margin: 10px auto; position: relative; z-index: 999">

<!-- 这里是 div 的内容 -->

</div>

在这里,我将 position 属性设置为 relative,这样 z-index 就会起作用。如果你的 <div> 需要相对于其父元素或其他元素定位,你可以使用 absolute 或 fixed,但这取决于你的具体布局需求。

JSP(JavaServer Pages)提供了9个内置对象,也被称为隐式对象。这些对象在JSP页面中可以直接使用,而无需声明或实例化。这些内置对象在JSP页面中的生命周期与页面相同。下面是JSP的9个内置对象及其常用方法:

  1. **request**:HttpServletRequest对象。用于获取客户端的请求信息。

* `getParameter(String name)`: 获取指定名称的请求参数值。

* `getParameterValues(String name)`: 获取指定名称的请求参数值数组。

* `getAttribute(String name)`: 获取指定名称的请求属性。

* `setAttribute(String name, Object value)`: 设置请求属性。

  1. **response**:HttpServletResponse对象。用于向客户端发送响应。

* `sendRedirect(String location)`: 重定向到指定的URL。

* `setContentType(String type)`: 设置响应的内容类型。

* `getWriter()`: 获取PrintWriter对象,用于向客户端发送字符数据。

  1. **pageContext**:PageContext对象。提供了一个对JSP页面中所有其他内置对象的访问,以及许多其他有用的方法。

* `getAttribute(String name, int scope)`: 按名称和范围获取属性。

* `setAttribute(String name, Object object, int scope)`: 按名称和范围设置属性。

* `removeAttribute(String name, int scope)`: 按名称和范围移除属性。

  1. **session**:HttpSession对象。用于在用户的多个请求之间保存信息。

* `getAttribute(String name)`: 获取指定名称的会话属性。

* `setAttribute(String name, Object value)`: 设置会话属性。

* `removeAttribute(String name)`: 移除会话属性。

  1. **application**:ServletContext对象。代表整个Web应用程序的上下文。

* `getAttribute(String name)`: 获取指定名称的应用程序属性。

* `setAttribute(String name, Object value)`: 设置应用程序属性。

* `removeAttribute(String name)`: 移除应用程序属性。

  1. **out**:JspWriter对象。用于向客户端发送字符数据。

* `print(Object obj)`: 打印对象。

* `println(Object obj)`: 打印对象并换行。

* `flush()`: 刷新输出。

  1. **config**:ServletConfig对象。用于获取Servlet的配置信息。

* `getInitParameter(String name)`: 获取指定名称的初始化参数。

* `getInitParameterNames()`: 获取所有初始化参数的名称。

  1. **page**:Object对象。代表当前JSP页面本身,等价于`this`关键字。

  2. **exception**:Throwable对象。用于处理JSP页面中产生的异常。

请注意,`exception`对象仅在声明了`isErrorPage="true"`的JSP页面中可用。

这些内置对象使得在JSP页面中处理HTTP请求和响应、访问会话和应用程序属性、以及处理异常等操作变得简单而方便。

`web.xml` 是 Java Web 应用程序的部署描述符文件,用于配置 Servlet、过滤器、监听器等组件以及定义 Web 应用的安全约束、欢迎页面等。下面是一个基本的 `web.xml` 配置示例,并解释了一些常见的配置项:

```xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee

http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"

version="4.0">

<!-- 指定欢迎页面 -->

<welcome-file-list>

<welcome-file>index.html</welcome-file>

<welcome-file>index.htm</welcome-file>

<welcome-file>index.jsp</welcome-file>

<welcome-file>default.html</welcome-file>

<welcome-file>default.htm</welcome-file>

<welcome-file>default.jsp</welcome-file>

</welcome-file-list>

<!-- 配置 Servlet -->

<servlet>

<servlet-name>MyServlet</servlet-name>

<servlet-class>com.example.MyServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>MyServlet</servlet-name>

<url-pattern>/myServletPath</url-pattern>

</servlet-mapping>

<!-- 配置过滤器 -->

<filter>

<filter-name>MyFilter</filter-name>

<filter-class>com.example.MyFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>MyFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<!-- 配置监听器 -->

<listener>

<listener-class>com.example.MyListener</listener-class>

</listener>

<!-- 配置上下文参数 -->

<context-param>

<param-name>myParam</param-name>

<param-value>myValue</param-value>

</context-param>

<!-- 其他配置 -->

</web-app>

```

配置说明:

  1. **命名空间与版本**:指定 `web-app` 的 XML 命名空间及版本。

  2. **欢迎页面**:`<welcome-file-list>` 元素定义了当 Web 应用被访问时显示的默认页面列表。

  3. **Servlet 配置**:

  • `<servlet>` 元素定义了 Servlet 的名称和类。

  • `<servlet-mapping>` 元素定义了 Servlet 的 URL 映射。

  1. **过滤器配置**:
  • `<filter>` 元素定义了过滤器的名称和类。

  • `<filter-mapping>` 元素定义了过滤器适用的 URL 模式。

  1. **监听器配置**:`<listener>` 元素定义了监听器类的名称。

  2. **上下文参数**:`<context-param>` 元素定义了 Web 应用的上下文参数,这些参数可以在应用的任何地方通过 `ServletContext` 对象访问。

请注意,以上是一个简化的 `web.xml` 配置示例,实际的配置可能会根据项目的需求而有所不同。在配置 `web.xml` 时,应确保所有的元素和属性都符合所选的 Java EE 版本的规范。

此外,随着现代 Java Web 开发框架(如 Spring Boot)的流行,许多传统的 `web.xml` 配置可以通过注解或框架的配置文件来完成,从而减少了直接使用 `web.xml` 的需求。

`console` 是 JavaScript 中用于访问浏览器控制台的一个全局对象。它不是一个方法,而是一个对象,它提供了多种用于与浏览器控制台交互的方法。以下是一些常用的 `console` 方法:

  1. `console.log()`: 用于在控制台输出信息。

  2. `console.info()`: 用于在控制台输出提示性信息。

  3. `console.error()`: 用于在控制台输出错误信息。

  4. `console.warn()`: 用于在控制台输出警示信息。

  5. `console.dir()`: 用于在控制台输出一个对象的所有属性和方法。

  6. `console.time()` 和 `console.timeEnd()`: 用于计算代码执行的时间。

  7. `console.assert()`: 用于测试一个表达式,并在表达式为假时输出信息。

  8. `console.table()`: 用于以表格的形式输出数据。

这些方法使得开发人员能够在浏览器控制台中查看和调试他们的代码,从而更容易地找到和修复问题。

例如,如果你想在控制台输出一条消息,你可以这样做:

```javascript

console.log("Hello, world!");

```

这将在控制台显示消息 "Hello, world!"。

如果你想输出一个对象的所有属性和方法,你可以这样做:

```javascript

let obj = {

name: "John",

age: 30,

city: "New York"

};

console.dir(obj);

```

这将在控制台显示 `obj` 对象的所有属性和方法。

在HTML中,`text-align: center` 属性是用来设置内联内容(比如文本或链接)在其块级容器(比如`<div>`, `<p>`, 或 `<h1>` 等)内部水平居中的。然而,在您提供的代码中,`text-align: center` 被应用在了 `<span>` 元素上,而 `<span>` 是一个内联元素。这意味着 `text-align` 属性实际上不会生效,因为 `text-align` 是用来对齐块级容器内的内联内容的,而不是直接用来对齐内联元素本身。

为了让文本居中,您应该将 `text-align: center` 应用在包含文本的块级元素上,通常是 `<h1>` 本身。以下是正确的代码示例:

```html

<h1 style="text-align: center;">设备管理</h1>

```

在这个例子中,`<h1>` 是块级元素,而 `text-align: center;` 被直接应用在了 `<h1>` 上。因此,"设备管理"这段文本会在 `<h1>` 标签内水平居中。您不需要使用 `<span>` 标签来包裹文本,除非您有特殊的样式或布局需求。

如果您确实需要使用 `<span>` 来应用某些样式(尽管在这个情况下不是必需的),您应该确保 `text-align: center` 是应用在一个包含 `<span>` 的块级元素上,如下所示:

```html

<h1 style="text-align: center;">

<span>设备管理</span>

</h1>

```

在这个例子中,尽管 `text-align: center` 是应用在 `<h1>` 上的,但 `<span>` 作为内联元素会继承这个对齐方式,从而使得其中的文本居中。不过,直接对 `<h1>` 应用样式通常更为简洁和直接。

在JavaScript中,`let` 和 `var` 都是用来声明变量的关键字,但它们之间有几个重要的区别。

使用 `var` 声明变量

当你使用 `var` 声明一个变量时,这个变量会被添加到当前的执行上下文(通常是函数或全局作用域)中。此外,使用 `var` 声明的变量会有变量提升(hoisting)的行为,这意味着变量可以在声明之前就被访问,但其值会是 `undefined`。

示例:

```javascript

function exampleVar() {

console.log(m); // 输出:undefined

var m = 0;

console.log(m); // 输出:0

}

exampleVar();

```

在这个例子中,尽管 `var m = 0;` 在 `console.log(m);` 之后,但 `m` 已经被提升到了函数作用域的顶部,因此第一个 `console.log` 输出 `undefined` 而不是报错。

使用 `let` 声明变量

`let` 是ES6(ECMAScript 2015)中引入的新关键字,用于声明块级作用域的局部变量。与 `var` 不同,`let` 声明的变量不会被提升,并且它们只在声明它们的块或作用域内可见。如果在声明之前访问 `let` 变量,将会抛出一个 `ReferenceError`。

示例:

```javascript

function exampleLet() {

console.log(m); // 抛出 ReferenceError: m is not defined

let m = 0;

console.log(m); // 如果不抛出错误,这里会输出:0

}

exampleLet();

```

在这个例子中,尝试在 `let m = 0;` 之前访问 `m` 会导致一个错误,因为 `let` 不会像 `var` 那样提升变量。

总结

`var` 和 `let` 的主要区别包括:

  • 作用域:`var` 有函数作用域或全局作用域,而 `let` 有块级作用域。

  • 提升:`var` 声明的变量会被提升,而 `let` 声明的变量不会被提升。

  • 重复声明:在相同的作用域内,使用 `var` 可以多次声明同一个变量(虽然这样通常是不好的做法),但使用 `let` 重复声明同一个变量会抛出错误。

由于这些差异,现代JavaScript开发中通常推荐使用 `let` 和 `const`(用于声明常量)来替代 `var`,以避免由于变量提升和全局命名空间污染等问题引起的错误和混淆。

相关推荐
小码狐1 小时前
并查集【数据结构与算法】【C语言版-笔记】
数据结构·笔记·并查集·c语言版
大前端爱好者1 小时前
React 19 新特性详解
前端
随云6321 小时前
WebGL编程指南之着色器语言GLSL ES(入门GLSL ES这篇就够了)
前端·webgl
寻找09之夏2 小时前
【Vue3实战】:用导航守卫拦截未保存的编辑,提升用户体验
前端·vue.js
LearnTech_1233 小时前
【学习笔记】手写一个简单的 Spring MVC
笔记·学习·spring·spring mvc
多多米10053 小时前
初学Vue(2)
前端·javascript·vue.js
柏箱3 小时前
PHP基本语法总结
开发语言·前端·html·php
新缸中之脑3 小时前
Llama 3.2 安卓手机安装教程
前端·人工智能·算法
hmz8563 小时前
最新网课搜题答案查询小程序源码/题库多接口微信小程序源码+自带流量主
前端·微信小程序·小程序
看到请催我学习3 小时前
内存缓存和硬盘缓存
开发语言·前端·javascript·vue.js·缓存·ecmascript