上一章中我们分析了 SpringApplication 类实例化的源代码,在此过程中完成了基本配置文件的加载和实例化。当 SpringApplication 对象被创建之后, 通过调用其 run 方法来进行SpringBoot 的启动和运行,至此正式开启了 SpringApplication 的生命周期。 本章介绍的内容同样是 Spring Boot 运行的核心流程之一,我们将会围绕 SpringApplicationRunListeners、ApplicationArguments、ConfigurableEnvironment 以及 应用上下文信息等部分展开讲解。
Spring Boot 使用 Commons Logging 进行所有内部日志的记录。SpringBoot 同时提供了Java Util Logging、Log4J2 和 Logback 的默认配置 ,都可以通过预置的配置来设置控制台和文件格式的日志输出。本章重点介绍如何触发 Spring Boot 日志及相关初始化处理机制。
JMS 消息分发送消息和接收消息两种功能,发送消息很简单,注入 Jms Template 到对应的Bean 中即可使用。接收消息则需要使用@JmsListener 注解。
移动端 click 事件会有 300ms 的延时,原因是移动端屏幕双击会缩放(double tap to zoom) 页面。
client 翻译过来就是客户端,我们使用 client 系列的相关属性来获取元素可视区的相关信息。通过 client 系列的相关属性可以动态的得到该元素的边框大小、元素大小等。
移动端浏览器兼容性较好,我们不需要考虑以前 JS 的兼容性问题,可以放心的使用原生 JS 书写效果,但是移动端也有自己独特的地方。比如触屏事件 touch(也称触摸事件),Android和 IOS 都有。
新建一个节点<service>,设置名称android:name=”.PhoneService”
SpringBoot项目支持两种常见的打包形式: jar 包和 war 包。默认情况下创建的 Spring Boot项目是采用 jar 包形式,如果项目需要 war 包,可通过修改配置打成 war 包。
昨天利用Vibrator将手机改造成振动器,女票大人很满意,今天再接再厉,研究一下Android传感器如何开发……
一直以来搭建Data Guard是一件看起来还蛮有含量的工作,因为这其中涉及的工作比较琐碎,比较细,况且手工搭建起来都会碰到各种各样的问题,如果中途碰到一点儿小问题,那可能需要花点时间来排查,如果想要脚本自动化,那简直寸步难行。所以搭建Data Guard一方面会需要很多的提前准备和配置,另一方面这个工作自动化的驱动力不够,毕竟环境不会像MySQL业务一样动辄几十成百上千的规模,所以由此而来,好像搭建一个套环境的成本也值了,如果尝试自动化,半自动化,那花费的时间估计够搭建10套环境了。所以目前来看,
@EnableAutoConfiguration 的关键功能是通过@Import 注解导入的 ImportSelector 来完成的从 源 代码得知@lmport( AutoConfigurationlmportSelector.class) 是@EnableAutoConfiguration 注 解 的 组成部分 , 也是自动配置功能的核心实现者 。
SpringBoot构造流程源码分析 Spring Boot 的启动非常简单,只需执行一-个简单的 main 方法即可,但在整个 main 方法中,Spring Boot 都做了些什么呢?本章会为大家
LoggingApplicationListener 的主要作用是配置LoggingSystem, 如果 环境 包含 loggingconfig 属性,LoggingApplicationListener 将用于引导 日志记录系统,否则使用默认配置。
完成了 ApplicationContextlnitializer 的加载之后,便会进行 ApplicationListener 的加载。它的常见应用场景为:当容器初始化完成之后,需要处理一些如数据的加载、初始化缓存、特定任务的注册等操作。而在此阶段,更多的是用于 ApplicationContext 管理 Bean 过程的场景。
DispatcherServlet的加载过程 DispatcherServlet 的获取 还 记 得 在 上 一 章 Web应 用 中 自 动 配 置 的 DispatcherServlet 和 D
ActiveMQ 是 Apache 提供的一个开源的消息系统,很好地支持了 JMS 规范。在使用ActiveMQ 时需要在 pom 文件中引入 spring-boot-starter-activemq。
在完成了以上步骤的过滤、筛选之后,我们最终获得了要进行自动配置的类的集合,在将该集合返回之前,在 AutoConfigurationlmportSelector 类中完 成的最后一步操作就是相关事件的封装和广播,相关代码如下。
Spring Boot 对主流的数据库都提供了很好的支持,打开 Spring Boot 项目中的 starters 会发现针对 data 提供了 15 个 starter 的支持,包含了大量的关系型数据库和非关系数据库的数据访问解决方案。而本章重点关注 Spring Boot 中数据源自动配置源码的实现,及核心配置类 DataSourceAutoConfiguration 和 Jdbc TemplateAutoConfiguration 等的用法。
实际应用场景千变万化,各种语言的特性和语法各不相同。但是高质量编程遵循的原则是相通的
通过前面的几篇文章,我们都能看到SpringApplicationRunListener,SpringApplicationRunListener 是SpringApplication 的运行监听器,提供Spring Boot启动时各个运行状态的监听,可以在应用程序启动的时候执行一些自定义操作或记录一些信息。SpringApplicationRunListener 在run中加载SpringApplicationRunListeners listeners = getRunListeners(args);。 ApplicationListener是Spring 提供的上下文监听器,可用于监听指定感兴趣的事件。
在安全文件管理器 Wordpress 插件 V 2.9.3 和可能之前,经过身份验证的用户可以通过更改内容类型并将 .php 重命名为扩展名为 .phtml 来上传 php 文件
python中的pprint.pprint(),类似于print() 下面是我做的demo: 1 #python pprint 2 3 '''python API中提供的Sample''' 4 import json 5 import pprint 6 from urllib.request import urlopen 7 8 with urlopen('http://pypi.python.org/pypi/configparser/json') as url: 9 htt
查询恢复信息 [root@esvm03 ~]# curl 'localhost:9200/_cat/recovery?v' index shard time type stag
我们知道Oracle在以下的版本中,为了防止产生过多的子游标,增加了子游标个数限定的功能。
对于HashMap内的所有实现来说,首先第一步是定位对键值对所在数组的索引下标位置,这是后续所有操作的基础.
—\ntheme: awesome-green\n—\n# 写在开头\n\n网络上大部分 Typescript 教程都在告诉大家如何使用类型体操更好的组织你的代码。\n\n但是针对于声明文件(Declaration Files)的相关内容却是少之又少。\n\n这篇文章中,我会带你着重讲述 TypeScript Declaration Files 的用法让你的 TS 功底更上一层。\n\n# TypeScript 模块解析规则\n\n在开始之前,我们先来聊聊 TS 文件的加载策略。\n\n> 掌握加载策略才会让我们实实在在的避免一些看起来毫无头绪的问题。\n\nTS 中的加载策略分为两种方式,分别为相对路径和绝对路径两种方式。\n\n## 首先我们来看看相对模块的加载方式:\n\nTypeScript 将 TypeScript 源文件扩展名(.ts、.tsx和.d.ts)覆盖在 Node 的解析逻辑上。同时TypeScript 还将使用package.jsonnamed中的一个字段types来镜像目的"main"- 编译器将使用它来查找“主”定义文件以进行查阅。\n\n比如这样一段代码:\n\nts\n// 假设当前执行路径为 /root/src/modulea\n\nimport { b } from './moduleb'\n\n\n此时,TS 对于 ./moduleb 的加载方式其实是和 node 的模块加载机制比较类似:\n\n+ 首先寻找 /root/src/moduleb.ts 是否存在,如果存在使用该文件。\n\n+ 其次寻找 /root/src/moduleb.tsx 是否存在,如果存在使用该文件。\n\n+ 其次寻找 /root/src/moduleb.d.ts 是否存在,如果存在使用该文件。\n\n+ 其次寻找 /root/src/moduleB/package.json,如果 package.json 中指定了一个types属性的话那么会返回该文件。\n\n+ 如果上述仍然没有找到,之后会查找 /root/src/moduleB/index.ts。\n\n+ 如果上述仍然没有找到,之后会查找 /root/src/moduleB/index.tsx。\n\n+ 如果上述仍然没有找到,之后会查找 /root/src/moduleB/index.d.ts。\n\n可以看到 TS 中针对于相对路径查找的规范是和 nodejs 比较相似的,需要注意我在上边已经额外加粗了。\n\nTs 在寻找文件路径时,在某些条件下是会按照目录去查找 .d.ts 的。\n\n## 非相对导入\n\n在了解了相对路径的加载方式之后,我们来看看关于所谓的非相对导入是 TS 是如何解析的。\n\n我们可以稍微回想一下平常在 nodejs 中对于非相对导入的模块是如何被 nodejs 解析的。没错,它们的规则大同小异。\n\n比如下面这段代码:\n\nts\n// 假设当前文件所在路径为 /root/src/modulea\n\nimport { b } from 'moduleb'\n\n\n+ /root/src/node_modules/moduleB.ts\n+ /root/src/node_modules/moduleB.tsx\n+ /root/src/node_modules/moduleB.d.ts\n+ /root/src/node_modules/moduleB/package.json(如果它指定了一个types属性)\n+ /root/src/node_modules/@types/moduleB.d.ts\n+ /root/src/node_modules/moduleB/index.ts\n+ /root/src/node_modules/moduleB/index.tsx\n+ /root/src/node_modules/moduleB/index.d.ts\n\ntypescript 针对于非相对导入的 moduleb 会按照以上路径去当前路径的 node_modules 中去查找,如果上述仍然未找到。\n\n此时,TS 仍然会按照 node 的模块解析规则,继续向上进行目录查找,比如又会进入上层目录 /root/node_modules/moduleb.ts ...进行查找,直到查找到顶层 node_modules 也就是最后一个查找的路径为 /node_modules/moduleB/index.d.ts 如果未找到则会抛出异常 can't find module 'moduleb'。\n\n> 上述查找规则是基于 tsconfig.json 中指定的 moduleResolution:node,当然还有 classic 不过
我们需要证明的等式为:$a^{\log_b c} = c^{\log_b a}$。
首先,将 \log_b c 看作一个变量 x,那么原式可表示为 a^x = c^{\frac{\log_a b}{\log_a c}}。
例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
agent的类型是AgentExecutor,继承自Chain,调用agent.run()方法会调用Chain的run()方法。
μ=1N∑i=1Nxiσ2=1N∑i=1N(xi−μ)2 \begin{aligned} &\mu = \frac{1}{N}\sum_{i = 1}^{N}x_i \\ &\sigma^2 = \frac{1}{N}\sum_{i = 1}^{N}(x_i - \mu)^2 \end{aligned} μ=N1i=1∑Nxiσ2=N1i=1∑N(xi−μ)2
—\ntheme: fancy\n—\n\n### 介绍\n\n提前获取意味着在数据呈现在屏幕之前获取到数据。本文中,你将学到,在路由更改前怎么获取到数据。通过本文,你将学会使用 resolver, 在 Angular App 中应用 resolver,应用到一个公共的预加载导航。\n\n### 你为什么应该使用 Resolver\n\nResolver 在路由跟组件之间扮演着中间件服务的角色。假设你有一个表单,没有数据时,你想向用户一个空的表单,当在加载用户数据时展示一个 loader,然后当数据返回时,填充表单并隐藏 loader。\n\n通常,我们都会在组件的 ngOnInit() 钩子函数中获取数据。也就是说,组件加载完之后,我们发起数据请求。\n\n在 ngOnInit() 中操作,我们需要在每个需要的组件加载后,在其路由页面中添加 loader 展示。Resolver 可以简化 loader 的添加使用。你可以只添加一个适用于每个路由的 loader,而不是每个路由中都添加 loader。\n\n本文将结合示例来解析 resolver 的知识点。以便于你可以牢记它并在项目中使用它。\n\n### 在应用中使用 Resolver\n\n为了在应用中使用 resolver,你需要准备一些接口。你可以通过 JSONPlaceholder 来模拟,而不需要自己开发。\n\nJSONPlaceholder 是一个很棒的接口资源,你可以借助它更好学习前端的相关概念而不被接口所约束。\n\n现在,接口的问题解决了,我们可以开始 resolver 的应用了。一个 resolver 就是一个中间件服务,所以我们将创建一个服务。\n\nbash\n ng g s resolvers/demo-resolver --skipTests=true\n\n\n> –skipTests=true 跳过生成测试文件\n\nsrc/app/resolvers 文件夹中创建了一个服务。resolver 接口中有一个 resolve() 方法,它有两个参数:route(ActivatedRouteSnapshot 的实例)和 state(RouterStateSnapshot 的实例)。\n\nloader 通常是在 ngOnInit() 中编写所有的 AJAX 请求,但是逻辑将会在 resolver 中实现,替代 ngOnInit()。\n\n接着,创建一个服务来获取 JSONPlaceholder 中列表数据。然后在 resolver 中底调用,接着在路由中配置 resolve信息,(页面将会等待)直到 resolver 被处理。在 resolver 被处理之后,我们可以通过路由来获取数据然后展示在组件中。\n\n### 创建服务并编写逻辑获取列表数据\n\nbash\n ng g class models/post --skipTests=true\n\n\npost.ts\n\ntypescript\nexport class Post {\n id: number;\n title: string;\n body: string;\n userId: string;\n}\n\n\nmodel 就绪,是时候获取帖子 post 的数据了。\n\npost.service.ts\n\ntypescript\nimport { Injectable } from "@angular/core";\nimport { HttpClient } from "@angular/common/http";\nimport { Post } from "../models/post";\n\n@Injectable({\n providedIn: "root"\n})\nexport class PostsService {\n constructor(private _http: HttpClient) {}\n\n getPostList() {\n let URL = "https://jsonplaceholder.typicode.com/posts";\n return this._http.get<Post[]>(URL);\n }\n}\n\n\n现在,这个服务随时可被调用。\n\ndemo-resolver.service.ts\n\ntypescript\nimport { Injectable } from "@angular/core";\nimport {\n Resolve,\n ActivatedRouteSnapshot,\n RouterStateSnapshot\n} from "@angular/router";\nimport { PostsService } from "..
!TIP二进制部署 k8s - 实用命令别名***转载请注明出处:https://janrs.com/6qdr有任何问题欢迎在底部评论区发言。k8s 命令别名部署期间不停的重启服务,查看日志,查看 k8s 部署情况。打命令打到手指断掉。一怒之下整理了常用命令别名。kubectl 常用命令别名cat > /etc/profile.d/kubectl_cmd_alias.sh <<EOF# 设置kubectl常用别名alias k='kubectl'alias kg='k get'alias kdl='k de
最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上最终选择了Grafana开源的Loki日志系统,下面介绍下Loki的背景。
文章目录 一、序列对称分解定理示例 1、序列对称分解定理 2、因果序列 3、求解过程 n < 0 情况 n = 0 情况 n > 0 情况 实因果序列的对称序列与原序列关系 一、序列对称分解定理示例 ---- 实因果序列 h(n) , 其 共轭对称序列 h_e(n) , 其 共轭反对称序列 h_o(n) , 找出 h(n) 与 h_e(n) 序列的关系 , h(n) 与 h_o(n) 序列的关系 ; 1、序列对称分解定理 任意一个 序列 x(n) , 都可以使用其 共轭对
An algorithm is a clearly specified set of simple instructions to be followed to solve a problem.
背景 Testng报告是否可以自定义,后面通过查找资料便有了如下自定义报告,testng中提供很多接口,如果需要改造成自己报告只要实现他们的接口即可,以下是根据自己想法实现如下自定义testng报告,
2023-07-11:给定正整数 n, 返回在 [1, n] 范围内具有 至少 1 位 重复数字的正整数的个数。 输入:n = 100。 输出:10。
Convert/Escapes an object to a JSON string 将solidity[2]源码转换为JSON字符串
如上图,由一堆"点"与一堆"边"构成的数据结构 ,就称为图,其中边上可以有方向(称为有向图),也可以无方向(称为无向图)。边上还可以有所谓的权重值。
最近遇到实例迁移的问题,数据迁完后还需要将数据库用户及权限迁移过去。进行逻辑备份时,我一般习惯将MySQL系统库排除掉,这样备份里面就不包含数据库用户相关信息了。这时候如果想迁移用户相关信息 可以采用以下三种方案,类似的 我们也可以采用以下三种方案来备份数据库账号相关信息。(本文方案针对MySQL5.7版本,其他版本稍有不同)
有效排列 是对有 n + 1 个在 0, n 范围内的整数的一个排列 perm ,使得对所有的 i:
learn from https://learn.deeplearning.ai/langchain
新年第一篇技术类的文章,应该算是算法方面的文章的。看标题:快速幂和矩阵快速幂,好像挺高大上。其实并不是很难,快速幂就是快速求一个数的幂(一个数的 n 次方)。
Backtracking 的 Tips: 排列问题 Permutations。第 46 题,第 47 题。第 60 题,第 526 题,第 996 题。 组合问题 Combination。第 39 题,第 40 题,第 77 题,第 216 题。 排列和组合杂交问题。第 1079 题。 N 皇后终极解法(二进制解法)。第 51 题,第 52 题。 数独问题。第 37 题。 四个方向搜索。第 79 题,第 212 题,第 980 题。 子集合问题。第 78 题,第 90 题。 Trie。第 208 题,第 2
前一段时间有个同学找到我,帮他完成了一个课程设计,由于他不是学计算机的么,懂得都懂,谁大一像码明这么苦逼啊!天天捣鼓这些,所以他给了我一定的报酬,我也就帮他完成了,过去1个多月了,也不会出现雷同课设,所以我想着现在把几个主要的思路来做一下复盘。
什么是互质 如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系(coprime)。比如,15和32没有公因子,所以它们是互质关系。这说明,不是质数也可以构成互质关系。
领取专属 10元无门槛券
手把手带您无忧上云