项目日记:学成在线(第二天P24~p34)

news/2024/4/28 1:21:05/文章来源:https://blog.csdn.net/m0_50538723/article/details/129681643

1、注入的两种方式:@Autowired、@Resource(基于类型和名称)

相同:
@Resource和@Autowired都是做bean的注入时使用
不同:
①@Autowird 属于spring框架,默认使用类型(byType)进行注入:(基于类型)

@Autowired   
private Human human;

系统会根据接口进行注入,如果这个接口只有一个实现类,那么会正常注入,如果没有实现类,它就会报错,我们可以做如下处理:required = false,如果找不到对应的bean时候,不会抛出错误; 如果required = true,当不存在bean时候,就会抛出异常。
@Resource是JavaEE自带的注解, 默认按byName自动注入。(基于名称)
②@Autowired 有三种注入方式:属性注入、构造方法注入、Setter 注入;而 @Resource 只支持属性注入和 Setter 注入;

2、service注入dao层,controller注入service?

service注入mapper,controller注入service;
问题:注入@Autowired的是Service接口而不是其ServiceImpl实现类,在学习Java基础时接口不可以被实例化,那为什么在这里可以了呢?
表面上是注入接口,但是实际上注入的是接口的实现类对象(注入的是实现类对象,接收的是接口;理解为多态);
另一个方面因为@Autowired自动写入注解的对象是接口的话,Spring默认会使用JDK动态代理,JDK动态代理只能对实现接口的类生成代理,而不能针对类来进行动态代理。

3、httpclient中的content-type作用

Content-Type,内容类型,用于定义网络文件的类型和网页的编码,决定文件接收方将以什么形式、什么编码读取这个文件
常见的取值:
1、application/x-www-form-urlencoded:(默认值,又名url编码方式),是使用&拼接传递的key(参数名)=value(参数值)
2、multipart/form-data:(又名多部分表单格式),一个常见的 POST 数据提交的方式,用于向服务器发送大量的数据,常用语图片上传和文件上传,它既可以发送文本数据,也支持二进制数据上传。
3、application/json(json格式):作为响应头比较常见。实际上,现在越来越多的人把它作为请求头,用来告诉服务端:消息主体是序列化后的 JSON 字符串

4、http和https区别

1、HTTPS 协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。
2、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。(SSL协议——Secure Sockets Layer是安全套接层协议,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。)
3、HTTP 和 HTTPS 使用的端口不一样,前者是80,后者是443。
4、HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)

5、nginx和浏览器为啥同源?

通过查资料,发现在配置nginx时,会将server_name配置成localhost,感觉应该是这个原因。
server_name用于设置虚拟主机服务名称, 为虚拟服务器的识别路径
每个server定义一个server_name,每个server_name可以指定一个或多个域名:

server {listen 80;server_name www.baidu.com www.localhost;
}

在这里插入图片描述
在这里插入图片描述

6、面试:Mybatis分页插件的原理?

首先分页参数放到ThreadLocal中,拦截执行的sql,根据数据库类型添加对应的分页语句重写sql
【补充】ThreadLocal
ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程
一个ThreadLocal在一个线程中是共享的,在不同线程之间又是隔离的

7、Serializable接口作用

Serializable接口的作用是实现序列化
序列化:对象的寿命通常随着生成该对象的程序的终止而终止,有时候需要把在内存中的各种对象的状态(也就是实例变量,不是方法)保存下来,并且可以在需要时再将对象恢复。虽然你可以用你自己的各种各样的方法来保存对象的状态,但是Java给你提供一种应该比你自己的好的保存对象状态的机制,那就是序列化

8、sql中union all作用

union all用于合并两个或多个select的结果集
【补充】union all的使用注意事项:
①内部的SELECT语句必须拥有相同数量的列,列也必须拥有相似的数据类型
②每条 SELECT 语句中列的顺序必须相同
【补充】union all和union的区别
①Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
②Union All:对两个结果集进行并集操作,包括重复行,不进行排序;

9、mapperxml中parameterType作用,selectid是要和方法名一样吗,resultMap和resultMap作用

mapper.xml中常用字段的说明:
select id:表示此段sql执行语句的唯一标识,也是接口的方法名称【必须一致才能找到】
parameterType=“xxxx” ——表示该sql语句中需要传入的参数, 类型要与对应的接口方法的类型一致【可选】
resultMap和resultMap都是定义出参,只能二选一
resultType:
resultType是直接表示返回类型的。
如果查询结果只是返回一个值,比如返回String或int,那么可以使用resultType指定简单类型作为输出结果。
还有一种情况就是如果数据库表的字段名和实体bean对象的属性名一样时,那么也可以直接使用resultType返回结果
resultMap:
数据库表的字段名和实体bean对象的属性名不一样时
resultType不需要配置,但是resultMap配置数据库表的字段名和实体bean对象类的属性名一一对应关系:
在这里插入图片描述

10、为啥service接口上没有@service,而是在实现类上?controller也是吗

service注解放在实现类(而不是service接口),因为这个注解其实就是相当于new对象的操作,只有类才有对象,接口无法new对象
controller不是这样:
我们是通过创建一个Controller类实现Controller接口,没有单独的分开controller接口和其实现类:

@RestController
public class CourseBaseInfoController {
}

而dao层是通过mapper和mapper.xml来实现,其中mapper是接口,不需要实现类(mybatis注解方式通过没有实现类的dao接口进行数据库操作的原理)。Mapper 接口开发方法只需要程序员编写Mapper 接口(相当于Dao 接口),由Mybatis 框架根据接口定义创建接口的动态代理对象。
mapper一个映射文件对应一个实体类,对应一张表的操作,对应一个mapper接口,mapper接口中的一个方法对应xml映射文件的一个sql语句。需要保证:
①mapper接口的全类名和映射文件的命名空间(namespace)保持一致
②mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致

11、stream、collect、toMap、filter作用

在这里插入图片描述
这条语句的作用是,将courseCategoryTreeDtos中的元素从list转换为map,并经其中的key设置为id,value属性不做修改,如果一个map元素中出现两个key值,则用新的key2覆盖原有的key1(根据 id 和 对象自己 转成 Map 集合)
collect方法:
可以收集流中的数据到【集合】或者【数组】中去,举例:

//1.收集数据到list集合中
stream.collect(Collectors.toList())
//2.收集数据到set集合中
stream.collect(Collectors.toSet())
//3.收集数据到map集合中
例子如图

Collectors.toMap方法的3个参数:
第一个参数就是用来生成key值的;
第二个参数就是用来生成value值的;有两种写法:
①Function.identity()
② t -> t(字母可以随便用,v啥的都行)
说明,这两种写法是等价的,都代表就是将对象自己返回
第三个参数用在key值冲突的情况下:如果新元素产生的key在Map中已经出现过了,第三个参数就会定义解决的办法。在这里插入图片描述
filter的作用:将id=传入参数的节点过滤掉,保留id!=参数的节点
stream流:
①Stream 使用的是函数式编程模式,如同它的名字一样,它可以被用来对集合进行链状流式的操作
②可以对流进行中间操作或者终端操作
中间操作:中间操作会再次返回一个流,所以,我们可以链接多个中间操作,注意这里是不用加分号的。代码中的filter 过滤,map 对象转换,sorted 排序,就属于中间操作。
终端操作是对流操作的一个结束动作,一般返回 void 或者一个非流的结果。代码中的 forEach循环 就是一个终止操作。

List<String> myList = Arrays.asList("a1", "a2", "b1", "c2", "c1");
myList.stream() // 创建流.filter(s -> s.startsWith("c")) // 执行过滤,过滤出以 c 为前缀的字符串.map(String::toUpperCase) // 转换成大写.sorted() // 排序.forEach(System.out::println); // for 循环打印

(后续需要看一下Stream流的详细讲解和Java的lambda表达式的内容)

12、一般什么操作会被设置为事务?

事务(Transaction)是访问并可能更新数据库中各项数据项的一个程序执行单元
数据库中的数据是共享资源,因此数据库系统通常要支持多个用户的或不同应用程序的访问,并且各个访问进程都是独立执行的,这样就有可能出现并发存取数据的现象,这里有点类似Java开发中的多线程安全问题(解决共享变量安全存取问题)
四个特征:
①原子性(Atomicity)
事务的原子性保证事务中包含的一组更新操作是原子的,不可分割的,所包含的操作被视为一个整体,执行过程中遵循“要么全部执行,要不都不执行”。
②一致性(Consistency)
事务的一致性要求事务必须满足数据库的完整性约束,且事务执行完毕后会将数据库由一个一致性的状态变为另一个一致性的状态(事务操作前后,数据表中的数据是不会发生变化的,直到成功提交前。)
③隔离性(Isolation)
事务的隔离性要求事务之间是彼此独立的,隔离的。及一个事务的执行不可以被其他事务干扰。
④持续性(Durability)
事物的持续性也称持久性,是指一个事务一旦提交,它对数据库的改变将是永久性的,因为数据刷进了物理磁盘了,其他操作将不会对它产生任何影响。

13、RuntimeException和Exception的区别

关系:
在这里插入图片描述
RunTimeException:运行时异常,又称不受检查异常,不受检查!
不受检查!!不受检查!!!重要的事情说三遍,因为不受检查,所以在代码中可能会有RunTimeException时Java编译检查时不会告诉你有这个异常,但是在实际运行代码时则会暴露出来
Runtime Exception:
在定义方法时不需要声明会抛出runtime exception; 在调用这个方法时不需要捕获这个runtime exception
Exception:
定义方法时必须声明所有可能会抛出的exception; 在调用这个方法时,必须捕获它的checked exception,不然就得把它的exception传递下去

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_274551.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

堆溢出——unlink漏洞攻击(bamboobox)

题目自取&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1S9xbAWhFw0xFqFyQTACqLA?pwdvvud 提取码&#xff1a;vvud 介绍&#xff1a; 终于学到Unlink了&#xff0c;不得不说和栈的难度相比确实大了很多&#xff0c;学起来确实很淦&#xff0c;一个unlink漏洞也确…

VSCode配置git bash为默认终端

打开左下角齿轮图标 打开Settings 搜索框输入 terminal.integrated.profiles.windows, 在下方显示的内容上点击 Edit in settings.json 配置修改如下 "terminal.integrated.profiles.windows": {"PowerShell": {"source": "PowerShell&qu…

Python每日一练(20230322)

目录 1. Excel表列序号 &#x1f31f; 2. 单词拆分 &#x1f31f;&#x1f31f; 3. 删除有序数组中的重复项 II &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练…

营销即服务!怎么做小程序店铺打造优质用户体验?

随着移动互联网的快速发展&#xff0c;小程序已经成为了许多企业打造优质用户体验的重要工具。一个好的小程序店铺能够为用户提供良好的购物体验&#xff0c;提高用户满意度和转化率。那么&#xff0c;怎么做小程序店铺打造优质用户体验呢&#xff1f; 一&#xff1a;做小程序店…

Linux 信号(signal):信号的捕捉流程

目录一、程序的运行状态二、信号捕捉流程在处理信号的时候&#xff0c;其实要经过一系列流程的&#xff0c;本文就来简单介绍一下信号处理的捕捉流程。 一、程序的运行状态 程序运行状态分为内核态和用户态。程序在运行库函数、用户自定义函数等第三方函数时就会在用户态运行&…

VSCode for C/C++ 插件

VSCode for C/C 插件功能性插件C/C【千万级下载&#xff01;】必选C/C Extension Pack【千万级下载&#xff01;】扩展包Code Runner【千万级下载&#xff01;必备】右键代码运行&#xff0c;格式化在终端的显示CMake、 CMake Integration、CMake Language Support、CMake Tool…

达梦数据库普通表转分区表

在生产环境中&#xff0c;数据库中一开始用的是普通表&#xff0c;但随着时间推移&#xff0c;数据量越来越大&#xff0c;可以考虑将普通表转换为分区表&#xff0c;提升数据库的性能。本文将介绍在DM8数据库中&#xff0c;实现将普通表转换为分区表的方法。环境说明数据库版本…

SpringBoot基础教程

springboot基础 一、springboot介绍 Spring Boot 提供一种快速使用spring的方式&#xff0c;基于约定大于配置的思想&#xff0c;可以让开发者不必在配置与逻辑业务中来回进行思维切换&#xff0c;全身心的投入到业务的代码编写中&#xff0c;从而大大提高了开发效率。2014年…

TypeScript的枚举与类型约束

● 上一章我们讲了 TS 的接口 ● 这一章, 我们就来聊一聊 TS 的枚举和约束 枚举 认识枚举 ● 在很多计算机语言中都有枚举的概念, 但是 JS 中是没有枚举这个概念的, 为了弥补这个缺憾 在 TS 加入了枚举类型 ● 什么是枚举呢 ? 枚举( mei ju ) : 枚举的意思就是一一列举,…

PyTorch 深度学习实战 | 基于 ResNet 的花卉图片分类

“工欲善其事&#xff0c;必先利其器”。如果直接使用 Python 完成模型的构建、导出等工作&#xff0c;势必会耗费相当多的时间&#xff0c;而且大部分工作都是深度学习中共同拥有的部分&#xff0c;即重复工作。所以本案例为了快速实现效果&#xff0c;就直接使用将这些共有部…

【C++初阶】六、模板初阶(函数模板+类模板)

文章目录泛型编程函数模板函数模板的概念函数模板的格式函数模板的原理函数模板的实例化模板参数的匹配原则类模板类模板的定义格式类模板的实例化泛型编程 引入 - 通用的交换函数 如果让你编写一个函数&#xff0c;用于两个数的交换。在C语言中&#xff0c;我们会用如下方法…

我让Chat GPT准备了几份SAP 顾问英文面试自我介绍的模板,大家感受一下

有个朋友说有个面试要用英文来做自我介绍&#xff0c;我灵机一动&#xff0c;不如让Chat GPT准备了几份SAP 顾问英文面试自我介绍的模板&#xff0c;大家感受一下。我看下来感觉写的还是中规中矩&#xff0c;可以一用&#xff0c;。 模板1 Sure, I can help you with that! Her…

【Java学习笔记】39.Java 多线程编程

Java 多线程编程 Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流&#xff0c;一个进程中可以并发多个线程&#xff0c;每条线程并行执行不同的任务。 多线程是多任务的一种特别的形式&#xff0c;但多线程使用了更小的资源开销。 这里定义和…

navigator 拓宽前端视野

前言&#x1f490; 写本文的起因是最近做了一个共享屏幕在线演示ppt的需求&#xff0c;发现了navigator的新大陆。原来web端开启屏幕共享是如此的简单&#xff0c;在接触之前还以为是多么高大上的功能,需求评审时内心还有些慌张。 人总是对自己不了解的东西心生恐惧&#x1f6…

VMware虚拟机卸载详细教程

安装过VMware虚拟机的小伙伴&#xff0c;90%可能都会遇到这样的问题&#xff1a;安装容易&#xff0c;卸载难。而且卸载不干净&#xff0c;就会导致后续安装和使用出现各种Bug。今天就给大家详细说说如何彻底干净的从本机卸载VMware。 1. 卸载之前&#xff0c;需要先关闭VMware…

【ChatGPT】Notion AI 从注册到体验:如何免费使用

欢迎关注【youcans的GPT学习笔记】原创作品&#xff0c;火热更新中 【ChatGPT】Notion AI 从注册到体验1. Notion AI 介绍1.1 Notion AI 简介1.2 Notion AI 的核心能力1.3 Notion AI 与 ChatGPT 的比较2. Notion AI 国内用户注册2.1 PC 端用户注册2.2 移动端用户注册3. Notion …

如何用C语言实现渣男通讯录

注意&#xff1a;纯属玩笑&#xff0c;博大家一乐&#xff0c;切勿当真&#x1f4d6;首先我们要知道一个渣男通讯录有哪些信息要包含哪些功能1.你的通讯录要装多少个女朋友你得规定吧&#xff1b;2.每个女朋友的姓名&#xff0c;年龄&#xff0c;电话&#xff0c;爱好这些要有吧…

springboot项目中外卖用户下单业务功能之需求分析+数据模型+功能开发(详细步骤)

一、需求分析 移动端用户将菜品或者套餐加入到购物车后&#xff0c;可以点击购物车种的 去结算 按钮&#xff0c;页面跳转到订单确认页面&#xff0c;点击 去支付 按钮则完成下单操作。 二、数据模型 用户下单业务对应的数据表为orders表和order_detail表&#xff1a; order…

ESP32-CAM 环境搭建(离线)

云盘&#xff1a;Arduino IDE链接&#xff1a;https://pan.baidu.com/s/1yk_tKH8eK8okp5z9qv1TLg 提取码&#xff1a;pz2h内含&#xff1a;IDE arduino-ide_nightly-20230322_Windows_64bit.zipSDK esp32_package_2.0.5_arduinocn.exe步骤1&#xff0c;IDE为绿色版&#xff0c;…

57、C语言程序设计谭浩强第五章习题

1、输入两个正整数m和n,求其最大公约数和最小公倍数 辗转相除法&#xff1a; #include <stdio.h>int main(){int m,n,temp;scanf("%d %d",&m,&n);if(m<n){tempm;mn;ntemp;}int dn*m;int r;while(rm%n){mn;nr;}printf("最大公因数为:%d&#…