<#assign foo=ture /> //声明变量,插入布尔值进行显示
${foo?string(“yes”,“no”)} <#-- yes -->
大小比较符号使用需要注意:(xml的原因),可以用于比较数字和日期
使用lt、lte、gt和gte来替代<、<=、>和>= 也可以使用括号<#if (x>y)>
内置函数: 调用区别于属性的访问,使用?代替.
常见的一些内置函数
对于字符串
html-对字符串进行HTML编码
cap_first-使字符串第一个字母大写
lower_case-将字符串转换成小写
trim-去掉字符串前后的空白字符
示例:${“freeMarker”?cap_first}
对于Sequences(序列)
size-获得序列中元素的数目
对于数字
int-取得数字的整数部分(如-1.9?int的结果是-1)
对于集合,可以使用数组的方式,使用下标索引进行访问
逻辑判断:
if…
<#if condition>…
<#elseif condition2>…
<#elseif condition3>…
<#else>…
Boolean类型的空值判断
空值判断可以写成<#if book.name?? > //注意${}为变量的渲染显示,而<>为定义等操作符的定义
switch…
<#switch value>
<#case refValue1>
…
<#break>
<#case refValue2>
…
<#break>
…
<#case refValueN>
…
<#break>
<#default>
…
</#switch>
快速定义int区间的集合
<#assign l=0…100/> //注意不需要[]
3:循环读取集合: 注意/的使用
<#list student as stu>
${stu}
</#list>
与jstl循环类似,也可以访问循环的状态
item_index:当前变量的索引值
item_has_next:是否存在下一个对象 其中item名称为as后的变量名,如stu
集合长度判断
<#if student?size != 0></#if> 判断=的时候,注意只要一个=符号,而不是==
宏/模板
初步了解: 使用更像一个闭包closure,可以定义后,在脚本中任意地方引用,并原地起作用
<#macro greet>
Hello Joe!
</#macro>
使用的方式为:
<@greet>/@greet //同xml可以简写成<@greet/>
宏的参数定义,类似js,在宏名后 带参数进行传递定义
<#macro greet person color>
${person}
</#macro>
调用带参数时,注意使用类似XML的属性格式进行传递,不需要关心顺序问题
<@greet person=“Fred” color=“black”/>
参数默认值定义,如果没有,就必须要求传递完整的参数列表
<#macro greet person color=“black”>
Hello ${person}!
</#macro>
使用xml的嵌套内容进行传递宏调用,关键标签 <#nested>
<#macro border>
<#nested>
</#macro>
调用时:
<@border>The bordered text/@border
<#nested> 标签可以在宏中多次调用,也可以将多个宏组合进行嵌套
for循环的精简版:
<#list 1…count as x>
</#list>
宏的循环变量,配合嵌套标签进行参数传递,
<#macro repeat count>
<#list 1…count as x>
<#nested x, x/2, x==count> //这里的三个参数,将会传递到嵌套内容中
</#list>
</#macro>
<@repeat count=4 ; c, halfc, last>
${c}. ${halfc}<#if last> Last!</#if> //这里的内容由macro中的<#nested>进行参数的传递,传递的数量任意,当注意需要宏接受这些
上述还需要注意;的使用
参数的数量是可变的,并不要求全部都有,但是效果不同
在模板中定义变量
在模板中定义的变量有三种类型:
plain变量:可以在模板的任何地方访问,包括使用include指令插入的模板,使用assign指令创建和替换。
局部变量:在宏定义体中有效,使用local指令创建和替换。
循环变量:只能存在于指令的嵌套内容,由指令(如list)自动创建;宏的参数是局部变量,而不是循环变量
<#assign x = “plain”> //全局的plain变量
内部循环变量将会隐藏同名的外部循环变量
外部导入的使用,可以用于模块化,并且提供公用性
如:lib/my_lib.ftl文件
<#macro copyright date>
Copyright (C) ${date} Julia Smith. All rights reserved.
Email: ${mail}
</#macro>
<#assign mail = “jsmith@acme.com”>
lib/my_inc.ftl文件
<#import “/lib/my_test.ftl” as my>
<#assign mail=“fred@acme.com”>
<@my.copyright date=“1999-2002”/>
${my.mail}
${mail}
输出结果将不会出现冲突
对于库中的变量修改,使用in关键字
<#assign mail=“jsmith@other.com” in my>
函数定义:区别于宏对象,带返回值
<#function name param1 param2><#return val></#function>函数,有返回参数
stringA[M … N] 取子字符串,类似substring(stringA, M, N)
<#include “/copyright_footer.html”> 导入其他页面元素
跳槽是每个人的职业生涯中都要经历的过程,不论你是搜索到的这篇文章还是无意中浏览到的这篇文章,希望你没有白白浪费停留在这里的时间,能给你接下来或者以后的笔试面试带来一些帮助。
也许是互联网未来10年中最好的一年。WINTER IS COMING。但是如果你不真正的自己去尝试尝试,你永远不知道市面上的行情如何。这次找工作下来,我自身感觉市场并没有那么可怕,也拿到了几个大厂的offer。在此进行一个总结,给自己,也希望能帮助到需要的同学。
面试准备
面试准备根据每个人掌握的知识不同,准备的时间也不一样。现在对于前端岗位,以前也许不是很重视算法这块,但是现在很多公司也都会考。建议大家平时有空的时候多刷刷leetcode。算法的准备时间比较长,是一个长期的过程。需要在掌握了大部分前端基础知识的情况下,再有针对性的去复习算法。面试的时候算法能做出来肯定加分,但做不出来也不会一票否决,面试官也会给你提供一些思路。