freemarker

news2024/11/15 14:02:21

文章目录

  • 创建项目
    • 引入依赖
    • 创建配置文件
    • 创建启动类和测试类
  • 语法
    • list
    • Map
    • if
    • 运算符
    • 处理空值
      • 使用`??`
      • 指定缺失变量默认值
  • 内建函数
    • 集合长度
    • 数据类型
    • 布尔值
    • 时间类型
    • 数值类型
    • 字符串类型
    • sequence序列类型
    • hash类型
  • 常见指令
    • assign自定义变量指令
    • json转成对象
  • 实例
    • list通过下标取值
    • map取值通过list的对象取

创建项目

引入依赖

创建一个maven项目,然后引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.wzw</groupId>
    <artifactId>springboot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.7</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

创建配置文件

配置端口号和模板位置,以及跳转的后缀

server:
  port: 3031
spring:
  freemarker:
    cache: false  #关闭模板缓存
    template-loader-path: classpath:/templates
    suffix: .ftl

创建启动类和测试类

实体类

package com.wzw.springboot.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {

    private String name;

    private Integer age;

    private String phone;

    private String address;

}

启动类

package com.wzw.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }

}

controller类

package com.wzw.springboot.controller;

import com.wzw.springboot.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Map;

/**
 * 不要使用RestController,freemarker是需要跳转到对应的ftl,如果使用RestController,就会被转成json,跳转不过去了
 */
@Controller
@RequestMapping("/free")
public class FreemarkerController {

    /**
     * @param map 这个map最后会响应给用户,ftl中就可以通过这个map取到值
     * @return
     */
    @RequestMapping("/index")
    public String hello(Map<String,Object> map){
        map.put("user",new User("张三",10,"13333333333","一号胡同"));
        return "hello";
    }
}



创建ftl,也就是模板,因为配置文件中配置了它的位置是/templates下,所以我们放在resources下的templates中
在这里插入图片描述

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>ftl测试</title>
    </head>

    <body>

        <#-- 获取map中的值-->
        hello ${user.name}

    </body>
</html>

然后启动测试,成功访问并取到值
在这里插入图片描述

语法

注释:
html的注释是<!-- -->,而freemarker的注释是<#-- -->,注释中的内容会被freemarker忽略

插值:
freemarker使用${}插值,用真实值替换${},例如${user.name}中的值被map中的值替换
在这里插入图片描述
FTL指令:
freemarker会解析标签中的逻辑或表达式

文本:
仅文本信息,直接输出内容

list

数据模型中存值

    @RequestMapping("/test1")
    public String test1(Map<String,Object> map){
        User user1 = new User("张三1", 10, "13333333333", "1号胡同");
        User user2 = new User("张三2", 20, "00000000001", "2号胡同");
        User user3 = new User("张三3", 30, "000000000022", "3号胡同");
        User user4 = new User("张三4", 40, "00000000003", "4号胡同");

        List<User> users=new ArrayList<>();
        users.add(user3);
        users.add(user4);

        //list放在数据模型中
        map.put("users",users);

        HashMap<String, User> userMap=new HashMap<>();

        userMap.put("user1",user1);
        userMap.put("user2",user2);

        //map放在数据模型中
        map.put("userMap",userMap);

        return "test1";
    }

ftl中取值

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>test1</title>
    </head>

    <body>

        遍历数据模型中的list数据(数据模型中key为users)
        <table>
            <tr>
                <td>序号</td>
                <td>姓名</td>
                <td>年龄</td>
                <td>电话</td>
                <td>地址</td>
            </tr>
            <#list users as user>
                <tr>
                    <#-- _index获取下标-->
                    <td>${user_index}</td>
                    <td>${user.name}</td>
                    <td>${user.age}</td>
                    <td>${user.phone}</td>
                    <td>${user.address}</td>
                </tr>
            </#list>
        </table>


    </body>
</html>

在这里插入图片描述

Map

        获取数据模型中的userMap
        <br/>
        第一种方法,在map后 [key]
        <br/>
        姓名:${userMap['user1'].name}
        <br/>
        地址:${userMap['user1'].address}
        <br/>
        第二种方法,map后 .key
        <br/>
        姓名:${userMap.user2.name}
        <br/>
        地址:${userMap.user2.address}

        <br/>
        <hr>
        遍历map中的key
        <br/>
        <#list userMap?keys as key>
            ${key}
            <br/>
        </#list>
        遍历map中的value
        <br/>
        <#list userMap?values as value>
            ${value}
            <br/>
        </#list>
        通过key遍历值,这里只能通过[]的方式
        <br/>
        <#list userMap?keys as key>
            ${userMap[key].name}
            <br/>
        </#list>

在这里插入图片描述

if

            <#list users as user>
                <tr <#if user.age==30>style="color: red"</#if>  >
                    <#-- _index获取下标-->
                    <td>${user_index}</td>
                    <td>${user.name}</td>
                    <td>${user.age}</td>
                    <td>${user.phone}</td>
                    <td>${user.address}</td>
                </tr>
            </#list>

生效了

在这里插入图片描述

运算符

  • 算术运算符

freemarker中支持算术运算符:+ - * / %

  • 逻辑运算符
    && 并且
    || 或者
    !
  • 比较运算符
    =或== 判断两个值是否相等
    != 判断两个之是否不相等
    >或gt 大于
    >=或gte大于等于
    <或lt小于
    <=或lte小于等于
    使用大于的比较运算符<#if user.age > 30>报错
    在这里插入图片描述
    换成<#if user.age gt 30>或者使用括号包起来<#if (user.age > 30)>
    在这里插入图片描述

处理空值

不要给users存储值,报错
在这里插入图片描述

使用??

取值时候提前判断非空
使用??,如果存在就是true,如果不存在,就是false

            <#if users??>
                <#list users as user>
                    <tr <#if (user.age > 30)>style="color: red"</#if>  >
                        <#-- _index获取下标-->
                        <td>${user_index}</td>
                        <td>${user.name}</td>
                        <td>${user.age}</td>
                        <td>${user.phone}</td>
                        <td>${user.address}</td>
                    </tr>
                </#list>
            </#if>

判断非空后,因为空值,所以没有输出,但是也没有报错了
在这里插入图片描述

        使用 ?? 判断字符串是否为空;返回布尔类型。如果想要输出,需要将布尔类型转换成字符串 :
        ${(name??)?string}<br>

指定缺失变量默认值

如果一个变量不存在或者null,就要报错,使用!指定一个默认值,如果!后面没有设置值,就显示空

        空值:${dept!}
        <br/>
        部门:${dept!'123'}
        <br/>
        部门名称:${(dept.name)!'456'}

在这里插入图片描述

内建函数

内建函数语法: 变量 + ? + 函数名

集合长度

users的长度${users?size}

在这里插入图片描述

数据类型

  • 布尔型:类似Java 的 Boolean 类型,不能直接输出,要转为字符串输出
  • 日期型:类似 java 的 Date 类型,不能直接输出,要转为字符串输出
  • 数值型:类似 java 中的 int,float,double 等
  • 三种显示形式:数值型(默认)、货币型、百分比型
  • 字符型:类似java 中的字符串,有很多内置函数
  • sequence :类似java 中的数组,list,set 等集合类型
  • hash:类似 java 中的 Map

布尔值

controller

        //boolean存值
        model.put("boolValue",true);

ftl:

        <h1>布尔类型</h1>

<#--            数据类型:布尔类型
                freemarker中布尔类型不能直接输出;如果输出要先转成字符串
                方式一:?c
                方式二:?string  ?string("true时的文本","false时的文本")-->

<#--        直接输出-->

        ${boolValue?c}<br>
        ${boolValue?string}<br>
<#--        true显示yes,false显示no-->
        ${boolValue?string("yes","no")}<br>

时间类型

controller:

        //日期存值
        model.put("time",new Date());

ftl:

        <h1>时间类型</h1>
        <#--
            数据类型:日期类型
                在freemarker中日期类型不能直接输出;如果输出要先转成日期型或字符串
                1. 年月日 ?date
                2. 时分秒 ?time
                3. 年月日时分秒 ?datetime
                4. 指定格式 ?string("自定义格式")
                    y:年 M:月 d:日
                    H:时 m:分 s:秒
        -->
        当前时间.now:${.now}
        <br/>
        年 月 日<br/>${time?date}
        <br/>
        时 分 秒<br/>${time?time}
        <br/>
        日期+时间<br/>${time?datetime}
        <br/>
        自定义格式化:
        <br/>
        ${time?string("yyyy年MM月")}
        <br/>
        ${time?string("yyyy年MM月dd日 HH:mm:ss")}

在这里插入图片描述

数值类型

controller:

        //数值类型
        model.put("money",1546884512f);

        model.put("age",10);

        model.put("score",99.99);

ftl:

        <h1>数值类型</h1>
        <#--
            数据类型:数值类型
                freemarker可以直接输出数值类型
                1. 转字符串
                    普通字符串 ?c
                    货币型字符串 ?string.currency
                    百分比型字符串 ?string.percent
                2. 保留浮点型数值指定小数位(#表示一个小数位)
                    ?string["0.##"]
        -->
         直接输出数值型:
        ${age} <br>
        ${money} <br>
        ${score} <br>
         数值转字符串输出:
        ${money?c} <br>
         数值转成货币类型的字符串输出:
        ${money?string.currency} <br>
         数值转百分比类型的字符串输出:
        ${score?string.percent} <br>
         浮点型数值保留指定小数位输出 (##表示保留两位小数):
        ${score?string["0.##"]} <br>

在这里插入图片描述

字符串类型

controller

        //字符串类型
        model.put("name","zhangsan");
        model.put("city","hulunbeierdacaoyuan");

ftl:

        <h1>字符串类型</h1>
        <#--
            数据类型:字符串类型
                freemarker可以直接输出字符串类型
                1. 截取字符串(左闭右开) ?substring(start,end)
                2. 首字母小写输出 ?uncap_first
                3. 首字母大写输出 ?cap_first
                4. 字母转小写输出 ?lower_case
                5. 字母转大写输出 ?upper_case
                6. 获取字符串长度 ?length
                7. 是否以指定字符开头(boolean类型) ?starts_with("xx")?string
                8. 是否以指定字符结尾(boolean类型) ?ends_with("xx")?string
                9. 获取指定字符的索引 ?index_of("xx")
                10. 去除字符串前后空格 ?trim
                11. 替换指定字符串 ?replace("xx","xx")
        -->
         直接输出 :
        ${name} - ${city} <br>
        ${name?string} - ${city?string} <br>
         1. 截取字符串 ?substring(start,end) 下标0开始截取5个字符串:
        ${city?substring(0,5)} <br>
         2. 首字母小写输出 ?uncap_first :
        ${name?uncap_first} <br>
         3. 首字母大写输出 ?cap_first  :
        ${city?cap_first} <br>
         4. 字母转小写输出 ?lower_case  :
        ${name?lower_case} <br>
         5. 字母转大写输出 ?upper_case  :
        ${name?upper_case} <br>
         6. 获取字符串长度 ?length  :
        ${name?length} <br>
         7. 是否以指定字符开头(boolean类型) ?starts_with("z")?string  :
        ${name?starts_with("z")?string} <br>
         8. 是否以指定字符结尾(boolean类型) ?ends_with("n")?string  :
        ${name?ends_with("n")?string} <br>
         9. 获取指定字符的索引,找不到就是-1 ?index_of("g")  :
        ${name?index_of("g")} <br>
         10. 去除字符串前后空格显示字符串的长度 ?trim  :
        ${name?trim?length} <br>
         11. 替换指定字符串 ?replace("a","l")  :
        ${name?replace("a","l")}<br>

在这里插入图片描述

sequence序列类型

controller:

        //序列类型(list、set、数组)
        // 数组操作
        String[] stars = new String[]{"张三","李四","王五","赵六"};
        model.put("names",stars);
        // List操作
        List<String> citys = Arrays.asList("北京","上海","广州","深圳");
        model.put("citys",citys);
        // JavaBean集合
        List<User> userList = new ArrayList<>();
        userList.add(new User("张三1", 10, "13333333333", "1号胡同"));
        userList.add(new User("张三2", 20, "23333333333", "2号胡同"));
        userList.add(new User("张三3", 30, "33333333333", "3号胡同"));
        model.put("users",userList);

ftl:

        <h1>序列类型</h1>
        <#--
            数据类型:序列类型 (数组、List、Set)
                通过list指令输出序列
                    <#list 序列名 as 元素名>
                        ${名称}
                    </#list>
                获取序列长度 ${序列名?size}
                获取序列元素下标 ${元素名?index}
                获取第一个元素 ${序列名?first}
                获取最后一个元素 ${序列名?last}
                倒序输出 序列名?reverse
                升序输出 序列名?sort
                降序输出 序列名?sort?reverse
                指定字段名排序 序列名?sort_by("字段名")
        -->
        <#-- 数组操作 -->
        <#list names as name>
            下标:${name?index} -- 名字:${name} <br>
        </#list>
        数组的长度:${names?size} <br>
        <#-- 获取第一个元素 -->
        第一个元素:${names?first} <br>
        <#-- 获取最后一个元素 -->
        最后一个元素:${names?last} <br>
        <hr>
        <#-- List操作 -->
        <#list citys as city >
            ${city} <br>
        </#list>
        List的size:${citys?size} <br>
        <#-- 倒序输出 -->
        <#list citys?reverse as city >
            ${city} -
        </#list>
        <br>
        <#-- 升序输出 -->
        <#list citys?sort as city >
            ${city} -
        </#list>
        <br>
        <#-- 降序输出 -->
        <#list citys?sort?reverse as city >
            ${city} -
        </#list>
        <hr>
        <#-- List<User>集合 -->
        <#list users as user>
            编号:${user_index}&nbsp;&nbsp;
            姓名:${user.name}&nbsp;&nbsp;
            年龄:${user.age}&nbsp;&nbsp;
            <br>
        </#list>
        <#-- 按照指定字段名排序 -->
        <#list users?sort_by("age") as user>
            ${user.name} |
        </#list>

在这里插入图片描述

hash类型

controller:

        //hash类型
        // Map操作
        Map<String,String> userMap = new HashMap<>();
        userMap.put("zhangsan","张三");
        userMap.put("lisi","李四");
        userMap.put("wangwu","王五");
        model.put("userMap",userMap);

ftl:

        <h1>hash类型</h1>
        <#--
            数据类型:hash类型
                key遍历输出
                    <#list hash?keys as key>
                        ${key} -- ${hash[key]}
                    </#list>
                value遍历输出
                    <#list hash?values as value>
                        ${value}
                    </#list>
        -->
        <#-- key遍历输出 -->
        <#list userMap?keys as key>
            ${key} -- ${userMap[key]} <br>
        </#list>
        <#-- value遍历输出 -->
        <#list userMap?values as value>
            ${value} |
        </#list>

在这里插入图片描述

常见指令

assign自定义变量指令

        <h1>assign指令</h1>
        <#--
            assign 自定义变量指令
                语法:
                    <#assign 变量名=>
                    <#assign 变量名= 变量名=> (定义多个变量可以用空格隔开)
        -->
        <#assign str="hello">
        ${str} <br>
        <#assign num=1 names=["zhangsan","lisi","wangwu"] >
        通过逗号分割数组,变成字符串:
        ${num} -- ${names?join(",")}

在这里插入图片描述

json转成对象

assign标签,作用是定义一个变量

实例

list通过下标取值

names和depts都是list

<#list depts as dept>
	//当前下标
	<td>${dept_index}</td>
	//获取当前下标的,dept中的name值
	<td>${dept.name的值}</td>
	//获取names中的,跟当前dept一样的下标的name值
	<td>${names[dept_index].name}</td>
</#list>

map取值通过list的对象取

map可以使用当前循环的list的对象取值,在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/71321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「Redis数据结构」集合对象(Set)

「Redis数据结构」集合对象&#xff08;Set&#xff09; 文章目录「Redis数据结构」集合对象&#xff08;Set&#xff09;一、概述二、结构三、编码转换四、小结一、概述 Set是Redis中的单列集合&#xff0c;其特点为不保证有序性、保证元素唯一、可以求交集、并集、差集。 从…

Python入门自学进阶-Web框架——28、DjangoAdmin项目应用-只读字段与后端表单验证

有时候&#xff0c;记录的某些字段在生成后就不允许再修改了&#xff0c;这时前端只能显示&#xff0c;不能修改。这时&#xff0c;可在AdminClass中进行设置&#xff1a;readonly_fields[字段名&#xff0c;字段名&#xff0c;。。。]&#xff0c;前端格式就显示成只显示不能修…

联想电脑怎么录屏?这3个方法,轻松解决

录屏是现在最常见的办公功能之一&#xff0c;最近有朋友问联想电脑怎么录屏。联想电脑是使用Windows系统的。如果想用联想电脑录屏&#xff0c;可以使用Windows系统自带了的录屏软件进行录屏。下面小编将详细的介绍3个方法&#xff0c;解决联想电脑怎么录屏的问题&#xff0c;感…

8086寻址方式图解

目录 1&#xff1a;立即寻址 2&#xff1a;寄存器寻址 3&#xff1a;直接寻址&#xff08;存储器直接寻址&#xff09; 4&#xff1a;寄存器间接寻址&#xff08;重点&#xff09; 5&#xff1a;基址寻址&#xff08;相对寻址&#xff09; 6&#xff1a;变址寻址 &#x…

后端程序员必备的Linux基础知识+常见命令(2023年最新版教程)

文章目录[1. 从认识操作系统开始](https://link.juejin.cn?targethttps%3A%2F%2Fsnailclimb.gitee.io%2Fjavaguide%2F%23%2Fdocs%2Foperating-system%2Flinux%3Fid%3D_1-%E4%BB%8E%E8%AE%A4%E8%AF%86%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%A7%8B)[1.1. 操作系统简…

【与达梦同行】数据库coredump的配置方式与截断测试

一、简述 Core的意思是内存, Dump的意思是扔出来, 堆出来.开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成。在国产操作系统麒麟V10中运维的时候&#xff0c;经常遇见一个问…

一、OpenAI ChatGPT 注册使用

文章目录注册购买openai的官网问题今天早上在sheep公众号里面看到了关于openai 旗下研发的chatgpt的产品&#xff0c;去到chatgpt的网页&#xff0c;我们可以看到他的标语。ChatGPT: Optimizing Language Models for Dialogue 哈哈&#xff0c;我百度了一下&#xff0c;大概意…

文教资料杂志文教资料杂志社文教资料编辑部2022年第17期目录

语言文学研《文教资料》投稿&#xff1a;cn7kantougao163.com 从MRC认知模型看《释大》中的同源关系 苏楚然; 1-4 徐志摩《再别康桥》英译本对比分析——基于许渊冲诗译的“三美论” 牟逸飞;梁楚涵; 5-9 严歌苓小说“笑”书写的语言修辞学视角分析 孙婷婷; 10-12 …

得物云原生全链路追踪Trace2.0-采集篇

一、0xcc开篇 2020年3月&#xff0c;得物技术团队在三个月的时间内完成了整个交易体系的重构&#xff0c;交付了五彩石项目&#xff0c;业务系统也进入了微服务时代。系统服务拆分之后&#xff0c;虽然每个服务都会有不同的团队各司其职&#xff0c;但服务之间的依赖也变得复杂…

学1个月爬虫就月赚6000?别被骗了,老师傅告诉你爬虫的真实情况!

用爬虫赚外快的事情我也干了很多年&#xff0c;爬虫自然不在话下。 那么今天我来说说5个深入一点的爬虫问题&#xff0c;让你清楚爬虫的真实情况&#xff1a; 1.现在的爬虫接单真能1个月赚6000的快外&#xff1f; 2.初级爬虫只能接一些小单&#xff0c;怎样才算初级爬虫水平&…

Kafka ui 搭建以及使用

Kafka ui 序 kafka 本身没有自带相关的 ui 界面&#xff0c;但是很多时候没有页面意味着只有使用命令行进行相关操作如创建 topic、更改 topic 信息、重置 offset 等等。但实际使用中这种效果很差劲&#xff0c;我们一般还是会借助其他软件&#xff0c;实现对 kafka 的页面管…

windows服务器搭建原神私服教程(附客户端+服务端+环境配置)

今天给大家带来的是windows服务器搭建原神私服的教程&#xff0c;服务端搭建于私人windows服务器&#xff0c;客户端支持情况&#xff1a;PC、iOS支持国服 /国际服均可&#xff0c;Android仅支持国际服。本篇文章附有客户端和服务端环境配置文件&#xff0c;请大家按需下载使用…

MobileNet v1神经网络剖析

本文参考: MobileNet网络_-断言-的博客-CSDN博客_mobile-ne Conv2d中的groups参数&#xff08;分组卷积&#xff09;怎么理解&#xff1f; 【分组卷积可以减少参数量、且不容易过拟合&#xff08;类似正则化&#xff09;】_马鹏森的博客-CSDN博客_conv groups Pytorch Mobil…

阿里巴巴正式开源云原生应用脚手架

12 月 3 日&#xff0c;微服务 x 容器开源开发者 Meetup 上海站上&#xff0c;阿里云智能技术专家&#xff0c;云原生应用脚手架项目负责人良名宣布阿里巴巴云原生应用脚手架项目正式开源&#xff0c;并在现场做了相关内容介绍。本次开源的云原生应用脚手架是一款基于 Spring I…

监控Kubernetes集群证书过期时间的三种方案

前言 Kubernetes 中大量用到了证书, 比如 ca证书、以及 kubelet、apiserver、proxy、etcd等组件&#xff0c;还有 kubeconfig 文件。 如果证书过期&#xff0c;轻则无法登录 Kubernetes 集群&#xff0c;重则整个集群异常。 为了解决证书过期的问题&#xff0c;一般有以下几…

关于“堆”,看看这篇文章就够了(附堆的两种应用场景)

… &#x1f4d8;&#x1f4d6;&#x1f4c3;本文已收录至&#xff1a;数据结构 | C语言 更多知识尽在此专栏中!文章目录&#x1f4d8;前言&#x1f4d8;正文&#x1f4d6;认识堆&#x1f4d6;实现堆&#x1f4c3;结构&#x1f4c3;入堆&#x1f4c3;出堆&#x1f4c3;建堆算法…

新Crack:Neodynamic ZPLPrinter SDK for .NET Standard

适用于 .NET Standard V4.0.22.1206 的 Neodynamic ZPLPrinter Emulator SDK 添加对带有自定义字体设置的 ^BC 命令的支持。2022 年 12 月 7 日 - 16:03新版本特征 添加了对带有自定义字体设置的 ^BC 命令的支持。关于 Neodynamic ZPLPrinter Emulator SDK for .NET Standard 使…

在r语言中使用GAM(广义相加模型)进行电力负荷时间序列分析

广义相加模型&#xff08;GAM&#xff1a;Generalized Additive Model&#xff09;&#xff0c;它模型公式如下&#xff1a;有p个自变量&#xff0c;其中X1与y是线性关系&#xff0c;其他变量与y是非线性关系&#xff0c;我们可以对每个变量与y拟合不同关系&#xff0c;对X2可以…

动态规划入门

一、基本思想 一般来说&#xff0c;只要问题可以划分成规模更小的子问题&#xff0c;并且原问题的最优解中包含了子问题的最优解&#xff0c;则可以考虑用动态规划解决。动态规划的实质是分治思想和解决冗余&#xff0c;因此&#xff0c;动态规划是一种将问题实例分解为更小的、…

JAVA SCRIPT设计模式--结构型--设计模式之FlyWeight享元模式(11)

JAVA SCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVA SCRIPT语言来实现主体功能&#xff0c;所以不可能像C&#xff0c;JAVA等面向对象语言一样严谨&#xff0c;大部分程序都附上了JAVA SCRIPT代码&#xff0c;代码只是实现了设计模式的主体功能&#xff0c;不代…