今日内容概要 课程页面复制 课程主页表分析 课程页面数据录入 课程分类接口 课程列表接口 课程页面前后端调通 课程详情接口 课程详情页面 内容详细 1、课程页面 # 打开前端项目 luffycity: # 把前端代码复制到ActualCourse中即可 http://liuqingzheng.top/python/%E8%B7%AF%E9%A3%9E%E9%A1%B9%E7%9B%AE/6-%E8%AF%BE%E7%A8%8B%E6%A8%A1%E5%9D%97/1-%E8%AF%BE%E7%A8%8B%E9%A1%B5%E9%A1%B5%E9%9D%A2/ src/views/FreeCourse.vue: <template> <div> <Header></Header> <img src=https://tva1.sinaimg.cn/large/e6c9d24egy1h1g112oiclj224l0u0jxl.jpg alt= height=500px width=100%> <Footer></Footer> </div> </template> <script> import Header from @/components/Header import Footer from @/components/Footer export default { name: ActualCourse, components: { Header, Footer, } } </script> <style scoped> </style> src/views/ActualCourse.vue: <template> <div class=course> <Header></Header> <div class=main> <!-- 筛选条件 --> <div class=condition> <ul class=cate-list> <li class=title>课程分类:</li> <li class=this>全部</li> <li>Python</li> <li>Linux运维</li> <li>Python进阶</li> <li>开发工具</li> <li>Go语言</li> <li>机器学习</li> <li>技术生涯</li> </ul> <div class=ordering> <ul> <li class=title>筛 选:</li> <li class=default this>默认</li> <li class=hot>人气</li> <li class=price>价格</li> </ul> <p class=condition-result>共21个课程</p> </div> </div> <!
分布式ID 要保证id不重复,主要从三方面考虑,时间维度、空间维度、原子维度;
时间维度:时间维度不重复,例如今天和明天不能重复,所以时间是可以加入id的一种因子;
空间维度:不同的机器,不同的环境生成的id不同,所以mac地址,机房地址等,都可以作为空间维度的区分;
原子维度:主要是线程的安全性,也就是递增的保证,我们一般称之为 序列 ,例如数据库的自增id,就仅仅是原子维度;
讨论完分布式id后,我们讨论一下非功能性的一些要求:
高可用:可以随时提供服务,不间断;
低延迟:id获取速度要快;
高并发:支持高QPS;
雪花算法 雪花算法生成的ID是一个64 bit的long型的数字且按时间趋势递增。大致由首位无效符(0,1bit)、时间戳差值(41bit)、机器编码(10bit),序列号四部分组成(12bit)。
雪花算法是可以保证一定程度上的递增 雪花算法基于高并发下,时间的最小精度可以生产最多的序列号个数决定了不重复率 UUID 基本自带实现,同样考虑:时间、空间、序列号维度,有多个实现版本。 无序,长度太大,对数据库不友好。 TDDL 阿里内部的较多用法,主要是解决一个序列原子性的问题,首先它的序列是维护在数据中的,用一张表表示,每次获取一定个数(如10000)的序列到进程中使用。
为了保证高可用,和高并发,维护序列的必然不能只是一张表,所以可以搞n张表,每一个数据库表,维护一个sequence,所以就有了单个步长和组步长的说法。
序列的获取如下所示:
纯序列 Redis:集群高可用,但是部署复杂,维护难;可读性好,容易记住,存储占有空间少。 SQL自增:实现简单,但是性能不高;可读性好,容易记住,存储占有空间少。
Centos 7防火墙策略配置指南 —— 清听凌雪慕忆
@
目录1. 开启防火墙1.1 user切换到root用户1.2 查看防火墙服务状态1.3 查看firewall的状态1.4 启动/关闭防火墙2. 防火墙端口配置2.1 查看已开启端口2.2 查看防火墙规则2.3 查看允许协议2.4 开启、关闭、查询端口3. 防火墙ip指向限制配置3.1 允许指定ip访问所有流量3.2 允许指定ip访问指定端口3.3 允许指定ip访问指定协议3.4 允许指定ip访问指定服务3.5 防火墙移除某个服务3.6 其他4. 获取所有支持的服务4.1 增加、删除和服务
1. 开启防火墙 1.1 user切换到root用户 [user@localhost ~] su root 密码: [root@localhost home]# cd ~ [root@localhost ~]# 1.2 查看防火墙服务状态 systemctl status firewalld 1.3 查看firewall的状态 systemctl firewall state 或 firewall-cmd --state 1.4 启动/关闭防火墙 # 启动防火墙 systemctl start firewalld # 重启防火墙 systemctl restart firewalld 或 systemctl reload firewalld # 关闭 systemctl stop firewalld # 设置开机自启动防火墙 systemctl enable firewalld.
3.1 数据类型的定义 数据类型决定了一个数据的特征,即限定了该数据必须按照一定的规则进行操作。在程序设计中也 是如此,特定数据类型的数据会有其相应的行为模式。
JavaScript 中有以下 5 种基本数据类型。
字符串型 数值型 布尔型 null 型 undefined 型 在这 5 种基本数据类型之外的都被称为 Object 类型。也就是说,总的来看,JavaScript 中的数据类型可以分为 6 种。 3.1.1 在数据类型方面与 Java 作比较 动态数据类型与静态数据类型 像 Java 这样,变量具有数据类型的语言,被称为静态数据类型语言;而像 JavaScript 这样,变量没有类型的语言,则被称为动态数据类型语言。
基于类与基于原型 对于 Java 来说,内建类型(int 或 double 之类)之外的都是用户自定义类型。用户自定义类型又可以分为类和接口两种类型。Java 的用户自定义类型的使用方法,从其名称中就可略知一二,即开发者需要书写该类型的定义语句来定义该类型。而对象则作为这些由用户定义的数据类型的实例(实体)存在。这就是 Java 的基本特性。这种编程风格被称为基于类的语言风格。
另一方面,在 JavaScript 的语言规范中,不存在定义数据类型的语句。不需要使用特别的语句就能定义一个对象的属性或方法,而这样也就决定了该对象的类型。所谓类型也就是行为方式上的共性。由于每个对象都具有共同的行为方式,所以可以使用原型对象。这样的编程风格被称为基于原型的风格。
3.1.2 基本数据类型和引用类型 虽然 JavaScript 的变量不具有数据类型,但从概念上,JavaScript 变量可以分为基本数据类型变量和引用类型变量。基本数据类型变量直接保存有数值等类型的数据的值,而引用类型变量则保存有对象的引用。尽管表面上两者没有区别,但其内在是不同的。因此为了正确地理解其内部实现原理,就需要引入引用这一概念.
3.2 内建数据类型概要 在 ECMAScript 标准中,内建数据类型(built-in type)分为 5 种基本数据类型以及 Object 类型。
第1部分 JavaScript概要 第1章 JavaScript概要 第2部分 JavaScript的语言基础 第2章 JavaScript基础 第3章 JavaScript的数据类型 第4章 语句、表达式和运算符 第5章 变量与对象 第6章 函数与闭包 第7章 数据处理 第3部分 客户端JavaScript 第8章 客户端JavaScript与HTML 第9章 DOM 第10章 事件 第11章 客户端JavaScript实践 第12章 库 第4部分 HTML5 第13章 HTML概要 第14章 Web应用程序 第15章 与桌面应用的协作 第16章 存储 第17章 WebSocket 第18章 Web Workers 第5部分 Web API 第19章 Web API的基础 第20章 Web的实例 第6部分 JavaScript API 第21章 服务器端JavaScript与Node.js 第22章 Node.js程序设计实践
场景 公司内网有maven仓库,扫描之后发现很多组件有漏洞,主要是因为版本太老。因此需要将这些漏洞组件的最新版导入内部的maven私服。
问题 这么多漏洞组件,一个个去中央仓库找最新版,显然不科学。因此要整个脚本来做这件事情。
方案 众所周知,jar包的中央仓库是https://mvnrepository.com/,但是这个网站有反爬虫机制,使用脚本发出的请求不会得到响应结果。替代方案是Maven Central Repository Search,这也是官方提供的,“Official search by the maintainers of Maven Central Repository”。更令人激动的是,这个网站提供了REST API!不用你费尽心机的去解析网页,人家直接给你接口。 npm包,访问https://registry.npmjs.org/{npm_package}/latest,从该页面可以抓取最新版。 go module,访问https://pkg.go.dev/{go_pkg }?tab=versions,从该页面可以抓取最新版。 这就万事大吉了吗?并不!这里有个大坑:什么是最新版本?上面这些网站按照时间戳排序返回的最新版,不一定是我们需要的。比如4.0.0-RC、2.3.18、3.2.53个版本,按时间排序,不稳定的4.0.0-RC和太老的2.3.18排在了前面。但我们需要的是3.2.5版本。这就涉及到版本号排序算法。关于版本号排序,python官方是支持的。但支持有限:(1)不能处理超过3位的版本号,1.2.3.4这种会报错;(2)不能处理字母,如2.12.2-Final、2.12.RELEASE。因此,需要做一些额外处理,将满足需求的最新版本摘出来。这个有点难,有些开发者提供的包版本号命名不规范,特别长的、带日期的、带特殊字符的、alpha、beta的等等都有。 代码 可能需要的一些包:
import math import re import traceback from typing import Dict, List import requests from bs4 import BeautifulSoup from distutils.version import StrictVersion from natsort import natsorted from soupsieve import match 获取jar包的最新版本:
def process_maven(group_id, artifact_id): try: url = https://search.maven.org/solrsearch/select?q=g:{} a:{}&core=gav&rows=5&wt=json.format(group_id, artifact_id) response = requests.get(url) json = response.
这篇文章主要介绍了Windows Server 2016 Standard Key激活密钥序列号,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
Windows Server 2016激活密钥分享给大家,winserver2016服务器系统也需要激活码才能正常使用,sever2016密钥分为零售版永久激活码和批量授权版kms密钥。
激活步骤:
1.如下图,以管理员运行;
2.输入:
slmgr /ipk WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY slmgr /skms kms.03k.org slmgr /ato Windows Server 2016 Standard Key激活密钥序列号
Windows Server 2016激活操作窗口如下,
Windows Server 2016操作系统版本 KMS 客户端安装密钥
Windows Server 2016 Datacenter CB7KF-BWN84-R7R2Y-793K2-8XDDGWindows Server 2016 Standard WC2BQ-8NRM3-FDDYY-2BFGV-KHKQYWindows Server 2016 Essentials JCKRF-N37P4-C2D82-9YXRT-4M63B 一、windows server 2016零售版永久激活码
1、Windows Server 2016数据中心版零售版
Windows Server 2016 Datacenter Retail:
[Key]:6CNGG-BJP34-H923Y-6DMWR-37BMF
[Key]:HHRN4-BW4JY-GC9FP-TW3V8-7FT34
[Key]:DBNBR-9R8Q8-PPPT7-8J64C-MP3D4
[Key]:JD3N6-PXR8T-JQGRD-WVTXB-VQXQ4
2、Windows Server 2016标准版零售版
在Java 18中,将UTF-8指定为标准Java API的默认字符集。有了这一更改,依赖于默认字符集的API将在所有实现、操作系统、区域设置和配置中保持一致。
做这一更改的主要目标:
当Java程序的代码依赖于默认字符集时,使其更具可预测性和可移植性。 阐明标准Java API在哪里使用默认字符集。 在整个标准Java API中对UTF-8进行标准化,但控制台I/O除外。 需要注意的是,这一更改的目标并不是定义新的标准Java API或受支持的JDK API,尽管这项工作可能会发现新的便利方法可能会使现有的API更易于使用,这一更改并不是要弃用或删除依赖默认字符集的标准Java API。
用于读写文件和处理文本的标准Java API允许将字符集作为参数传递。字符集控制Java编程语言的原始字节和16位字符值之间的转换。例如,支持的字符集包括US-ASCII、UTF-8和ISO-8859-1。
如果没有传递字符集参数,则标准的Java API通常使用默认的字符集。JDK在启动时根据运行时环境选择默认的字符集:操作系统、用户的区域设置和其他因素。
因为默认字符集在每个地方都不一样,所以使用默认字符集的API会带来许多不明显的危险,甚至对经验丰富的开发人员也是如此。
考虑这样一个应用程序,它在不传递字符集的情况下创建一个java.io.FileWriter,然后使用它将一些文本写入文件。结果文件将包含一个使用运行应用程序的JDK的默认字符集编码的字节序列。第二个应用程序在不同的机器上运行,或者由同一台机器上的不同用户运行,在不传递字符集的情况下创建一个java.io.FileReader,并使用它来读取该文件中的字节。生成的文本包含使用运行第二个应用程序的JDK的默认字符集解码的字符序列。如果第一个应用程序的JDK和第二个应用程序的JDK之间的默认字符集不同,则生成的文本可能会被损坏或不完整,因为FileReader无法判断它使用了相对于FileWriter的错误字符集来解码文本。
比如这就是一个典型的例子,在MacOS上以UTF-8编码的日语文本文件在Windows上以美英或日语区域设置读取时被损坏:
java.io.FileReader(“hello.txt”) -> “こんにちは” (macOS) java.io.FileReader(“hello.txt”) -> “ã?“ã‚“ã?«ã?¡ã? ” (Windows (en-US)) java.io.FileReader(“hello.txt”) -> “縺ォ縺。縺ッ” (Windows (ja-JP) 在JDK 17及更早版本中,默认字符集是在Java运行时才确定的。在MacOS上,除POSIX C语言环境外,它是UTF-8。在其他操作系统上,取决于用户的区域设置,比如:Windows上,它是基于代码页的字符集,如Windows-1252或Windows-31j。如果不清楚Java应用运行环境的默认编码,可以使用这个命令查看当前JDK的默认字符集:
java -XshowSettings:properties -version 2>&1 | grep file.encoding 程序猿DD Tips:在过去的版本中,当读写文件时,没有指明字符集的话,所选择的字符集与操作系统、用户区域等因素相关,而不同的操作系统的默认编码不同,所以很可能会出现读写编码不一致的情况,从而导致程序在不同系统下运行出现乱码问题。所以这一更改可以让Java开发的应用具备更好的移植性。同时,从这一点的改进,也提醒我们,在读写文件的时候,为了你的应用有更好的可移植性,在涉及读写操作的时候,一定要加上编码参数。这样即使在Java 18之前的版本,也能拥有更好的可移植性,同时为将来升级Java 21提供更好的兼容前提。
本文配套视频:https://www.bilibili.com/video/BV1YY4y1a7vGopen in new window
如果您学习过程中如遇困难?可以加入我们超高质量的技术交流群,参与交流与讨论,更好的学习与进步!另外,不要走开,关注我!持续更新Java新特性教程!
欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源
1.XShell免费官方网站下载地址:https://www.netsarang.com/zh/all-downloads/ 但是官网的地址贼慢,用以下方法下载
2.可以用这个下(写着中文官网):https://www.xshellcn.com/
今日晚餐
要根据需求文档来进行开发,而不是根据线上项目来进行开发,根据文档来进行开发,今天吃大亏了。
添加一条数据需要编写对应的Request.java,删除只要写service.java、serviceimpl.java、controller.java即可,修改自己还没弄明白!!。
1L 就是 Long 1的意思。
idea搜索注释:edit---find---find in path。
@Size注解:对字段的长度进行约束:@Size(min = 1, max = 30, message = 仓库名称 + HibernateConstant.LIMIT_30)。 @NotNull注解:字段不能为空:@NotNull(message = 性质 + HibernateConstant.NOT_NULL)。
range(1,100)函数:range(start,end,step跳跃步数),返回一个1到99组成的序列。 生成一个1-99的list:list(range(1,100));
MySQL查id为1和id为2的全部数据:select * from student where id in (1,2,3,4,5); MySQL把查询出来的数据插入到某个表中:
insert into basic_order_face_sheet_monitor_people (user_name,email,phone,`status`,create_time) select user_name,email,phone_number,`status`,create_time from sys_user where id in(693473276474687489); select into from要求目标表target_table不存在,因为在插入时会自动创建。