用canvas做网站/网络营销前景和现状分析
配置文件
在企业开发过程中,我们习惯把一些需要灵活配置的数据放在一些文本文件中,而不是在Java代码写死 我们把这种存放程序配置信息的文件,统称为配置文件
properties
是一个Map集合(键值对集合),但是我们一般不会当集合使用。
核心作用:Properties是用来代表属性文件的,通过Properties可以读写属性文件里的内容
使用Properties读取属性文件里的键值对数据
使用Properties把键值对数据写出到属性文件里去
public class Demo1 {public static void main(String[] args)throws IOException {//1. 创建一个配置文件对象Properties properties = new Properties();properties.setProperty("name","卷王");properties.setProperty("age","18");properties.store(new FileWriter("E:\\Code191Day\\day10\\a-1.properties"),"卷王个人介绍");//2. 读取properties.load(new FileReader("E:\\Code191Day\\day10\\a-1.properties"));System.out.println(properties.getProperty("name"));System.out.println(properties.getProperty("age"));Set<String> set = properties.stringPropertyNames();for (String s : set) {System.out.println(s + properties.getProperty(s));}}
}
Properties的作用?具体如何使用?
可以加载属性文件中的数据到Properties对象中来
void load(Reader reader)
public String getProperty(String key) 根据键获取值
可以存储Properties属性集的键值对数据到属性文件中去
void store(Writer writer, String comments)
public Object setProperty(String key, String value) 设置键值
XML
本质是一种数据的格式,可以用来存储复杂的数据结构,和数据关系。
XML的特点
1.XML中的“<标签名>” 称为一个标签或一个元素,一般是成对出现的。
2.XML中的标签名可以自己定义(可扩展),但必须要正确的嵌套。
3.XML中只能有一个根标签。
4.XML中的标签可以有属性。
5.如果一个文件中放置的是XML格式的数据,这个文件就是XML文件,后缀一般要写成.xml
XML的语法规则
1.XML文件的后缀名为:xml,文档声明必须是第一行
<?xml version="1.0" encoding="UTF-8" ?>
version:XML默认的版本号码、该属性是必须存在的
encoding:本XML文件的编码
2.XML中可以定义注释信息:<!–- 注释内容 -->,快捷键是Ctrl+shift+/
3.XML中书写”<”、“&”等,可能会出现冲突,导致报错,此时可以用如下特殊字符替代。
< < 小于
> > 大于
& & 和号
' ' 单引号
" " 引号
4.XML中可以写一个叫CDATA的数据区: <![CDATA[ …内容… ]]>,里面的内容可以随便写。
XML的作用和应用场景
本质是一种数据格式,可以存储复杂的数据结构,和数据关系。
应用场景:经常用来做为系统的配置文件;或者作为一种特殊的数据结构,在网络中进行传输。
XML的作用
XML的是一种可扩展的标记语言。
作用:1)作为软件的配置文件 2)用于进行存储数据和传输数据
解析XML文件
Dom4j解析XML-得到Document对象
DOM4J解析XML文件的思想:文档对象模型
<?xml version="1.0" encoding="UTF-8" ?>
<users><user id="1"><name>张无忌</name><password>minmin</password><address>光明顶</address><gender>男</gender></user><user id="2"><name>敏敏</name><password>wuji</password><address>光明顶</address><gender>女</gender></user>
</users>
public class Demo2 {public static void main(String[] args) throws DocumentException {List<User> list = new ArrayList<>();//1.使用SAXReader读取XML,封装成DocumentSAXReader saxReader = new SAXReader();Document read = saxReader.read("E:\\Code191Day\\day10\\b-2.xml");//获取跟节点Element rootElement = read.getRootElement();//获取根元素下的子元素List<Element> elements = rootElement.elements();//遍历集合获取每个元素for (Element element : elements) {String id = element.attributeValue("id");String name = element.element("name").getText();String password = element.element("password").getText();String address = element.element("address").getText();String gender = element.element("gender").getText();User user = new User(Integer.valueOf(id),name,password,address,gender);list.add(user);}list.stream().forEach(System.out::println);}
}
Element提供的方法
约束文档
门用来限制xml书写格式的文档,比如:限制标签、属性应该怎么写。
约束文档的分类
1.DTD文档
2.Schema文档
日志技术
程序中的日志,通常就是一个文件,里面记录的是程序运行过程中的各种信息。
1.可以将系统执行的信息,方便的记录到指定的位置(控制台、文件中、数据库中)。
2.可以随时以开关的形式控制日志的启停,无需侵入到源代码中去进行修改。
Logback日志框架
想使用Logback日志框架,至少需要在项目中整合如下三个模块:
1.slf4j-api:日志接口
2.logback-core
3.logback-classic
实现步骤
public class Demo1 {public static final Logger LOGGER = LoggerFactory.getLogger("Demo1");public static void main(String[] args) {LOGGER.debug("哈哈哈");LOGGER.error("除法报错");try {LOGGER.warn("除数为0");sum(10, 2);}catch (Exception e){LOGGER.error("除法报错");}}public static int sum(int a,int b){LOGGER.info("输入的参数:a={},b={}",a,b);int c = a / b;return c;}}
日志级别
多线程
1.单线程:在计算机中同一时间只能做一件事
2.多线程:在计算机中同一时间可以做多件事
public class Demo1 {public static final Logger logger = LoggerFactory.getLogger("Demo1");public static void main(String[] args) {//需求:创建两个线程,分别用于打印10个A和10个B,最后观察下输出顺序new Thread(){@Overridepublic void run() {Thread.currentThread().setName("卷王线程");for (int i = 0; i < 10; i++) {logger.info(Thread.currentThread().getName() + i);}}}.start();new Thread(){@Overridepublic void run() {Thread.currentThread().setName("阿giao线程");for (int i = 0; i < 10; i++) {logger.info( Thread.currentThread().getName() + i);}}}.start();}
}
线程的创建方式
方式一继承Thread类
1.定义一个子类继承线程类java.lang.Thread,
2.重写run()方法 创建子类的对象
3.调用子类对象的start()方法启动线程(底层会自动去执行run方法)
public class Demo1 {public static final Logger logger = LoggerFactory.getLogger("Demo1");public static void main(String[] args) {//需求:创建两个线程,分别用于打印10个A和10个B,最后观察下输出顺序new Thread(){@Overridepublic void run() {Thread.currentThread().setName("卷王线程");for (int i = 0; i < 10; i++) {logger.info(Thread.currentThread().getName() + i);}}}.start();new Thread(){@Overridepublic void run() {Thread.currentThread().setName("阿giao线程");for (int i = 0; i < 10; i++) {logger.info( Thread.currentThread().getName() + i);}}}.start();}
}
多线程的创建方式二:实现Runnable接口
public class Demo1 {public static final Logger logger = LoggerFactory.getLogger("Demo1");public static void main(String[] args) {//需求:创建两个线程,分别用于打印10个A和10个B,最后观察下输出顺序new Thread(() -> {for (int i = 0; i < 10; i++) {logger.info("Agiao = {}", i);}},"Agiao"){}.start();new Thread(() -> {for (int i = 0; i < 10; i++) {logger.info("展丫鹏 = {}" , i);}},"展丫鹏"){}.start();}
}
多线程的第三种创建方式:利用Callable接口、FutureTask类来实现
public class Demo1 {public static final Logger logger = LoggerFactory.getLogger("Demo1");public static void main(String[] args) throws ExecutionException, InterruptedException {//需求:启动两个子线程,分别计算100之内的奇数的和和偶数的和,然后在主线程中再做个汇总,得到总和//2.创建任务类对象OddCallable oddCallable = new OddCallable();EvenCallable evenCallable = new EvenCallable();//3.创建未来任务的对象,可以获取线程执行的结果FutureTask<Integer> integerFutureTask1 = new FutureTask<>(oddCallable);FutureTask<Integer> integerFutureTask2 = new FutureTask<>(evenCallable);//4.创建线程类Thread thread1 = new Thread(integerFutureTask1,"计算奇数");Thread thread2 = new Thread(integerFutureTask2,"计算偶数");//5.启动线程thread1.start();thread2.start();//6.从FutureTask对象中获取线程执行结果//假设结果还没有算出来,线程会在此等待Integer oddSum = integerFutureTask1.get();Integer evenSum = integerFutureTask2.get();logger.info("{}",oddSum + evenSum);}}class OddCallable implements Callable<Integer>{@Overridepublic Integer call() throws Exception {int sum = 0;for (int i = 1; i <= 100; i+=2) {sum += i;}return sum;}
}class EvenCallable implements Callable<Integer>{@Overridepublic Integer call() throws Exception {int sum = 0;for (int i = 0; i <= 100; i+=2) {sum += i;}return sum;}
}
请对对比说一下三种线程的创建方式,和不同点?
相关文章:

Day10配置文件日志多线程
配置文件 在企业开发过程中,我们习惯把一些需要灵活配置的数据放在一些文本文件中,而不是在Java代码写死 我们把这种存放程序配置信息的文件,统称为配置文件 properties 是一个Map集合(键值对集合),但是我…...

leetcode:1154. 一年中的第几天(python3解法)
难度:简单 给你一个字符串 date ,按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。 示例 1: 输入:date "2019-01-09" 输出:9 解释:给定日期是2019年的第九天。 示例…...

竞赛 深度学习图像修复算法 - opencv python 机器视觉
文章目录 0 前言2 什么是图像内容填充修复3 原理分析3.1 第一步:将图像理解为一个概率分布的样本3.2 补全图像 3.3 快速生成假图像3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构3.5 使用G(z)生成伪图像 4 在Tensorflow上构建DCGANs最后 0 前言 &#…...

flutter升级+生成drift文件
1. flutter升级 可以安装fvm进行flutter version manager FVM 安装笔记 - 掘金 (juejin.cn) 使用flutter upgrade, 但是没有效果, 可能需要到我的电脑中,更改高级系统设置;改变/增加环境变量;用来加上flutter官网获取信息的内…...

[AUTOSAR][诊断管理][ECU][$34] 下载请求
文章目录 一、简介二、服务请求报文定义肯定响应支持的NRC三、示例代码34_req_dowload.c一、简介 RequestDownload(0x34)—— 下载请求 这个服务主要是用来给ECU下载数据的,最常见的应用就是在bootloader中,程序下载工具会发起下载请求,以完成ECU程序的升级。 二、服务…...

C 标准库 - <errno.h>和<float.h>详解
目录 简介 常见库宏 简介 常见库宏 <errno.h> 简介 <errno.h>头文件定义了一个名为errno的全局变量,用于表示最近发生的错误代码。errno是一个整数变量,它的值通常是一个非零的错误代码,用于指示发生了什么类型的错误。也可以…...

对于如何学习的一点思考
目录 1、学习遇到的问题 2、问题分析 3、解决思路 1、学习遇到的问题 我们经常在学习一个知识时,经常会遇到知识点凌乱、读书效率低、缺乏长期记忆等问题,主要体现在: 知识点凌乱:花时间学习了很多技术点,但是由于…...

Ensemble Methods集成学习大比拼:性能、应用场景和可视化对比总结
集成学习(Ensemble Learning)是一种机器学习范式,其中多个模型(通常称为“弱学习器”)被训练以解决相同的问题,并且通过某种方式结合它们的预测以提高整体性能。这种方法的核心思想是,多个模型比单一模型更能准确地预测未知数据。在本文中,我们将探讨多种集成学习算法,…...

【2024秋招】2023-9-16 贝壳后端开发二面
1 自我介绍 2 秒杀系统 2.1 超卖怎么解决 3 redis 3.1 过期策略 3.2 过期算法 4 kafka 4.1 说一说你对kafka的了解 4.2 如何保证事务性消息 4.3 如何保证消息不丢失 4.4 消息队列的两种通信方式 点对点模式 如上图所示,点对点模式通常是基于拉取或者轮询…...

SpringCloud 微服务全栈体系(七)
第九章 Docker 一、什么是 Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署,环境不一定一致…...

SAP ABAP 报表输出成 excel 统计图形 (RFC : GFW_PRES_SHOW_MULT)
SAP 预设了一个类型组 GFW ,做简单的excel图形输出 话不多说,直接上代码: *&---------------------------------------------------------------------* *& Report ZCYCLE057 *&----------------------------------------------…...

微信小程序如何获取地理位置
在微信小程序中,可以通过以下步骤获取用户的地理位置: 在小程序的app.json文件中配置权限: json "permission": {"scope.userLocation": {"desc": "你的位置信息将用于获取附近的服务"} }这样配置后…...

计算机网络相关硬件介绍
计算机相关硬件 计算机由运算器、控制器、存储器、输入设备和输出设备等五个逻辑计算机硬件部件组成。 一、中央处理器(CPU)(运算器、控制器) (1)运算器 运算器是对数据进行加工处理的部件ÿ…...

Megatron-LM GPT 源码分析(三) Pipeline Parallel分析
引言 本文接着上一篇【Megatron-LM GPT 源码分析(二) Sequence Parallel分析】,基于开源代码 GitHub - NVIDIA/Megatron-LM: Ongoing research training transformer models at scale ,通过GPT的模型运行示例,从三个维…...

Python---使用turtle模块+for循环绘制五角星---利用turtle(海龟)模块
首先了解涉及的新词汇,编程外国人发明的,所以大部分是和他们语言相关,了解对应意思,可以更好理解掌握。 import 英 /ˈɪmpɔːt/ n. 进口,进口商品;输入,引进;重要性;…...

Python的比较运算符查询表
据个人的编程开发经验,Python的比较运算符最常于条件判断,而条件判断是python编程中最常用的语法之一,与for或while的循环一样,功能十分强大! 在机器学习当中,或深度学习当中,在运用算法对统计…...

C/C++面试常见问题——const关键字的作用和用法
首先我们需要一下const关键字的定义,const名叫常量限定符,当const修饰变量时,就是在告诉编译器该变量只可访问不可修改,而编译器对于被const修饰的变量有一个优化,编译器不会专门为其开辟空间,而是将变量名…...

Vue3.3指北(四)
Vue3.3指北 1、WebPack - VueCLI1.1、WebPack安装VueCli1.2、vue create 创建项目1.3、项目目录结构介绍 2、ViteVue32.1、认识create-vue2.2、使用create-vue创建项目2.3、项目目录剖析2.4、ESlint代码规范及手动修复2.5、通过eslint插件来实现自动修正 3、VueRouter43.1、单页…...

vue如何使用路由拦截器
在 Vue 中使用路由拦截器需要使用 Vue Router 提供的 beforeEach 方法。beforeEach 方法会在每个路由切换前,对路由进行拦截处理。可以在这个方法中进行一些验证或者权限认证,如果满足条件则继续跳转,否则取消跳转并进行相应处理。 下面是一…...

Docker 深度清除镜像缓存 (overlay2)
Docker 深度清除镜像缓存 (overlay2) 一般情况下,运维清理镜像是通过命令 docker rm i 删除镜像的。但是这条命令不会删除docker build命令产生的缓存文件。 这个时候需要使用 docker system 的系列命令来做相关处理。 docker system --hel…...

刷题笔记(第三天)
1.给定二进制字符串,将其换算成对应的十进制数字 输入:11000000 输出:192 function base10(str) {let sum 0;let a str.split().reverse(); // 个位是第一个元素for (var i 0; i < a.length; i) {suma[i]*Math.pow(2, i);}return sum;…...

Linux常用命令——chown命令
在线Linux命令查询工具 chown 用来变更文件或目录的拥有者或所属群组 补充说明 chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D࿰…...

浅谈Docker原理
文章目录 前言命名空间控制组分层存储镜像和容器Docker EngineDocker Registry 前言 Docker 是一种容器化技术,它通过利用 Linux 内核提供的虚拟化技术和隔离机制,实现了更轻量级的应用程序虚拟化方案 命名空间 Docker 使用了 Linux 的命名空间特性&a…...

Rt-Thread 移植5--空闲线程和线程阻塞(KF32)
5.1原因 线程延时是浪费CPU资源,受否可以考虑延时的时候放弃CPU使用权,这样就充分利用了CPU的资源。 如果线程进入阻塞状态,没有其他线程运行,是否可以运行一个空闲线程来做一些内存的清理等系统工作呢:5.2 实现 5.2…...

Web3 治理实践探讨:如何寻找多元化发展路径?
Web3 领域变革正崭露头角,而社区治理开始成为行业热议话题。Web3 项目如何探寻多元化建设的解困路径,究竟是治理模型的精进成为首要问题,还是吸纳更多资金与组织教育培训,让开发者成为项目建设的中坚力量?本期 TinTinW…...

探索Vue 3和Vue 2的区别
目录 响应式系统 性能优化 Composition API TypeScript支持 总结 Vue.js是一款流行的JavaScript框架,用于构建用户界面。Vue 3是Vue.js的最新版本,相较于Vue 2引入了许多重大变化和改进。在本文中,我们将探索Vue 3和Vue 2之间的区别。 …...
中微爱芯74逻辑兼容替代TI/ON/NXP工规品质型号全
这里写自定义目录标题 工业级型号全产品线概述批量应用行业头部客户兼容替代封装对照逻辑参数对比电平转换系列型号对照HC/HCT 系列型号对照AHC/AHCT 系列型号对照LV/LVC 系列型号对照…...

聊一下Word2vec-训练优化篇
Word2vec 涉及到两种优化方式,一种是负采样,一种是层序Softmax 先谈一下负采样,以跳字模型为例。中心词生成背景词可以由两个相互独立事件的联合组成来近似(引自李沐大神的讲解)。 第一个事件是,中心词和…...

Julia元组、字典、集合
文章目录 元组字典集合共性 Julia系列:编程初步🔥数组 作为通用编程语言,除了数组之外,julia实现了元组、字典、集合等数据结构。 元组 与向量类似,也是一维的数据结构,并且对数据类型无要求,…...

EfficientViT:高分辨率密集预测的多尺度线性关注
标题:EfficientViT: Multi-Scale Linear Attention for High-Resolution Dense Prediction 论文:https://arxiv.org/abs/2205.14756 中文版:【读点论文】EfficientViT: Enhanced Linear Attention for High-Resolution Low-Computation将soft…...