SpringBoot 基础

1 Spring Boot 整合连接池

1.1 概述

实际开发中应用程序与数据库交互时,“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采用连接池技术来重用连接Connection对象。
在这里插入图片描述

Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。然后我们的应用程序中耦合与这个接口,便可以方便的切换不同厂商的连接池,常见的连接池有DBCP、C3P0,DRUID,HikariCP等。
通过连接池获取连接的一个基本过程
在这里插入图片描述

用户通过DataSource对象的getConnection()方法,获取一个连接。假如池中有连接,则直接将连接返回给用户。假如池中没有连接,则会调用Dirver(驱动,由数据库厂商进行实现)对象的connect方法从数据库获取,拿到连接以后,可以将连接在池中放一份,然后将连接返回给调用方。

1.2 数据初始化

打开mysql控制台,然后按如下步骤执行goods.sql文件:
第一步:登录mysql

mysql –uroot –proot

第二步:设置控制台编码(MySql客户端)方式

set names utf8;

第三步:执行goods.sql文件

source f:/java/goods.sql

备注:当mysql连接数据库失败时,检测服务是否启动,可尝试先启动服务(windows中需要以管理员打开控制台,然后在控制台执行net start mysql启动服务即可)

1.3 整合HikariCP连接池

HiKariCP号称是目前世界上最快的连接池,有江湖一哥的称号,目前在
springboot工程默认推荐使用HiKariCP连接池,现在我们创建一个新的项目,项目名为SBOOT-03,在此工程中整合HiKariCP,其步骤如下:

第一步:添加依赖。
编辑项目中pom.xml,右键项目的pom.xml文件,选择spring
在这里插入图片描述

查找mysql 驱动依赖,JDBC API依赖(ps网不好可能连接失败)

依赖添加以后,在pom.xml文件中会自动添加如下两个依赖配置:

mysql数据库驱动依赖。

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency>

spring对象jdbc支持(此时会默认帮我们下载HiKariCP连接池)。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

第二步:配置连接池
打开application.properties配置文件,添加如下内容。

spring.datasource.url=jdbc:mysql:///dbgoods?serverTimezone=GMT%2B8&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root

第三步:单元测试(测试包中编写)

@SpringBootTest
public class DataSourceTests {@Autowiredprivate DataSource dataSource;@Testpublic void testConnection() throws Exception{System.out.println(dataSource.getConnection());}}

第四步:原理分析
在这里插入图片描述

演示了我们在测试类DataSourceTests中基于DataSource获取连接的一个基本过程。对于图中的连接建立过程,可以在Driver接口的实现中的connect方法上添加断点,然后进行断点测试,如下图显示了API方法的调用执行过程(按箭头方向开代码),这个了解了解即可。

当我们需要了解,基于HikariCP连接池获取数据库连接,并将获取到的连接放入到连
接池中的过程进行了解,可以参考图-7中的断点设计进行查看即可(不做具体要求)。
在这里插入图片描述

设置的断点序号位置进行单元测试时,可以每次按F8进行断点跟踪,了解HiKariCP连接池获取连接存储连接的过程,其中API不理解的可以在搜索引擎中进行查阅分析。

2 Spring Boot 整合MyBatis框架

2.1 概述

Mybatis是一个优秀的持久层框架,底层基于JDBC实现与数据库的交互。并在JDBC操作的基础上做了封装和优化,它借助灵活的SQL定制,参数及结果集的映射方式,更好的适应了当前互联网技术的发展。Mybatis框架的简单应用架构

在这里插入图片描述

在当今的互联网应用中项目,mybatis框架通常会由spring框架进行资源整合,作为数据层技术实现数据交互操作。

2.2 初始配置

2.2.1 添加mybatis启动依赖

参考官网mybatis.org/spring,找到springboot菜单选项.基于菜单项找到MyBatis启动依赖。

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.1</version>
</dependency>

注意:在添加此依赖时,一定指定其版本(version),因为在springboot默认配置中没有设置mybatis框架版本。

2.2.2 Mybatis简易配置

我们添加了mybatis依赖以后,spring框架启动时会对mybatis进行自动配置。例如SqlSessionFactory工厂对象的创建。假如需要对mybatis框架进行简易配置,可以打开application.properties文件,在此文件中进行基本配置(可选,暂时可以不配置),例如:

mybatis.configuration.default-statement-timeout=30
mybatis.configuration.map-underscore-to-camel-case=true

配置mybatis中的sql日志的输出:(com.cy为我们写的项目的根包)

logging.level.com.cy=debug

2.3 业务分析及实现

2.3.1 基本业务实现及单元测试

基于Spring对MyBatis框架的整合,实现对商品库中数据的删除操作。
第一步:业务API架构设计
在这里插入图片描述

第二步:基于id执行商品信息删除,其业务时序
在这里插入图片描述

第三步:定义商品业务数据层接口及业务方法。

package com.cy.pj.goods.dao;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
@Mapper 
public interface GoodsDao {@Delete("delete from tb_goods where id=#{id}")int deleteById(Integer id);
}

其中:@Mapper是由MyBatis框架中定义的一个描述数据层接口的的注解(所有的注解只起到一个描述性的作用),用于告诉Spring框架此接口的实现由mybatis创建,并将其实现类对象存储到spring容器.
第四步:定义测试类,对GoodsDao对象进行应用测试

@SpringBootTest
public class GoodsDaoTests {    @Autowiredprivate GoodsDao goodsDao;@Testpublic void testDeleteById() {int rows=goodsDao.deleteById(10);System.out.println("rows="+rows);}}

第五步:删除业务时序图增强分析(了解SqlSession应用):

第六步:MyBatis API 对象应用过程分析
在这里插入图片描述

展示业务设计中API对象的一种调用关系。例如我们的数据访问对象调用MyBatis API,然后MyBatis API底层通过使用用JDBC API(两大部分:java.sql,javax.sql)访问数据库。

2.3.2 业务进阶分析及实现

在MyBatis框架中定义SQL映射的方式有两种:一种是将SQL映射定义在我们的xml映射文件中,一种方式是借助注解将其声明在接口方法上。我们在实际项目中对于简单的SQL映射可以直接以注解方式进行声明即可,复杂SQL还是要写到xml中,充分利用动态SQL进行设计会更好一些。

本小节,基于XML方式定义GoodsDao接口中的方法映射,并进行单元测试:
Step01:在GoodsDao中,定义删除方法,具体代码如下:

int deleteObjects(@Param("ids")Integer... ids);

说明:当接口方法对应的映射语句相对比较复杂时,建议将映射语句写到对应映射文件。
Step02:在src/main/resources目录下创建mapper/goods目录,然后在其目录中添加GoodsMapper.xml映射文件(文件名可自己指定),并添加如下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cy.pj.goods.dao.GoodsDao"><delete id="deleteObjects">delete from tb_goodswhere id in <!-- (1,2,3,4,5) --><foreach collection="ids"open="("close=")"separator=","item="id">#{id}</foreach></delete>
</mapper>

Step03:在application.properties文件中添加如下配置:

mybatis.mapper-locations=classpath:/mapper/*/*.xml

Step04:在GoodsDaoTests类中添加如下单元测试方法进行单元测试:

@Test
public void testDeleteObjects() {int rows=goodsDao.deleteObjects(17,18);System.out.println(rows);
}
   思考:对于本小节映射文件中deleteObjects元素的定义,是否还有更好的方式。例如增强其健壮性(可靠性-无论传什么数据,都可以保证sql的语法的正确),性能。

2.4 构建业务层接口及实现类

参考图-13的设计,进行代码实现,具体业务自己设计(例如查询)。

我们的测试类GoodsServiceTest,通过耦合与GoodsService接口实现具体商品业务处理。而在GoodsService接口的实现GoodsServiceImpl中通过耦合GoodsDao接口完成具体的数据逻辑处理。

课堂练习:基于上图的设计,实现商品信息的查询,并将查询到的数据在测试类中进行输出。具体步骤如下:
第一步:定义pojo对象(Goods)用于存储从数据库查询到的商品信息.
第二步:定义dao方法方法,用于查询数据库数据。
第三步:定义业务层接口以及实现类,然后在类中添加商品查询的业务方法。
第四步:定义单元测试类,对业务层方法进行单元测试

代码实现:
第一步:Goods对象定义

package com.cy.pj.goods.pojo;
import java.text.SimpleDateFormat;
import java.util.Date;
/*** pojo对象,基于此对象封装从数据库查询到的数据* 思考:对象靠什么存储数据?属性*/
public class Goods {private Long id;//id bigint primary key auto_incrementprivate String name;//name varchar(100) not nullprivate String remark;//remark textprivate Date createdTime;//createdTime datetimepublic Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getRemark() {return remark;}public void setRemark(String remark) {this.remark = remark;}public Date getCreatedTime() {return createdTime;}public void setCreatedTime(Date createdTime) {this.createdTime = createdTime;}@Overridepublic String toString() {return "Goods [id=" + id + ", name=" + name + ", remark=" + remark + ", createdTime=" + createdTime + "]";}
}

第二步:GoodsDao中添加查询方法(一行记录映射为一个Goods对象)

@Select("select id,name,remark,createdTime from tb_goods")
List<Goods> findObjects();

第三步:添加GoodsService接口和实现类

package com.cy.pj.goods.service;
import java.util.List;
import com.cy.pj.goods.pojo.Goods;
public interface GoodsService {List<Goods> findGoods();
}
package com.cy.pj.goods.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.cy.pj.goods.dao.GoodsDao;
import com.cy.pj.goods.pojo.Goods;
import com.cy.pj.goods.service.GoodsService;
/*** 商品业务层对象,负责业务逻辑处理。* @author qilei*/
@Service
public class GoodsServiceImpl implements GoodsService {	//has a@Autowiredprivate GoodsDao goodsDao;@Overridepublic List<Goods> findGoods() {long start=System.currentTimeMillis();List<Goods> list=goodsDao.findObjects();long end=System.currentTimeMillis();System.out.println("query time:"+(end-start));return list;}
}

第四步:添加单元测试类

package com.cy.pj.goods.service;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import com.cy.pj.goods.pojo.Goods;
@SpringBootTest
public class GoodsServiceTests {@Autowiredprivate GoodsService goodsService;@Testpublic void testFindGoods() {List<Goods> list=goodsService.findGoods();list=goodsService.findGoods();//System.out.println(list);//toString()for(Goods g:list) {System.out.println(g);//toString()}}
}

3 Spring Boot整合SpringMVC应用

3.1 概述

MVC(Model–view–controller)是软件工程中的一种软件架构模式,基于此模式把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。目的是通过这样的设计使程序结构更加简洁、直观,降低问题的复杂度。其中各个组成部分的职责为:

  • 视图(View) - UI设计人员进行图形界面设计,负责实现与用户交互。
  • 控制器(Controller)- 负责获取请求,处理请求,响应结果。
  • 模型(Model) - 实现业务逻辑,数据逻辑实现。

我们在软件设计时,通常要遵循一定的设计原则。MVC架构模式的设计中,首先基于单一职责原则(SRP-Single responsibility principle)让每个对象各司其职,各尽所能。然后再基于“高内聚,低耦合”的设计思想实现相关层对象之间的交互。这样可以更好提高程序的可维护性和可扩展性。
JavaEE技术体系中,MVC设计思想的实现
在这里插入图片描述

Servlet充当MVC中的Controller,负责调用model处理业务,负责转发或重定向某个页面,在页面(view)上呈现数据。
模块封装了对Servlet的技术的应用,简化了程序员对请求和响应过程中数据的处理。Spring MVC 是Spring 框架中基于MVC设计思想实现的一个用于处理Web请求的模块。其简易架构分析
在这里插入图片描述

核心组件分析:

  • DispatcherServlet :前端控制器, 处理请求的入口。
  • HandlerMapping:映射器对象, 用于管理url与对应controller的映射关系。
  • Interceptors:拦截器,实现请求响应的共性处理。
  • Controller:后端控制器-handler, 负责处理请求的控制逻辑。
  • ViewResolver:视图解析器,解析对应的视图关系(前缀+viewname+后缀)。

备注:假如希望了解Spring MVC的详细处理流程可以基于断点调试法进行跟踪。

3.2 初始配置

3.2.1 添加Spring MVC依赖

编辑pom.xml文件,添加web依赖,Thymeleaf依赖,代码如下:
Web依赖(提供了Spring MVC核心API,同时会嵌入一个Tomcat服务器)

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

Thymeleaf依赖(提供了一个视图解析器对象以及数据绑定机制)

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

其中: Spring Web Starter 提供Spring MVC 依赖支持,并会自动添加一个tomcat依赖,作为嵌入式web服务器使用.thymeleaf是一个html模板引擎,提供了与Spring MVC进行整合的API,可作为MVC架构中Web应用的View层。

3.2.2 配置Spring MVC 核心对象

在application.properties文件中添加视图解析器配置(假如没有配置也会默认配置,在默认配置中prefix默认值为classpath:/templates/,后缀默认为.html)。

spring.thymeleaf.prefix=classpath:/templates/pages/
spring.thymeleaf.suffix=.html

说明:要基于配置在src/main/resources目录下创建templates/pages目录

3.3 Spring MVC 进行入门实践

第一步:编写GoodsController类并将其交给spring管理。这样的Controller在SpringMVC 规范中通常称之为Handler(处理器),我们在企业中有时也会将此对象理解为一个后端控制器。

package com.cy.pj.goods.controller;
@Controller@RequestMapping("/goods/")
public class GoodsController {@RequestMapping("doGoodsUI")
public String doGoodsUI() {return "goods";
}
}

第二步:需要在/templates/pages/目录下创建goods.html
第三步:启动服务器(默认项目嵌入的是tomcat),打开浏览器进行访问测试。
http://localhost:8080/goods/doGoodsUI

课堂练习:
练习一: 将数据库中的商品数据查询出来更新到页面上。
练习二:基于ID删商品库中的商品信息。
练习三:将页面用户输入的商品信息写入到数据库。

练习总结:
API应用设计在这里插入图片描述

查询时序分析
在这里插入图片描述

删除时序分析
在这里插入图片描述

添加时序分析
在这里插入图片描述

4 SpringBoot小节总结

4.1 重难点分析

  • 掌握基于Spring boot 实现HikariCP连接池整合与测试应用的过程
  • 掌握基于Spring boot 实现MyBatis框架资源的整合与测试。
  • 掌握基于Spring boot 实现Spring MVC资源的整合与测试。
  • 掌握Mybatis框架中的核心API以及应用关系
  • 掌握Spring MVC 中的核心API对象以及这些对象之间的调用关系。
  • 了解基于连接池获取数据库连接的基本过程。
  • 了解HiKariCP连接池常用API以及设计原理。
  • 了解thymeleaf模板引擎的基本应用过程(基于官方文档可以查询使用)。

4.2 FAQ分析

  • Java中连接池对象的标准API是什么?(DataSource)
  • Java中基于DataSource接口定义的连接池有哪些?(DBCP,C3P0,DRUID,HiKariCP,…)
  • Java中标准JDBC API中哪个对象负责与数据库建立连接?(Driver)
  • Java 中连接池中的连接也是通过Driver对象获取的吗?
  • SpringBoot 内置的连接池配置是什么?(HiKariCP)
  • SpringBoot 连接数据库的配置没有问题,数据库连不上?(服务,驱动)
  • SpringBoot 整合MyBatis时,为什么需要添加mybatis版本?
  • @Mapper注解的作用什么?(描述数据层接口,是由mybatis框架定义的规范)
  • @Mapper 描述数据层接口时,底层会为接口做点什么?(创建实现类,创建实现类对象,并将对象存储到spring容器-bean池。)
  • 框架底层基于@Mapper描述的接口创建实现类对象,其内部做什么?
  • SpringBoot 整合mybatis时候是否可以同时存在注解和xml的映射?
  • SpringBoot 整合mybatis时如何实现SQL日志的输出?
  • Spring MVC 核心组件对象有哪些?(DispatcherServlet,HandlerMapping,…)
  • Spring MVC 核心组件中DispatcherServlet的作用什么?
  • Spring MVC 应用中请求参数的映射过程?(直接量,pojo对象)
  • Spring MVC 应用的请求转发和重定向?(服务端跳转-转发,客户端跳转-重定向)
  • Thymeleaf 是什么,应用场景,官网的地址?(thymeleaf.org)
  • Thymeleaf 模板引擎中的标签属性如何使用?(查询官方docs文档)
  • STS 工具常用快捷键(al+/,ctrl+shift+t,ctrl+t,ctrl+o,…)
  • 断点操作时f5不能进入方法内部(https://blog.csdn.net/fly_sky333/article/details/79516566)

4.3 BUG分析

  • 数据库版本及url配置问题
    在这里插入图片描述

    问题分析:在url中追加时区配置(serverTimezone=GMT%2B8)

  • 数据库服务连接不上
    在这里插入图片描述

问题分析:检查数据库服务是否启动,连接数据库的用户名,密码是否正确.

  • 数据库版本或url配置问题
    在这里插入图片描述

问题分析:检查数据的服务是否已启动,连接数据的url配置是否正确,数据库版本与驱动是否匹配.

  • 访问的数据库不存在
    在这里插入图片描述

问题分析:检查url配置的数据库是否存在.

  • 指定命名空间下的元素ID已经存在。
Caused by: java.lang.IllegalArgumentException: 
Mapped Statements collection already contains value for 
com.cy.pj.goods.dao.GoodsDao.deleteObject. please check file 
[D:\WORKSPSTS\CGB-SBOOT-01\target\classes\mapper\ GoodsMapper.xml]and com/cy/pj/goods/dao/GoodsDao.java (best guess)

问题分析:可能是GoodsDao接口或映射文件对应的映射元素有重复。

  • MyBatis 绑定异常
    在这里插入图片描述

问题分析:
检查接口类全名与映射文件中的命名空间是否不一致。
检查接口方法名与映射文件中的元素是否不一致。
查接口方法参数与映射文件可接收的参数不匹配。
检查接口对应的映射文件路径是否配置不正确(mapper-locations)。

  • MyBatis 参数绑定异常
    在这里插入图片描述

问题分析:检查调用的dao方法参数与对应的SQL参数是否有映射关系.(SQL中的使
用的ids参数可能没有使用@Param注解进行描述)
运行时的SQL语法问题
在这里插入图片描述

问题分析:

  1. 认真分析操作中提示的SQL语法问题,以及出现的大概位置。
  2. 检测业务执行时传入的参数数据是否正常。
    无限递归调用导致的栈内存溢出

在这里插入图片描述

问题分析:基于错误检查自己写的类,哪里出现了循环递归调用。

  • JVM端口号被占用
    在这里插入图片描述

其解决方案为:

  1. 关闭已启动的tomcat,重新启动。
  2. 杀进程(windows)

查找进程id:netstat -ano|findstr “8080”
基于进程id杀进程:taskkill /f /pid 进程id

URL响应资源不存在
在这里插入图片描述

问题分析:检查tomcat启动是否OK,检查url对应的服务端资源是否匹配(客户端
url与controller定义url),检查controller的包结构(所在包应在主启动类所在包的同包或子包中)。
视图解析失败
在这里插入图片描述

问题分析:检查视图解析器的配置是否有问题。

404问题(请求资源没找)
在这里插入图片描述

问题分析:
1)检查tomcat启动是否OK.
2)检查url对应的服务端资源是否存在
3)检查访问的controller对象是否交给了spring管理。(例如是否有@Controller描述,包结构是否正确)

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 阿里云云计算学习笔记 打造自己的Web IDE - day03

    阿里云弹性计算学习笔记 1. Docker概念 : Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱…...

    2024/5/4 15:15:27
  2. Buu_re_findit

    Buu_re_findit考点:代码审计,脚本编写工具:AndroidKiller1、导入程序定位到主函数源码:.class public Lcom/example/findit/MainActivity;.super Landroid/support/v7/app/ActionBarActivity;.source "MainActivity.java"# direct methods.method public constru…...

    2024/4/29 3:29:58
  3. while循环的使用

    一.循环结构的4个要素 1.初始化条件 2.循环条件 ---->boolean类型 3.循环体 4.迭代条件 二.while循环的结构 ① while(②){ ③; ④; } 执行过程:① --> ② --> ③ --> ④ --> ② --> ③ --> ④… --> ② 说明: 1.写while循环千万小心不要丢了迭…...

    2024/4/29 3:29:54
  4. Android Hilt

    参考文档 https://developer.android.com/training/dependency-injection/hilt-android https://medium.com/androiddevelopers/dependency-injection-on-android-with-hilt-67b6031e62d https://www.zhihu.com/question/32108444依赖注入 依赖是一个听起来有点唬人的概念. 其实…...

    2024/5/2 8:33:31
  5. WPS加载endnote

    WPS加载endnote 先下载好的endnote ,然后打开WPS,新建一个word文档,在文件里找到选项,打开信任中心,在用户位置路径里点击添加新位置,添加endnote的安装路径。 图片: 找到安装位置的文件夹,点击确定。最后点击下面的“同时信任此位置的文件夹”,确定 在确定后,点击启用…...

    2024/4/28 10:32:46
  6. list同时删除列表多个索引位置的元素

    list同时删除列表多个索引位置的元素 list = [list[i] for i in range(0, len(list), 1) if i not in index_to_delete] # 删除后的列表...

    2024/5/2 21:59:20
  7. 写给初学者的Maven教程——02Maven常用命令

    写给初学者的Maven教程——02Maven常用命令...

    2024/4/29 3:29:43
  8. 高级I/O

    高级I/O 非阻塞I/O,记录锁,I/O多路转接【select,poll】,异步I/O,readv,writev,存储映射I/O。非阻塞I/O 非阻塞I/O使我们可发出open,read,write这样的I/O操作,使这些操作不会永远阻塞。 对一个给定的描述符,有两种为其指定非阻塞I/O的方法 - 如调open获得描述符,则可指…...

    2024/4/29 3:29:38
  9. 生命周期和作用域

    8.生命周期和作用域是至关重要的,应为一旦错误的使用会导致非常严重的并发问题 SqlSessionFactoryBuilder: SqlSessionFactoryBuilder:一旦创建了 SqlSessionFactory,就不在需要它了 局部变量 SqlSessionFactory: 可以想象成:数据库连接池 SqlSessionFactory一旦被创建就…...

    2024/4/29 3:29:35
  10. 配置缓存时报错: Connection refused: no further information

    项目配置缓存时出错, 错误信息如下 Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to …...

    2024/4/29 3:29:29
  11. 因为Redis这个漏洞,我可怜的服务器被挖矿病毒偷袭了

    原文作者:「烟雨星空」原文地址:https://www.cnblogs.com/starry-skys/p/13332666.html前言服务器好端端的竟然中了挖矿病毒!!!可怜我那 1 核 2 G 的服务器,又弱又小,却还免除不了被拉去当矿工的命运,实在是惨啊惨。事情原来是这样的。。。就在今天下午,我准备登陆自己…...

    2024/5/2 13:28:33
  12. HDFS客户端操作

    HDFS客户端操作 1.HDFS客户端环境准备: 1)找到资料目录下的Windows依赖目录,打开: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oD0Mj4y7-1596801617537)(C:\Users\xiao\AppData\Roaming\Typora\typora-user-images\1596798142155.png)] 2) 配置…...

    2024/4/29 3:29:21
  13. 概念-shell 脚本编程

    shell 脚本编程:基于过程式、解释执行的语言 shell 脚本:包含一些命令或声明,并符合一定格式的文本文件 格式要求:首行shebang机制 #!/bin/bashshell 脚本创建过程 1 使用文本编辑器来创建文本文件,第一行必须包括shell 声明序列:#! 2 给予执行权限,在命令行上指定脚本的…...

    2024/4/29 3:29:19
  14. LeetCode最大子序和(Python)——动态规划

    题目解题思路 时间复杂度为O(N2)的暴力解法就不说了,那首当其冲肯定是动态规划了,先上代码:首先,怎么判断一道题能不能用动态规划做? 第一,看大问题能不能拆成几个小问题,并且大问题的最优解可以由小问题的最优解推出。在这道题里,比如现在要求前三项[ -2 , 1 , -3 ]的…...

    2024/4/29 3:29:14
  15. SpringBoot使用Mybatis-Plus自动填充功能报错

    用Mybatis-Plus的自动填充功能还是挺方便的,但是createTime这项一直报错,开始我以为是数据库时区的问题,一波操作过后没有任何用处,后来查了下,有前人说是数据库和实体类命名的问题,把名字改掉,不要用createTime这种,我用的是 createTimes....

    2024/4/29 3:29:10
  16. 二:mybatis的入门

    - mybatis的环境搭建 第一步:创建maven工程并导入坐标 第二步:创建实体类和dao的接口 第三步:创建mybatis的主配置文件SqlMapConfig.xml 第四步:创建映射配置文件IUserDao.xml - 环境搭建的注意事项 第一个:创建IUserDao.xml 和 IUserDao.java时名称是为了和我们之前的知识…...

    2024/4/29 3:29:06
  17. 关于double型的精度问题解决办法(如0.14*100!=14,0.29*100!=29等等)

    简单来说只要使用IEEE_754标准来存储浮点数的语言都存在这种问题,出现的原因就是小数在转换成二进制的过程中由于位数的限制不能完全表示这个小数导致精度丢失。double型的0.29*100=28.9999999...;或是0.14*100=14.0000...000001可以用round()四舍五入用法如double a=0.14; …...

    2024/4/29 3:29:02
  18. 大三小学期进阶课程第四十五课:

    第45课、车辆与循迹能力实战在搭建完自动驾驶车辆的软、硬件环境以后,通常采用循迹测试进行验证循迹测试涉及最底下的几个模块,只需要定位、控制以及Canbus这三个模块,是Apollo的最小子集,通过循迹可以验证车的线控能力以及模块的整体集成能力。首先在硬件上,我们需要一辆…...

    2024/4/29 3:29:00
  19. numpy&pandas 学习笔记2-pandas

    numpy 与 pandas的区别 numpy:数值型,无索引,重点在于进行矩阵运算 pandas:多数据类型,有索引,重点在于进行数据分析 一、pandas 的基本用法 s = pd.Series([1,3,6,np.nan,44,1]) print(s)dates = pd.date_range(20200807,periods=6) print(dates)#自己设定行列的索引名称…...

    2024/4/29 3:28:54
  20. 如何科学的修改Centos用户名

    如何科学的修改Centos的用户名 答: 修改用户usermod修改用户名方法(1)以root登录(2)$ usermod -l 新用户名 旧用户名 该命令相当于执行了以下命令:(1)将/etc/passwd下的用户名栏从就用户名修改为hadoop,其他部分不变(2)将/etc/shadow下的用户名栏从seed修改为hadoop,其…...

    2024/4/29 3:28:50

最新文章

  1. USP技术提升大语言模型的零样本学习能力

    大语言模型&#xff08;LLMs&#xff09;在零样本和少样本学习能力上取得了显著进展&#xff0c;这通常通过上下文学习&#xff08;in-context learning, ICL&#xff09;和提示&#xff08;prompting&#xff09;来实现。然而&#xff0c;零样本性能通常较弱&#xff0c;因为缺…...

    2024/5/5 0:14:54
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. JRT高效率开发

    得益于前期的基础投入&#xff0c;借助代码生成的加持&#xff0c;本来计划用一周实现质控物维护界面&#xff0c;实际用来四小时左右完成质控物维护主体&#xff0c;效率大大超过预期。 JRT从设计之初就是为了证明Spring打包模式不适合软件服务模式&#xff0c;觉得Spring打包…...

    2024/5/4 16:36:42
  4. 【干货】零售商的商品规划策略

    商品规划&#xff0c;无疑是零售业的生命之源&#xff0c;是推动业务腾飞的强大引擎。一个精心策划的商品规划策略&#xff0c;不仅能帮助零售商在激烈的市场竞争中稳固立足&#xff0c;更能精准捕捉客户需求&#xff0c;实现利润最大化。以下&#xff0c;我们将深入探讨零售商…...

    2024/5/1 13:01:46
  5. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/4 12:05:22
  6. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/4 11:23:32
  7. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/5/4 14:46:16
  8. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/5/4 23:54:44
  9. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/5/4 12:10:13
  10. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/4 23:54:49
  11. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/5/4 23:54:44
  12. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/4 14:46:12
  13. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/5/4 14:46:11
  14. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/4 14:46:11
  15. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/4 2:14:16
  16. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/4 21:24:42
  17. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/4 12:39:12
  18. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/5/4 13:16:06
  19. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/5/4 16:48:41
  20. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/5/4 14:46:05
  21. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/5/4 2:00:16
  22. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/5/4 23:54:30
  23. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/5/4 9:07:39
  24. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/4 14:46:02
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57