FreeMarker
FreeMarker
官方文档 : FreeMarker Java Template Engine (apache.org)
中文文档 :中文官方参考手册 (foofun.cn)
FreeMarker是什么
FreeMarker基本语法
基本使用案例
FreeMarker是什么
如官方文档写的一般,FreeMarker是一款模板引擎:基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具
也就是说,基于FreeMarker,你可以对已有的模板进行“换皮”:修改特定的字段–把所有时间换位当天;添加特定的数据–依据传入快速生成列表等等
FreeMarker基本语法FreeMarker文件(FTL .ftl 文件)主要为以下四部分混合而成
文本:静态部分,会原封不动的输出
插值:会被替换掉的值,由 ${ } 中的对象属性值替换
默认值设置使用 !
${user!”用户为空”} user为空时返回 用户为空
内建函数使用?
${user_name?upper_case} 把user_name里面的全部字符转换为大写
$(u ...
Picocli
Picocli命令行工具命令行程序的几个优点
不依赖特地的图形界面,非常轻量
通常可以直接在操作系统自带的终端环境中运行
可以和用户交互,给用户输入引导和帮助手册
内置一些快捷操作(比如查看历史命令,上下切换命令)
命令的结构
command:命令类型,具体要做的事
option:选项,用于改变命令的行为
parameter:参数,传递给命令行工具的值
常见需求
generate 子命令:生成文件
list 子命令:查看要生成的原始文件列表信息
config子命令:查看允许用户传入的动态参数信息
SSO单点登录
SSO单点登录基本概念什么是SSO
SSO(Single Sign-On)单点登录是一种身份验证和授权机制,允许用户在多个相关但独立的软件系统中使用单组凭据(如用户名和密码)进行登录。用户只需登录一次,就可以访问所有经过SSO集成的应用程序,而无需为每个应用程序单独进行认证。
组成部分以及对应功能
用户:用户是SSO系统的最终使用者,通过提供凭据(如用户名和密码)进行身份验证,并获得对系统资源的访问权限。
身份提供者(Identity Provider, IdP):身份提供者是SSO系统的核心组件,负责管理用户的身份标识信息和认证过程。用户通过向身份提供者提供凭据来验证其身份,并获得访问令牌。
服务提供者(Service Provider, SP):服务提供者是依赖SSO系统的应用程序或服务,它们依赖IdP来验证用户身份。SP接收从IdP颁发的令牌,并使用该令牌来授权用户访问其资源。
令牌:令牌是在用户登录成功后由IdP签发的安全凭证,用于在用户与不同SP之间传递身份信息。常见的令牌类型包括SAML(Security Assertion Markup Language)、OAuth( ...
高频sql50题 —— step1:查询
查询训练hard: 0 medium:0 esay:5
1683. 无效的推文 - 力扣(LeetCode)
1148. 文章浏览 I - 力扣(LeetCode)
595. 大的国家 - 力扣(LeetCode)
584. 寻找用户推荐人 - 力扣(LeetCode)
1757. 可回收且低脂的产品 - 力扣(LeetCode)
无效的推文 – Esay表:Tweets
+----------------+---------+
| Column Name | Type |
+----------------+---------+
| tweet_id | int |
| content | varchar |
+----------------+---------+
在 SQL 中,tweet_id 是这个表的主键。
这个表包含某社交媒体 App 中所有的推文。
查询所有无效推文的编号(ID)。当推文内容中的字符数严格大于 15 时,该推文是无效的。
以任意顺序返回结果表。
查询结果格式如下所示:
示例 1:
输入:
Twe ...
归并排序
归并排序逻辑归并排序(Merge Sort)是一种经典的排序算法,它使用分治思想将一个大问题分解为多个小问题,在递归过程中将这些小问题的答案合并成一个整体解决大问题。
具体来说,归并排序的步骤如下:
分解:将要排序的数组分解成两个子数组,直到每个子数组只有一个元素为止。
解决:对每个子数组进行排序,可以使用任何排序算法,通常使用归并排序本身递归地对子数组进行排序。
合并:将两个排好序的子数组合并成一个有序的数组。
在第一阶段中,将数组不断分割,直到每个子数组包含一个元素。这个阶段不会产生任何比较和交换操作,因此时间复杂度为 O(n)。
在第二阶段中,我们需要将每个子数组进行排序。由于每个子数组都已经是有序的,我们可以使用归并排序算法的特性——合并两个有序数组——来完成排序过程。由于每个子数组的大小为 n/2,因此排序时间复杂度为 O(nlogn)。
在第三阶段中,我们需要将两个排好序的子数组合并成一个有序的数组。这个过程需要创建一个临时的数组来存储结果,并且需要进行比较和移动元素的操作。因此时间复杂度为 O(n)。
整个排序过程的时间复杂度是 O(nlogn),空间复杂度 ...
Java8新特性Stream
Stream什么是stream流Stream(流)是一个来自数据源的元素队列,在管道中传输,支持聚合操作,也可以在管道的节点上进行处理(筛选,排序,聚合等)。可以把它理解为集合的一种抽象形式,将集合转换为流,会提供一种固定的顺序来处理集合元素。
流可以做到:
支持链式操作:允许通过链式调用多个方法对元素进行处理,使代码更具可读性,更易维护
延迟执行:只有在需要结果时才会触发实际计算,这种延迟执行可以提高性能,避免不必要的计算
函数式编程:提倡函数式编程的思想,提供了丰富的中间操作(过滤,排序等)和终端操作(收集,计数等)
并行处理:流框架支持并行流,更加方便的将流操作并行化
简化代码:减少循环时的条件判断与临时变量,提高代码表达力和可读性
stream与遍历的区别
遍历:
遍历是指通过循环逐个访问集合中的元素。
遍历需要显式地编写循环代码来处理集合元素。
遍历通常会暴露底层数据结构,使得代码的可读性和维护性较差。
遍历过程中,开发人员需要手动管理迭代器或索引来访问集合元素。
流:
流是一种更高级、更函数式的数据处理方式,提供了丰富的操作方法来处理集合元素。
流操作是基于管道模式 ...
工作记录
工作记录前言
“只有失去所有的退路之后,才能真正地开始。” —《子夜》茅盾
五个月前,我离开了学校的大门。两个月前,我踏上了深圳的地铁。
这两个月的时间就像一场精彩绝伦的冒险,我仿佛置身于人生的前沿
在实习的公司里,我感触良多。从最初的紧张不安到逐渐适应,每天都是一次次的成长之旅。我与优秀的团队成员们共同工作。每一次解决问题的过程都给我带来无尽的乐趣,让我感受到了专业知识的力量。
然而,这段旅程也充满了离别的苦涩。离开家乡,我踏上了自己的独立之路,学会了照顾自己、独立思考和处理各种琐事。与父母的每一次电话成为我心灵的慰藉,也是我对他们深深的思念和感激之情的表达。
这两个月的工作总结,见证了我从学生到职场新人的成长。毕业、离家、实习,这三个关键词串联起了我的青春故事。它们是我前进的动力,也是我不断追求梦想的源泉。我相信,未来的道路将更加绚丽多彩,期待着更多挑战和机遇的到来。让我们一起勇敢迈出每一步,开启属于自己的精彩篇章!
工作内容复盘
大学管理系统项目运维
数据同步等异常修改
述职汇报的收获
网上商城项目跟进,记录
我的进步
对分布式项目有了基本的了解
...
NVM:node管理工具
NVM: node管理工具基本概念什么是NVM:
NVM安装常见命令下载nodejs
nvm install [ version ] ===>> nvm install 16.13.0
查看已有nodejs
nvm list
切换nodejs版本
nvm use [ version ] ===>> nvm use 12.12.0
卸载已有nodejs
nvm uninstall [ version ] ===>> nvm uninstall 16.13.0
Nacos入门
Nacos入门搭建环境下载地址:Releases · alibaba/nacos (github.com) 下载二进制压缩文件(tar.gz)
前往nacos/bin目录下打卡命令行,输入命令开启nacos:
startup.cmd -m standalone
nacos本地登录页面:http://localhost:8848/nacos || 用户名和密码都是:nacos
案例实践配置管理服务注册