当前位置: 首页 > news >正文

【JavaWeb】实训的长篇笔记(上)

JavaWeb的实训是学校的一门课程,老师先讲解一些基础知识,然后让我们自己开发一个比较简单的Web程序。可涉及的知识何其之多,不是实训课的 3 周时间可以讲得完的,只是快速带过。他说:重点是Web开发的流程。
我的实训草草收场,一水而过,但也仍然留下了一些杂乱笔记,谨供参考。

文章目录

    • 零、Hello
      • 1、心得
      • 2、问题
      • 3、其他
    • 一、实训前要求
      • 1、eclipse
      • 2、立项
      • 3、需求分析
      • 4、概要设计
      • 5、前端设计
    • 二、前端知识
    • 三、操作任务
    • 四、前端设计
      • 1、主页
      • 2、登录页面
      • 3、后台管理
    • 五、数据库
      • 1、数据库基础
      • 2、MySQL基本使用
      • 3、SQL语句
      • 4、数据库设计
      • 5、数据库实现
    • 六、连接数据库:JDBC
      • 1、使用流程
      • 2、参数处理
      • 3、简单封装
    • 七、MVC系统架构
      • 1、架构介绍
      • 2、系统架构搭建
      • 3、小结
      • 4、Web项目运行部署


零、Hello

1、心得

  • 不要经常打补丁式地去填充一些细节,而更应该去寻找更好的结构。

2、问题

  • for语法?
  • workbench创建外键的用法?

3、其他

  • 中华英才网:招聘网站
  • 应届生:重视可塑性

一、实训前要求

大三暑假就可以实习,只有一年了。(考研,考公,教资,就业)

boos直聘。

  • 日记:80-100字
  • 7-10班答辩取消了

MVC: 一种项目架构的设计模式,基于面向接口编程。

Servlet: 重要技术,但是企业不用。能接受前端的用户请求,把数据响应前端。(servlet -> springmvc -> sprintboot)

JDBC: 数据库连接技术

1、eclipse

工作空间的作用?会设置一些什么?

metadata:元数据,描述数据的数据。

  • 字体:不要改,有些字体无法被识别,如javascript会有一些要求。

  • 字符编码:utf-8

  • 设置JDK?

对象

  • 类是创建对象的模板
  • 类的形成:对现实事物共同点的抽象
  • 私有属性能不能被继承?能、不能都可以,要说出原因。
  • 方法重写:只修改函数体。
  • 看源码

继承

  • 一个父类可以多个子类,但是一个子类只有一个父类。(子类属于父类类型)
  • 多态?接口?抽象?

2、立项

1)名称:《交个朋友》

2)需求:(实际需要需求调研

涉及部门:产品部(主),开发部(产品不懂技术)

  1. 前端功能:用户交互的界面

    • 首页
      • 导航栏:注册,登录,广告(轮播图),后台管理,我的朋友,搜索
      • 内容:轮播图广告,系统推荐朋友
      • Footer:版权信息
    • 朋友详情
      • 头像 --> 查看信息,但不同人的信息同一个模板(不用每人写一个页面)
    • 个人中心
      • 登录用户的信息
    • 用户如何交到朋友?(流程
      • 一方:注册 --> 登录 --> 搜索 / 推荐朋友 --> 查看 --> 好友申请 --> 等待
      • 另一方:收到申请 --> 查看详情 --> 接受 / 拒绝(理由)
  2. 后台功能:接受请求 --> 发牛响应

    • 登录
    • 用户管理
      • 审核用户
      • 禁用账号 / 解禁账号
      • 删除用户
      • 修改用户
    • 朋友推荐

3、需求分析

1)涉及部门:开发部

需求分析是了解要做什么

4、概要设计

信息

1)注册信息:用户昵称,性别,密码,确认密码

2)登录信息:用户昵称,密码

3)广告信息:图片,说明

4)用户详情:头像,昵称,真实姓名(对接公安系统),性别,职业,宣言…

5)首页推荐:头像,昵称,职业…

数据库设计

5、前端设计

设计部门:前端设计部

过程:ps画页面原型 --> html页面

前端岗位:

1)传统前端:html / css / ps

2)现在前端:+ js框架 / 前端框架 / VUE前后端分离

在这里插入图片描述

一个标签:像java中的一个对象

二、前端知识

1)div标签,在网页中划出一块空间。

占多大 --> 设置样式。

注:div本是只是竖向排列的标签。

2)盒子模型:

3)网页布局:略

前端框架:Bootstrap (v3)。

4)框架:写好了很多东西,拿来用就好了。DIV(do it self)。

使用框架:导入.css.js文件。

css类选择器(class)与id选择器(id)的区别是什么?

5)响应式:拉动页面窗口(改变大小、纵横比),内容仍然可以正常显示,自适应。

6)栅格:div块的嵌套,一个横向div可以分很多列。不同的屏幕大小设备,适用于不同的样式。

  • 12个分成5份?10/5,剩下的留白。
  • 文本对齐:左中右。
  • 学习框架:了解它能做哪些事情。
  • 图片:显示形状(方、圆、方形圆角)

三、操作任务

搭建eclipse环境,熟悉css,安装bootstrap文件

四、前端设计

1、主页

1)导航栏

  • 组件:导航、分页、缩略图…
  • 先确定需求,然后开始写自己的前端页面。
  • 勾上 generate web .xml
  • 建议整个网页放在一个container容器中。
  • nav:导航
  • 交互:如下拉框,js文件。导航栏中引用了jquery框架(怎么看出来的?
  • 用行内样式可以覆盖默认样式。在浏览器修改,快速调整,不用每次都修改都刷新浏览器。

2)广告栏

  • 调整图片大小 / div形状
  • 调整两栏之间的间隙

3)系统推荐

  • 缩略图
  • 注意div标签的正确对应和闭合。

4)其它

  • 将导航栏固定在顶端,同时避免遮盖。下面的广告栏加上上边距。

2、登录页面

  • 新建文件:register.html
  • 版权信息固定在底部
  • 栅格系统:左广告,右登录页
  • 表单登录:输入框,单选按钮
  • <a>打开新标签页,使用target="_blank"属性。

3、后台管理

  • 不太注重前端的体验
  • 用户会有默认的头像
  • 表格<tr><th><td><table>

五、数据库

1、数据库基础

关系型数据库

mysql安装流程:安装mysql,安装mysql服务,登录,修改密码,设置远程连接(具体见视频)。

update user set host='%' where user='root';
  • 官网:mysql.com 。

移除mysql:停止服务,mysqld -remove mysql,删除安装文件目录,删除注册表。(使用.exe文件安装的,按照普通软件方式卸载)

  • services.msc

  • 自己注册购买几个域名?

  • 社区版,8.x版本

  • 准备工作:如果机器上已经有,只要能用就无需安装。若有但不能用,需卸载干净后才能安装。

  • my.ini

  • mysql与mysql服务?

  • 注册表:维护计算机运行的服务列表。

  • 登录时指定登录端口号,使用参数-P,使用不同版本的mysql

  • 概念区分:数据库服务器,数据库,表,数据。

    • 数据库服务器:安装了数据库软件的服务器。

    • 应用服务器:安装了应用程序的服务器。(企业中会分开部署)

    • 数据库:在数据库服务器中创建,用来存放数据表

    • :用来存放数据,以行为单位。

Java数据库
一个类一张表
类属性表字段
属性类型字段类型
对象一行

MySQL客户端的安装:navicat_trial。workbench是老版本。

  • 本机:localhost127.0.0.1
  • navicat_trial报错1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client,应该是版本太旧了。

2、MySQL基本使用

  • 登录mysql -u root -p,其中-p并不是password的意思,而是用于指定数据库,参数可以为空(即不选择),在登录后通过use <database_name>来选择数据库

  • sql的分类DDL(数据定义语言), DCL(数据控制语言), DML(数据操作语言), DLL(数据事务语言)

  • 创建数据库:可在客户端中创建。

  • 创建数据表

    • (sex) 1boy 2girl,使用代号比使用字符串查询更快。
    • (birthday),如果使用timestamp记录从1970年开始的毫秒数),则1970前的生日无法表示。可以使用datetime
    • 表名字不使用user,因为是sql的关键字。
    • workbench显然没有navacat好用,比如写入日期时没有选项框,只能手打。
  • 数据类型:int, varchar, double, datatime, timestamp; 长串数字,若不用于运算,一律使用varchar而不用int。

  • 数据输入

  • 主键能够唯一标识一条字段。一般不参与业务逻辑运算,如学生主键经常使用id而不用学号。

    • 修改表结构:在workbench中右键目标表,选择alter table
    • 设置自动维护主键:勾选·Auto Increment。记录已经被使用过的主键的最大值,删掉也不影响。
  • 外键:在一张表中,关联另一张表的约束。

    • 键名冲突:例如学生表有个id,地址表也有个id,如果要创建外键就会有问题。因此,可以给每个表自己的主键加个标识,例如重命名为uid
      或者给外键加个标识成aid应该也行 )

    • 主外键约束。参照完整性,外键的值得在被关联表中存在。约束的是外键列的值。

    • 主外键约束的建立。外键不能参照不存在的主键,于是已经被参照的主键也无法被删除。

      注意 :在开发过程中,表和表在结构上体现主外键关系,但不创建主外键约束。因为删除(修改)一个主键字段,就要先删除参照它的外键字段,这个外键字段的行可能又被被人参照,表间关联和约束太多导致维护困难

    • 主表:表中有一个主键被其他表用来当外键的表。

    • 从表:把另外一个表中的主键当作自己的外键的表。

3、SQL语句

  • 增加insert into 表名(字段1, 字段2) values(值1, 值2)

  • 修改update 表名 set 字段=新值, ... where 条件

  • 删除delete from 表名 where 条件

  • 查询select 字段1, 字段2... from 表名 where 条件

    • 查询部分数据limit

    • 模糊查询。关键字like;通配符% _

      %可以代表任意多个字符,_可以代表任意一个字符。

    • 排序order by

      对查询好像结果排序,ASC(升序) | DESC(降序)

    • 分组group by

      分组的目的是统计。常见的统计函数有(max min sum avg count)。

      含有goupy by的sql中,select后只能接被分组的字段或统计函数。否则在mysql5.x版本会报错;在8.x中不会报错但是无意义

    • 多表连接查询

    • 子查询

      将一个查询的结果作为另一个查询的对象。

      案例:和李四住在一起的人有哪些?

      分析:首先知道李四住在哪,然后将李四住址作为条件进行查询。

-- 1、查询部分数据
select * from users limit 2; -- 返回查询数据的前两个
select * from users limit 0,1; -- 从0到1,注意下标从0开始
-- 2、模糊查询
select * from users where name like %%;
-- 4、分组
select * from users group by aid; -- 显示每组的第一条数据
select aid, count(id) from users group by aid; -- 查询每个地址人数
-- 5、连接
select * from users,address where users.aid = address.id;
select * from users as u,address a where u.aid = a.id; -- 简化写法
-- 6、子查询 --> 和李四住在一起的人有哪些?
select id,name,aid from users where aid = 
(select aid from users where name="李四");

4、数据库设计

回头再改表结构是非常麻烦的

三大范式1NF(列的原子性),2NF(直接依赖,即所有其他属性都直接依赖于主键),3NF(每个字段不能传递依赖于主键,如有aid列,就不要address列了)。

原则:数据库的性能,比规范化重要。

数据库设计的过程

  1. 找出实体(对象)
  2. 找出实体的属性
  3. 找出实体之间的关系E-R实体关系图)
  4. 将ER图转换为

找实体

  • 用户实体 users:主键 uid,密码 password,头像 photo,昵称 nickname,真实姓名 name,性别 sex,职业 career,宣言 words,

    审核状态 chechstatus(待审核1 通过2 未通过3) ,

    账号状态 accstatus(正常1 禁用2)

    首页推荐 indexstatus(未推荐1 已推荐2)

  • 广告实体 ad:主键 adid,图片 image,说明

  • 朋友实体 friends:主键 fid,邀请方 send,被邀请方 accept,邀请状态 status(未处理1 通过2 拒绝3)

  • 职业表 carrer:主键 cid,名称 cname

英文命名尽量通俗,去查的单词可能后来自己都不认识了。

5、数据库实现

表的Comments在哪里体现?

为什么要单独创建一个职业表?

  • 头像:用字符串存放路径

六、连接数据库:JDBC

Web项目的三大块:前台,后台,数据库。

JDBC:Java DataBase Connectivity

1、使用流程

实现步骤

  1. 导入驱动jar包。数据库厂商给java提供了连接db的实现类。java只提供接口,实际调用的数据库厂商的实现。即java的同一套接口可以连接不同的数据库
    • jar包放到 /lib 目录下
    • Add to Build Path,产生一个Referenced Libraries。
  2. 注册驱动
    • 记得注册时区
    • localhost | 127.0.0.1
    • 有多个异常:使用父类Exception捕获所有的异常。
  3. 创建连接
    • desc users 可以查看表的属性。
  4. 创建业务sql
  5. 创建传送和执行sql的对象PrepareStatement
    • 修改操作,得到的是影响行数。
    • 查询操作,得到的是一张表。返回List,遍历即可。
  6. 执行sql,根据结果处理业务逻辑
    • 从语句的影响行数来判断是否成功执行
  7. 关闭资源
  • 在一行数据中取属性。

    • 使用各种get方法,一个个地取出属性。
    • 然后将这些属性构成一个对象。
  • javabean:能够存储数据的一些类。(那记录呢?)

    • 自动生成getset方法、构造方法。

      source --> Generate Getters and Setters

    • 标准的javabean:又脚vo(值对象),dto(数据传输对象),model(数据类型)

    • 唯一作用:进行数据存储(封装)和传输。

// ResultSet对象的使用示例
while(rs.next()) {String id = rs.getString(1);int sex = rs.getInt("sex");System.out.println(id);
}

重载:一件事情,根据不同的条件有不同的实现方式。

对比:突然感觉,python中的字典就很方便。

局部类型推断 var:在java10版本后。

感想:好像,自己写代码的时间就过得特别快。

2、参数处理

  • sql注入。可以干嘛?

    • sql的执行计划

    • 防御:sql语句使用占位符参数,查询时再给参数赋值,会自动进行类型转换(内部有很多处理),丢掉多余的部分。

      将sex值只作为sex的字段值进行设置,而不是组合sql语句

    • 组合模糊查询nm+"%"

// _sex = "1 or 1=1"
// 可以被sql注入的语句
String sql  = "select * from users where sex = " + _sex + ";";
PreparedStatement pstmt = conn.prepareStatement(sql);
// 防sql注入的语句
String sql  = "select * from users where sex = ?;";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, _sex);select * from users where sex = '1 or 1=1';

问题pstmt.setString()是将_sex作为一个字符串加入sql语句的,它为什么可以正常执行呢?在什么阶段进行了处理?

:你会发现下面这条语句就是可以正常执行(即使sex的类型为int)。

select * from users where sex = '1 or 1=1';

3、简单封装

  • 一共只需要一个,也只需要建立一次数据库连接。
  • 开发角度的封装。
  1. 抽取connection对象的创建。

    public static Connection getConn()

  2. 抽取资源的关闭。

    public static void close(Connection conn, PreparedStatement pstmt)

  • 单例模式
    • 静态块:只在类加载时执行一次。
    • finally关键字:不管catch执不执行,里面都会执行。
    • 条件判断将null写在前面(老手):null != pstmt ;理论上可以避免空值异常。为啥?

感受:在jdbcUtil类中,多层嵌套的try-catch-finally看起来好丑。

七、MVC系统架构

1、架构介绍

不管java如何,先看生活中如何。

在这里插入图片描述

  • 顾客:前端

    • 静态技术html,css,js,bs

    • 动态技术jsp,vue --> 静态数据动态化

  • 下单:发送请求

  • 服务员(控制层):控制整个业务流程走向,向前端负责。

    • 接受前端请求,并将请求获取到的数据响应前端。
    • 技术jsp,Servet,SpringMVC,SpringBoot
  • 厨师(服务层):向控制层负责,为控制层提供服务。

    • 能够提供各种方法,处理控制层的业务。
    • 思想面向接口编程。接口定义功能,实现类实现功能。控制层只需要调用接口方法即可,而无需知道具体实现。
  • 配菜师(DAO层):数据访问层,从数据库中获取数据交给服务层,为服务层服务。

    • 只负责数据处理,将数据处理的结构反馈给服务层即可。也面向接口编程。
    • 数据库连接技术JDBC,MyBatis
  • 菜(DB数据库):存放数据。

    • MySQL,ORACLE,DB2

MVC:Model(数据模型),View(视图),Controller(控制)

流程View --> Controller --> Services --> DAO --> DB

2、系统架构搭建

- src- edu.ft.control- edu.ft.services- edu.ft.dao- edu.ft.util- edu.ft.bean
- WebContent
  • 层次展示包结构:Package Presentation --> Hierarchical

想法:总是只看功能,不关心如何实现,真的好吗?

理解mvc代码执行流程:(以模拟注册为例)

  1. control:把注册信息入库,得到入库的结果,将结果告知用户。

  2. service:给控制器提供一个能够入库的功能。

  3. dao:给服务层提供一个能够插入数据库的功能。存粹地处理数据,而不进行任何业务逻辑的处理。

- control- Test
- services- impl :实现类- IUsersServiceImpl- IUsersService :一个接口
- dao- impl- IUsersDaoImpl- IUsersDao 
  • 使用对象传数据,避免冗长的参数列表。

问题:注解Override是什么?

问题:给类再包一层接口,不会显得多余吗?

3、小结

  • 需求分析:要做什么。
  • 概要设计:做成什么样子。
  • 详细设计:每一个细节怎么做。

各个步骤可以并行开始,而不是只能一条龙。

  • 执行计划:解析sql

4、Web项目运行部署

要实现静态数据的动态化

  • 服务器:运行项目的一个容器,其实就是一个软件,如tomcat。汽车要放到马路环境,才能启动运行。

  • 在Eclipse中配置tomcat:windows --> Preferences --> Server --> Runtime Environments

  • 给项目配置tomcat:右键项目 --> Propenties for … --> Java Build Path --> Libraries

  • 运行项目(部署到tomcat中):Window --> show view --> 搜索Servers --> open

    默认端口号为8080

  • 访问项目:url:http://IP(localhost):端口号/项目资源 ,例如http://localhost:8080/friends/index.html


相关文章:

【JavaWeb】实训的长篇笔记(上)

JavaWeb的实训是学校的一门课程&#xff0c;老师先讲解一些基础知识&#xff0c;然后让我们自己开发一个比较简单的Web程序。可涉及的知识何其之多&#xff0c;不是实训课的 3 周时间可以讲得完的&#xff0c;只是快速带过。他说&#xff1a;重点是Web开发的流程。 我的实训草草…...

如何使用Docker安装AWVS?

前言 还记得很早的时候使用AWVS&#xff0c;还需要找位置&#xff0c;贴补丁&#xff0c;放文件&#xff0c;现在慢慢掌握Docker后发现&#xff0c;使用Docker去部署一些东西就很方便&#xff0c;当然也包括AWVS。 我们今天带大家通过Docker部署AWVS&#xff08;有中文哦&…...

vue命名规范

文件和文件夹的命名&#xff1a; 文件夹命名&#xff1a; Vue 项目中通常可以根据功能或页面来划分文件夹。例如&#xff0c;您可以为每个页面创建一个文件夹&#xff0c;并将相关的组件、样式和资源文件放在其中。文件夹的命名最好使用短横线分隔的小写字母&#xff08;kebab …...

第05天 SpringBoot自动配置原理

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;每天一个知识点 ✨特色专栏&#xff1a…...

AlphaZero能否从围棋和国际象棋飞跃到量子计算?

一项新的研究表明&#xff0c;DeepMind惊人的游戏算法AlphaZero可以帮助释放量子计算的力量和潜力。 自两年多前出现以来&#xff0c;AlphaZero一再证明了其快速学习能力&#xff0c;将自己提升到围棋&#xff0c;国际象棋和将棋&#xff08;日本象棋&#xff09;的特级大师级别…...

进程切换

进程切换 上下文切换上下文切换的消耗上下文切换与模式切换 对于通常的进程而言&#xff0c;其创建、撤销及要求由系统设备完成的IO操作&#xff0c;都是利用系统调用而进入内核&#xff0c;再由内核中的相应处理程序予以才完成的。进程切换同样是在内核的支持下实现的&#xf…...

ES踩坑记录之UNASSIGNED分片无法恢复

问题背景 换节点 我们线上有一套ES集群&#xff0c;三台机器&#xff0c;共运行了6个节点。一直在线上跑了几个月也一直没出什么问题。然而好巧不巧&#xff0c;就在昨天&#xff0c;集群中的3号节点磁盘出现故障&#xff0c;导致机器直接瘫痪。本来大家觉得问题不大&#xf…...

ubuntu更换国内apt源

ubuntu必备操作 1 更换apt镜像源 备份镜像 cp /etc/apt/sources.list /etc/apt/sources.list.bak查看自己ubuntu版本 # 查看自己的codename #查看自己的ubuntu版本[注意关注&#xff1a;DISTRIB_CODENAME&#xff0c;发行代号] cat /etc/*release# DISTRIB_CODENAMEcosmic …...

OpenCV-Python中的图像处理-视频分析

OpenCV-Python中的图像处理-视频分析 视频分析Meanshift算法Camshift算法光流Lucas-Kanade Optical FlowDense Optical Flow 视频分析 学习使用 Meanshift 和 Camshift 算法在视频中找到并跟踪目标对象: Meanshift算法 Meanshift 算法的基本原理是和很简单的。假设我们有一堆…...

STM32 CubeMX (第四步Freertos内存管理和CPU使用率)

STM32 CubeMX STM32 CubeMX &#xff08;第四步Freertos内存管理和CPU使用率&#xff09; STM32 CubeMX一、STM32 CubeMX设置时钟配置HAL时基选择TIM1&#xff08;不要选择滴答定时器&#xff1b;滴答定时器留给OS系统做时基&#xff09;使用STM32 CubeMX 库&#xff0c;配置Fr…...

题解 | #1012.Equalize the Array# 2023杭电暑期多校10

1012.Equalize the Array 签到 题目大意 定义一个数组的 m o d e mode mode 是其中出现次数最多的数字&#xff08;可不唯一&#xff09; 给定一个数组 a a a &#xff0c;每次操作可以选定其一个 m o d e mode mode 并使数组中所有与之相等的元素 1 1 1 问任意次操作后…...

UE4/5C++多线程插件制作(二十一、使用)

目录 DemoPawn.h DemoPawn.cpp 会出现的bug 插件 相关的插件制作在上一节已经完成了。 具体的使用方式在第0章已经写了,get之后去绑定即可。 而后笔者做了一个接口,具体的绑定方式也就在这个接口里面。 接下来最重要的是进行使用,对此我做了一个与蓝图相关的接口,里…...

【C#】关于?的用法

1、可空类型修饰符&#xff08;&#xff1f;&#xff09; 如&#xff1a; int? x null;//可空类型默认值都是null&#xff0c;而值类型如int默认值为0、bool默认值为false等 bool? result true;2、三目运算符&#xff08;?&#xff1a;&#xff09; 如&#xff1a; bool…...

linux——mysql的高可用MHA

目录 一、概述 一、概念 二、组成 三、特点 四、工作原理 二、案例 三、构建MHA 一、基础环境 二、ssh免密登录 三、主从复制 master slave1 四、MHA安装 一、环境 二、安装node 三、安装manager 一、概述 一、概念 MHA&#xff08;MasterHigh Availability&a…...

【学习日记】【FreeRTOS】空闲任务与阻塞延时

写在前面 本文是基于野火 RTOS 教程对空闲任务和阻塞延时的详解。 一、什么是任务中的阻塞延时 说到阻塞延时&#xff0c;笔者的第一反应就是在单片机的 while 循环中&#xff0c;使用一个 for 循环不断递减一个大数&#xff0c;通过 CPU 不断执行一条指令的耗时进行延时。这…...

衣服材质等整理(时常更新)

参考文章&图片来源 https://zhuanlan.zhihu.com/p/390341736 00. 天然纤维 01. 化学纤维 02. 聚酯纤维&#xff08;即&#xff0c;涤纶&#xff09; 一种由有机二元酸和二元醇通过化学缩聚制成的合成纤维。具有出色的抗皱性和保形性&#xff0c;所制衣物在穿着过程中不容…...

电子商务环境下旅游价值链

迈克尔 ・ 波特(Michael E. Porter)在其《竞争优势》一书中提出了“价值链” 的概念&#xff0c;并认为一家企业最核心的竞争优势在于对价值链的设计。虽然迈克尔 ・ 波 特提出的价值链主要是针对企业内部的价值链&#xff0c;但他视价值链为一系列连续完成的 活动&#xff…...

spring源码分析bean的生命周期(下)

doGetBean()执行过程 createBean()执行过程 一、DependsOn注解 spring创建对象之前会判断类上是否加了DependsOn注解&#xff0c;加了会遍历然后会添加到一个map中&#xff0c;spring会先创建DependsOn注解指定的类 二、spring类加载器 在合并BeanDefinition&#xff0c;确定…...

完美解决Github提交PR后报错:File is not gofumpt-ed (gofumpt)

问题阐述 最近在Github上提交PR后&#xff0c;遇到了这么一个问题&#xff1a;golangci-lint运行失败&#xff0c;具体原因是File is not gofumpt-ed (gofumpt)。 名词解释 golangci-lint&#xff1a; golangci-lint 是Go语言社区中常用的代码质量检查工具&#xff0c;它可以…...

pytorch3d成功安装

一、pytorch3d是什么&#xff1f; PyTorch3D的目标是帮助加速深度学习和3D交叉点的研究。3D数据比2D图像更复杂&#xff0c;在从事Mesh R-CNN和C3DPO等项目时&#xff0c;我们遇到了一些挑战&#xff0c;包括3D数据表示、批处理和速度。我们开发了许多有用的算子和抽象&#xf…...

【vue3】同个页面引入多个图表组件实现自适应的方法

首先说明&#xff0c;此方案仅针对vue3项目在同一个页面引入了多个图表组件&#xff0c;因为我发现不能框架不同的引入&#xff0c;resize的写法还不同 window.addEventListener("resize", function() {...// 在此处重新调用即可 }以下是具体写法&#xff1a; 循环…...

一文了解汽车芯片的分类及用途介绍

汽车芯片按其功能可分为控制类&#xff08;MCU和AI芯片&#xff09;、功率类、传感器和其他&#xff08;如存储器&#xff09;四种类型。市场基本被国际巨头所垄断。人们常说的汽车芯片是指汽车里的计算芯片&#xff0c;按集成规模可分为MCU芯片和AI芯片&#xff08;SoC芯片&am…...

Linux0.11内核源码解析-truncate.c

truncate文件只要实现释放指定i节点在设备上占用的所有逻辑块&#xff0c;包括直接块、一次间接块、二次间接块。从而将文件节点对应的文件长度截为0&#xff0c;并释放占用的设备空间。 索引节点的逻辑块连接方式 释放一次间接块 static void free_ind(int dev,int block) {…...

LED驱动型IC芯片的原理介绍

一、LED驱动器是什么 LED驱动器&#xff08;LED Driver&#xff09;&#xff0c;是指驱动LED发光或LED模块组件正常工作的电源调整电子器件。由于LED PN结的导通特性决定&#xff0c;它能适应的电源电压和电流变动范围十分狭窄&#xff0c;稍许偏离就可能无法点亮LED或者发光效…...

VLAN实验

实验题目如下&#xff1a; 实验拓扑如下&#xff1a; 实验要求如下&#xff1a; 【1】PC1/3的接口均为access模式&#xff0c;且属于van2&#xff0c;在同一网段 【2】PC2/4/5/6的IP地址在同一网段&#xff0c;与PC1/3不在同一网段 【3】PC2可以访问4/5/6&#xff0c;PC4不能…...

Qt应用开发(基础篇)——高级纯文本窗口 QPlainTextEdit

一、前言 QPlainTextEdit类继承于QAbstractScrollArea&#xff0c;QAbstractScrollArea继承于QFrame&#xff0c;是Qt用来显示和编辑纯文本的窗口。 滚屏区域基类https://blog.csdn.net/u014491932/article/details/132245486?spm1001.2014.3001.5501框架类QFramehttps://blo…...

三维可视化平台有哪些?Sovit3D可视化平台怎么样?

随着社会经济的发展和数字技术的进步&#xff0c;互联网行业发展迅速。为了适应新时代社会发展的需要&#xff0c;大数据在这个社会经济发展过程中随着技术的进步而显得尤为重要。同时&#xff0c;大数据技术的快速发展进程也推动了可视化技术的飞速发展&#xff0c;国内外各类…...

Xxl-job安装部署以及SpringBoot集成Xxl-job使用

1、安装Xxl-job&#xff1a; 可以使用docker拉取镜像部署和源码编译两种方式&#xff0c;这里选择源码编译安装。 代码拉取地址&#xff1a; https://github.com/xuxueli/xxl-job/tree/2.1.2 官方开发文档&#xff1a; https://www.xuxueli.com/xxl-job/#%E3%80%8A%E5%88%…...

【【超声波避障小车代码】】

超声波避障小车代码 #include <reg51.h> //通用51头文件 #include <intrins.h> //使用了_nop()_函数#define uchar unsigned char //用 uchar 表示 unsigned char 类型 #define uint unsigned int //用 uint 表示 unsigned int 类型sbit EN…...

TDI(Time Delay Integration)

TDI&#xff08;Time Delay Integration&#xff09;是一种特殊的图像采集技术&#xff0c;常用于线阵CCD&#xff08;Charge-Coupled Device&#xff09;相机。TDI技术可以在保持高分辨率的同时增强图像的信噪比&#xff08;Signal-to-Noise Ratio, SNR&#xff09;&#xff0…...

RHCE——一、安装部署及例行性工作

RHCE 一、网络服务1、准备工作2、RHEL9操作系统的安装部署3、配置并优化RHEL9操作系统4、网络配置5、修改网络连接 二、例行性工作1、单一执行的例行性工作2、循环执行的例行性工作 三、书写定时任务的注意事项四、系统级别的计划任务五、实验1、实验一&#xff1a;编写脚本tes…...

服务器数据库中了360后缀勒索病毒怎么办?360后缀勒索病毒的加密形式

随着信息技术的发展&#xff0c;企业的计算机服务器数据库变得越来越重要。然而&#xff0c;在数字时代&#xff0c;网络上的威胁也日益增多。近期&#xff0c;我们收到很多企业的求助&#xff0c;企业的计算机服务器遭到了360后缀勒索病毒的攻击&#xff0c;导致服务器内的所有…...

期权就是股指期货吗,哪个好做一点?

近年来&#xff0c;场内ETF期权产品不断扩大&#xff0c;越来越多的投资者有投资期权的想法。当我们看到期权时&#xff0c;我们会不知不觉地想到期货&#xff0c;虽然期货与期权只有一个字的区别&#xff0c;但实际上有很大的不同&#xff0c;那么期权就是股指期货吗&#xff…...

week32

本周目标&#xff1a; Belady现象的解释 操作系统 计组IO/MM chapter 刷力扣 ubuntu磁盘/网络/命令行进阶*1 tarball之类的使用 Question 大数据系统实验要学吗&#xff1f; 据说课讲得不好这是一门类似数据库的课程——大数据之hadoop / hive / hbase 的区别是什么&a…...

【数据库】P1 数据库基本常识

数据库基本常识 数据库 ≠ 数据库管理系统表&#xff08;Table&#xff09;SQL是什么 数据库 ≠ 数据库管理系统 数据库是保存有组织的数据的容器&#xff0c;数据库称为 DB&#xff08;DataBase&#xff09;&#xff1b;数据库管理系统是创建和操纵数据库的软件&#xff0c;数…...

c语言——计算两个数的乘积

//计算两个数的乘积 #include<stdio.h> #include<stdlib.h> int main() {double firstNumber,secondNumber,product;printf("两个浮点数&#xff1a;");scanf("%lf,%lf",&firstNumber,&secondNumber);productfirstNumber*secondNumber…...

单机模型并行最佳实践

单机模型并行最佳实践 模型并行在分布式训练技术中被广泛使用。 先前的帖子已经解释了如何使用 DataParallel 在多个 GPU 上训练神经网络&#xff1b; 此功能将相同的模型复制到所有 GPU&#xff0c;其中每个 GPU 消耗输入数据的不同分区。 尽管它可以极大地加快训练过程&…...

编程练习(3)

一.选择题 第一题&#xff1a; 函数传参的两个变量都是传的地址&#xff0c;而数组名c本身就是地址&#xff0c;int型变量b需要使用&符号&#xff0c;因此答案为A 第二题&#xff1a; 本题考察const修饰指针变量&#xff0c;答案为A,B,C,D 第三题&#xff1a; 注意int 型变…...

PyTorch学习笔记(十三)——现有网络模型的使用及修改

以分类模型的VGG为例 vgg16_false torchvision.models.vgg16(weightsFalse) vgg16_true torchvision.models.vgg16(weightsTrue) 设置为 False 的情况&#xff0c;相当于网络模型中的参数都是初始化的、默认的设置为 True 时&#xff0c;网络模型中的参数在数据集上是训练好…...

Python爬虫的scrapy的学习(学习于b站尚硅谷)

目录 一、scrapy  1. scrapy的安装  &#xff08;1&#xff09;什么是scrapy  &#xff08;2&#xff09;scrapy的安装 2. scrapy的基本使用  &#xff08;1&#xff09;scrap的使用步骤  &#xff08;2&#xff09;代码的演示 3. scrapy之58同城项目结构和基本方法&…...

“深入解析JVM:揭秘Java虚拟机的工作原理“

标题&#xff1a;深入解析JVM&#xff1a;揭秘Java虚拟机的工作原理 摘要&#xff1a;本文将深入解析Java虚拟机&#xff08;JVM&#xff09;的工作原理&#xff0c;探讨其内部结构和运行机制。我们将介绍JVM的组成部分、类加载过程、内存管理、垃圾回收、即时编译等关键概念&…...

【数据结构与算法】十大经典排序算法-归并排序

&#x1f31f;个人博客&#xff1a;www.hellocode.top &#x1f3f0;Java知识导航&#xff1a;Java-Navigate &#x1f525;CSDN&#xff1a;HelloCode. &#x1f31e;知乎&#xff1a;HelloCode &#x1f334;掘金&#xff1a;HelloCode ⚡如有问题&#xff0c;欢迎指正&#…...

基于深度学习创建-表情符号--附源码

表情符号深度学习概述 如今,我们使用多种表情符号或头像来表达我们的心情或感受。它们充当人类的非语言线索。它们成为情感识别、在线聊天、品牌情感、产品评论等的关键部分。针对表情符号驱动的故事讲述的数据科学研究不断增加。 从图像中检测人类情绪非常流行,这可能是由…...

.netcore grpc的proto文件字段详解

一、.proto文件字段概述 grpc的接口传输参数都是根据.proto文件约定的字段格式进行传输的grpc提供了多种类型字段&#xff1b;主要包括标量值类型&#xff08;基础类型&#xff09;、日期时间、可为null类型、字节、列表、字典、Any类型&#xff08;任意类型&#xff09;、One…...

带你了解建堆的时间复杂度

目录 用向上调整建堆的时间复杂度 1.向上调整建堆的时间复杂度O(N*logN) 2.数学论证 3.相关代码 用向下调整建堆的时间复杂度 1.建堆的时间复杂度为O(N) 2.数学论证 3.相关代码 完结撒花✿✿ヽ(▽)ノ✿✿ 博主建议:面试的时候可能会被面试官问到建堆时间复杂度的证明过…...

人工智能原理(6)

目录 一、机器学习概述 1、学习和机器学习 2、学习系统 3、机器学习发展简史 4、机器学习分类 二、归纳学习 1、归纳学习的基本概念 2、变型空间学习 3、归纳偏置 三、决策树 1、决策树组成 2、决策树的构造算法CLS 3、ID3 4、决策树的偏置 四、基于实例的学习…...

单片机模块化编程文件创建流程

一、在工程文件夹下创建一个新的文件夹&#xff0c;命名为“ModulesCodesFiles”&#xff0c;译为“模块化代码文件”&#xff0c;用于存放所有模块化代码文件。 二、在“ModulesCodesFiles”文件夹下为每个模块创建一个新的文件夹&#xff0c;命名为模块的名称&#xff0c;例…...

docker image

docker image 1. 由来 docker image是Docker容器管理工具中的一个命令&#xff0c;用于管理和操作Docker镜像。 2. 常见五种示例命令和说明 以下是docker image的常见示例命令及其说明&#xff1a; 示例一&#xff1a;列出所有镜像 docker image ls描述&#xff1a;使用d…...

力扣75——单调栈

总结leetcode75中的单调栈算法题解题思路。 上一篇&#xff1a;力扣75——区间集合 力扣75——单调栈 1 每日温度2 股票价格跨度1 - 2 解题总结 1 每日温度 题目&#xff1a; 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &…...

Webpack和Parcel详解

构建工具和打包器是在开发过程中帮助组织、优化和打包项目的工具。它们可以处理依赖管理、资源优化、代码转换等任务&#xff0c;从而使开发流程更高效。以下是关于构建工具和打包器的一些指导&#xff1a; **Webpack&#xff1a;** Webpack 是一个功能强大的模块打包器&#…...