这是我收集的一些学习velocity的材料,有些来自网上,其实有些我不是很懂,在这里弄出来,不仅仅作为以后的参考,也是想与大家一起讨论,学习。(*^__^*) 嘻嘻……
Velocity Template Language(VTL):VTL意味着提供最简单、最容易并且最整洁的方式合并页面动态内容。
VTL使用references来在web site内嵌套动态内容,一个变量就是一种类型的reference。变量是某种类型的refreence,它可以指向java代码中的定义,或者从当前 页面内定义的VTL statement得到值。下面是一个VTL statement的例子,它可以被嵌套到HTML代码中:
#set ( $a = “Velocity” );
和所有的VTL statement一样,这个statement以#字符开始并且包含一个directive:set。当一个在线用户请求你的页面时,Velocity Templating Engine将查询整个页面以便发现所有#字符,然后确定哪些是VTL statement,哪些不需要VTL作任何事情。
#字符后紧跟一个directive:set时,这个set directive使用一个表达式(使用括号封闭)――一个方程式分配一个值给变量。变量被列在左边,而它的值被列在右边,最后他们之间使用=号分割。
在上面的例子中,变量是$a,而它的值是Velocity。和其他的references一样以$字符开始,而值总是以双引号封闭。Velocity中仅有String类型可以被赋值给变量。
记住以下的规则:
使用$字符开始的references用于得到什么(变量);使用#字符开始的directives用于作些什么。
References
在VTL中有三种类型的references:变量(variables)、属性(properties)、方法(methods)。作为一个使 用VTL的页面设计者,你和你的工程师必须就references的名称达成共识,以便你可以在你的template中使用它们。
Everything coming to and from a reference被作为一个String对象处理。如果有一个对象$foo是一个Integer对象,那么Velocity将调用它的toString()方法将这个对象转型为String类型。
变量:
格式要求同java。
属性:
例子:
$customer.Address
$purchase.Total
$customer.Address有两种含义。它可以表示:查找hashtable对象customer中以Address为关键字的值;也可以表示调 用customer对象的getAddress()方法。当你的页面被请求时,Velocity将确定以上两种方式选用那种,然后返回适当的值。
方法:
一个方法就是被定义在java中的一段代码,并且它有完成某些有用工作的能力,例如一个执行计算和判断条件是否成立、满足等。方法是一个由$开始并跟随VTL标识符组成的References,一般还包括一个VTL方法体.
$page.setTitle( “My Home Page” )
属性与方法的区别:
前两个例子$customer.getAddress()和$purchase.getTotal()看起来挺想上面的属性$customer.Address 和 $purchase.Total。如果你觉得他们之间有某种联系的话,那你是正确的。
相同点:VTL属性可以作为VTL方法的缩写。$customer.Address属性和使用$customer.getAddress()方法具有相同的效果。如果可能的话使用属性的方式是比较合理的。
不同点: 属性和方法的不同点在于你能够给一个方法指定一个参数列表。
reference的正是格式如下:
${mudSlinger} 变量
${customer.Address} 属性
${purchase.getTotal()} 方法
非正式格式与正式格式的区别:
$person --> 非正式格式
${person} --> 正式格式
quiet格式:
当页面的form被初始加载时,变量$email还没有值,这时你肯定是希望它能够显示一个blank text来代替输出”$email”这样的字段。那么使用quiet reference notation就比较合适。 这样文本框的初始值就不会是email而是空值了。 正式和quiet格式的reference notation也可一同使用,像下面这样:
$符号和#符号的讲解:
在VTL中使用$2.5这样的货币标识是没有问题得的,VTL不会将它错认为是一个reference,因为VTL中的reference总是以一个大写或者小写的字母开始。
VTL中使用“\”作为逃逸符(类似于java中的转义符)。
例如:
#set( $email = “foo” ) $email \$email \\$email \\\$email
渲染(render)后:
foo $email \foo \\$email
如果email变量没有被定义
例如:
$email
\$email
\\$email \\\$email
渲染后:
$email
\$email
\\$email
\\\$email
注意 :VTL中未被定义的变量将被认为是一个字符串,所以以下例子:
#set( $foo = “gibbous” )
$moon = $foo
的输出结果是:
$moon = gibbous
现在你已经对reference比较熟悉了,你可以将他们高效的应用于你的template了。Velocity利用了很多java规范以方便了设计人员的使用。例如:
$foo
$foo.getBar()
## is the same as
$foo.Bar
或者:
$data.getUser(“jon”)
## is the same as
$data.User(“jon”)
还或者是:
$data.getRequest().getServerName()
## is the same as
$data.Request.ServerName
## is the same as
${data.Request.ServerName}
但是,注意VTL中不会将reference解释为对象的实例变量。
例如:$foo.Name将被解释为Foo对象的getName()方法,而不是Foo对象的Name实例变量。
Directives
Reference允许设计者使用动态的内容,而directive使得你可以应用java代码来控制你的显示逻辑,从而达到你所期望的显示效果。
#set directive被用于设置一个reference的值。例如:
#set ( $primate = “monkey” ) ;
赋值左侧的(
LHS )必须是一个变量或者属性reference。右侧(RHS)可以是以下类型中一种:
l 变量reference
l String literal
l 属性reference
l 方法reference
l number literal
l ArrayList
下面是应用各种类型的RHS的例子:
#set ( $monkey = $bill ) ##变量reference
#set ( $monkey.Friend = “monica” ) ##String literal
#set ( $monkey.Blame = $whitehouse.Leak )##属性reference
#set ( $monkey.Plan = $spindoctor.weave($web) )##方法reference
#set ( $monkey.Number = 123 )##Number literal
#set ( $monkey.Say = [“Not”, $my, “fault”] )##ArrayList //取值: monkey.Say.get(0)
RHS也可以是一个简单的算术表达式:
#set ( $value = $foo + 1 )
#set ( $value = $bar -1 )
#set ( $value = $foo * $bar )
#set ( $value = $foo / $bar )
如果RHS为空的情况:
如果你的RHS是一个null,VTL的处理将比较特殊:它将指向一个已经存在的reference,这对初学者来讲可能是比较费解的。例如:
#set ( $resut = $query.criteria(“name”) )
The result of the first query is $result //第一次查询后给$result对象赋值
#set ( $resut = $query.criteria(“address”) )
The result of the second query is $result
//第二次查询后给$result对象赋值
如果$query.criteria(“name”)返回一个“bill”,而$query.criteria(“address”)返回的是null,则显示的结果如下:
The result of the first query is bill
The result of the first query is bill
例如:
看看下面的例子:
#set( $criteria = ["name", "address"] )
#foreach( $criterion in $criteria )
#set( $result = $query.criteria($criterion) )
#if( $result )
Query was successful
#end
#end
在上面的例子中,程序将不能智能的根据$result的值决定查询是否成功。在$result被#set后(added to the context),它不能被设置回null(removed from the context)。打印的结果将显示两次查询结果都成功了,但是实际上有一个查询是失败的。
使用预定义的方式解决上述问题:
为了解决以上问题我们可以通过预先定义的方式:
#set( $criteria = [“name”, “address”] )
#foreach( $criterion in $criteria )
#set( $result = false )
#set( $result = $query.criteria( $criterion ) )
#if( $result )
Query was successful
#end
#end
String Literals (文字的意思)
当你使用#set directive,String literal封闭在一对
双引号 内。
#set ( $directoryRoot = “www” )
#set ( $templateName = “index.vm” )
#set ( $template = “$directoryRoot/$tempateName” )
$template
上面这段代码的输出结果为:www/index.vm
但是,当string literal被封装在
单引号 内时,它将不被解析:
#set ( $foo = “bar” )
$foo
#set ( $blargh = ‘$foo’ )
结果:
bar
$foo
条件语句
if/elseif/else
当一个web页面被生成时使用Velocity的#if directrive,如果条件成立的话可以在页面内嵌入文字。例如:
#if(#foo)
Velocity!
#end
上例中的条件语句将在以下两种条件下成立:
l $foo是一个boolean型的变量,且它的值为true
l $foo变量的值不为null
这里需要注意一点: Velocity context仅仅能够包含对象,所以当我们说“boolean”时实际上代表的时一个Boolean对象。即便某个方法返回的是一个boolean值,Velocity也会利用内省机制将它转换为一个Boolean的相同值。
多个条件的情况下:
#elseif和#else元素可以同#if一同使用。例如:
#if( $foo < 10 )
Go North
#elseif( $foo == 10 )
Go East
#elseif( $foo == 6 )
Go South
#else
Go West
#end
注意这里的Velocity的数字是作为Integer来比较的――其他类型的对象将使得条件为false,但是与java不同它使用“==”来比较两个值,而且velocity要求等号两边的 值类型 相同。
关系、逻辑运算符
Velocity中使用等号操作符判断两个变量的关系。例如:
#set ( $foo = “deoxyribonucleic acid” )
#set ( $bar = “ribonucleic acid” )
#if ( $foo == $bar)
In this case it’s clear they aren’t equivalent.So…
#else
They are not equivalent and this will be the output.
#end
Velocity有AND、OR和NOT逻辑运算符,例如:
## 逻辑 AND
#if( $foo && $bar )
This AND that
#end
## 逻辑 OR
#if ( $foo || $bar )
This OR That
#end
##逻辑NOT
#if ( !$foo )
NOT that
#end
循环
Foreach循环
例子:
#foreach ( $product in $allProducts )
$product
#end
每次循环$allProducts中的一个值都会赋给$product变量。
$allProducts可以是一个Vector、Hashtable或者Array。分配给$product的值是一个java对象,并且可以通过变量 被引用。例如:如果$product是一个java的Product类,并且这个产品的名字可以通过调用他的getName()方法得到。
循环Map
#foreach ( $key in $allProducts.keySet() )
Key: $key -> Value: $allProducts.get($key)
#end
获取循环次数:
Velocity还特别提供了得到循环次数的方法,以便你可以像下面这样作:
#foreach ( $customer in $customerList )
$velocityCount $customer.Name
#end
$velocityCount 变量的名字是Velocity默认的名字,你也可以通过修改velocity.properties文件来改变它。默认情况 下,计数从“1”开始,但是你可以在velocity.properties设置它是从“1”还是从“0”开始。下面就是文件中的配置:
# Default name of loop counter
# variable reference
directive.foreach.counter.name = velocityCount
# Default starting value of the loop
# counter variable reference
directive.foreach.counter.initial.value = 1
include
#include script element允许模板设计者引入本地文件。被引入文件的内容将不会通过模板引擎被render。为了安全的原因,被引入的本地文件只能在TEMPLATE_ROOT目录下。
#inclued ( “one.txt” )
如果您需要引入多个文件,可以用逗号分隔就行:
#include ( “one.gif”, “two.txt”, “three.htm” )
在括号内可以是文件名,但是更多的时候是使用变量的:
#inclue ( “greetings.txt”, $seasonalstock )
parse
#parse script element允许模板设计者一个包含VTL的本地文件。Velocity将解析其中的VTL并render模板。
#parse( “me.vm” )
就像#include,#parse接受一个变量而不是一个模板。任何由#parse指向的模板都必须包含在TEMPLATE_ROOT目录下。与#include不同的是,#parse只能指定单个对象。
你可以通过修改velocity.properties文件的parse_direcive.maxdepth的值来控制一个template可以包含的最多#parse的个数――默认值是10。#parse是可以递归调用的,例如:如果dofoo.vm包含如下行:
Count down.
#set ( $count = 8 )
#parse ( “parsefoo.vm” )
All done with dofoo.vm!
Stop
#stop script element允许模板设计者停止执行模板引擎并返回。把它应用于debug是很有帮助的。
#stop
Velocimacros
#macro script element允许模板设计者定义一段可重用的VTL template。例如:
#macro ( d )
#end
在上面的例子中Velocimacro被定义为d,然后你就可以在任何VTL directive中以如下方式调用它:
#d()
当你的template被调用时,Velocity将用
替换为#d()。
每个Velocimacro可以拥有任意数量的参数甚至0个参数,虽然定义时可以随意设置参数数量,但是调用这个Velocimacro时必须指定正确的参数。下面是一个拥有两个参数的Velocimacro,一个参数是color另一个参数是array:
#macro ( tablerows $color $somelist )
#foreach ( $something in $somelist )
$something
#end
#end
调用#tablerows Velocimacro:
#set ( $greatlakes = [ “Superior”, “Michigan”, “Huron”, “Erie”, “Ontario” ] )
#set ( $color = “blue” )
#tablerows( $color $greatlakes )
经过以上的调用将产生如下的显示结果: Superior Michigan Huron Erie Ontario
Velocimacro 的参数:
Velocimacro可以使用以下任何元素作为参数:
l Reference:任何以$开头的reference
l String literal:
l Number literal:
l IntegerRange:[1….3]或者[$foo….$bar]
l 对象数组:[“a”,”b”,”c”]
l boolean值:true、false
先执行方法中体或者reference,然后将计算出来的值在执行Velocimacro
当将一个reference作为参数传递给Velocimacro时,请注意reference作为参数时是以名字的形式传递的。这就意味着参数的值在每 次Velocimacro内执行时才会被产生。这个特性使得你可以将一个方法调用作为参数传递给Velocimacro,而每次Velocimacro执 行时都是通过这个方法调用产生不同的值来执行的。例如:
#macro ( callme $a )
$a $a $a
#end
#callme( $foo.bar() )
执行的结果是:reference $foo的bar()方法被执行了三次。 如果你不需要这样的特性可以通过以下方法: #set ( $myval = $foo.bar() ) #callme ( $myval )
Velocimacro properties 属性文件的配置详解
velocimacro.libraary:一个以逗号分隔的模板库列表。默认情况下,velocity查找唯一的一个库:VM_global_library.vm。你可以通过配置这个属性来指定自己的模板库。
velocimacro.permissions.allow.inline.replace.global:属性有两个可选值true和false,这个属性允许使用者确定inline的Velocimacro定义是否可以替代全局Velocimacro定义 (比如在velocimacro.library属性中指定的文件内定义的Velocimacro)。默认情况下,此值为false。这样就阻止本地 Velocimacro定义覆盖全局定义。
velocimacro.permissions.allow.inline.local.scale:属性也是有true和false两个可选值,默认是false。它的作用是用于确定你inline定义的Velocimacros是否仅仅在被定义的 template内可见。换句话说,如果这个属性设置为true,一个inline定义的Velocimacros只能在定义它的template内使用.
velocimacro.context.localscope:属性有true和false两个可选值,默认值为false。当设置为true时,任何在Velocimacro内通过#set()对context的修改被认为是针对此velocimacro的本地设置,而不会永久的影响内容。
velocimacro.library.autoreload: 属性控制Velocimacro库的自动加载。默认是false。当设置为ture时,对于一个Velocimacro的调用将自动检查原始库是否发生了 变化,如果变化将重新加载它。这个属性使得你可以不用重新启动servlet容器而达到重新加载的效果,就像你使用regular模板一样。前提:file.resource.loader.cache = false
你可能感兴趣的:(Velocity,知识点,记录,详细)
69.Harmonyos NEXT图片预览组件应用实践(二):电商、内容与办公场景
harmonyos-next
温馨提示:本篇博客的详细代码已发布到git:https://gitcode.com/nutpi/HarmonyosNext可以下载运行哦!HarmonyosNEXT图片预览组件应用实践(二):电商、内容与办公场景效果预览一、电商应用最佳实践1.功能需求电商应用中的商品图片预览需求包括:支持商品多角度图片查看高清缩放查看商品细节商品参数标注和热点标记与商品信息面板的联动支持视频和图片混合展示2.实现
C++入门基础------类的介绍
XG丶小哥
C++ c++
本文是对C++的一些知识点总结以及自己的理解,建议是对于C有较好的理解或者是学过一些C++的同学使用,可以加深自己的理解!C++基础一、类的定义二、创建类对象三、访问类的成员四、类成员变量和成员函数五、C++类的访问权限六、类的简单封装七、类的构造函数八、C++构造函数初始化列表九、析构函数十、this指针十一、C++中的静态变量十二、静态函数十三、const成员函数一、类的定义类是创建对象的模板
记录:uniapp中sass问题SassError: expected selector.
院人冲冲冲
sass 前端
SassError:expectedselector.看了网上很多方法可以将/deep/改成:::v-deep降低sass-loader版本(我没实现)最后npmuninstallsass-gsass--version'sass'不是内部或外部命令,也不是可运行的程序或批处理文件。以上解决
uniapp(全端兼容) - 最新详细实现可拖动悬浮按钮功能,支持手指拖曳放到页面任意位置,uniapp可拖动的悬浮球,悬浮图标支持拖动效果(详细示例源码及注释,复制粘贴快速植入)
街尾杂货店&
前端组件与功能(开箱即用) uni-app 悬浮球 uniapp悬浮在屏幕上的组件 uniapp悬浮功能 uniapp可拖曳拖动的悬浮球
效果图百度搜的代码都太难用了而且有bug。。。在uniapp小程序/h5网页网站/安卓苹果app/nvue等(全平台完美兼容)开发中,详细实现在uniapp中实现一个可拖动的悬浮按钮,uniapp全平台兼容的悬浮球功能,可挂载各种小卡片、客服等,自由拖动。支持一次全局引入,无需每个页面都引用。你可以直接复制源码,复制到你的项目中,附带全局组件注册的方法(要不每个页面都需要引一次),uniappVu
64.Harmonyos NEXT 图片预览组件之手势处理实现(二)
harmonyos-next
温馨提示:本篇博客的详细代码已发布到git:https://gitcode.com/nutpi/HarmonyosNext可以下载运行哦!HarmonyosNEXT图片预览组件之手势处理实现(二)效果预览一、双指旋转手势实现(续)在上一篇文章中,我们介绍了图片预览组件的单指拖动和双指缩放手势实现。本文将继续介绍双指旋转手势和双击缩放手势的实现细节。1.旋转手势处理逻辑双指旋转手势的核心逻辑包括:R
65.Harmonyos NEXT 图片预览组件之手势处理实现(三)
harmonyos-next
温馨提示:本篇博客的详细代码已发布到git:https://gitcode.com/nutpi/HarmonyosNext可以下载运行哦!HarmonyosNEXT图片预览组件之手势处理实现(三)效果预览一、双击缩放手势实现在前两篇文章中,我们介绍了图片预览组件的单指拖动、双指缩放和双指旋转手势实现。本文将继续介绍双击缩放手势的实现细节,以及手势之间的协同工作机制。1.双击缩放手势定义TapGes
kubernetes-helm详细介绍及使用
冷漠程序员小哥哥
kubernetes kubernetes kuberctl docker
致读者完整入门示例请参考:Helm完整入门实战Helm本指南介绍了使用Helm来管理Kubernetes集群上的软件包的基础知识。在这之前,假定您已经安装了Helm客户端。如果您仅对运行一些快速命令感兴趣,则不妨从快速入门指南开始。本章包含了Helm命令的详细说明,并解释如何使用Helm。三大概念Chart代表着Helm包。它包含在Kubernetes集群内部运行应用程序,工具或服务所需的所有资源
五大股票金融数据API接口推荐:从实时行情到历史数据全覆盖
金融行业
摘要:本文将介绍五大主流的股票金融数据API接口,涵盖实时行情、历史数据、技术指标等功能,帮助开发者快速构建金融数据应用。(本文由deepseek生成)一、StockTVAPI1.核心优势全球覆盖:支持印度、美国、日本、韩国等10+国家的股票市场实时性强:提供WebSocket实时数据推送数据全面:包含股票、指数、期货、外汇、加密货币易于集成:提供多种语言的SDK和详细文档2.主要功能实时行情:支
【笔记】Helm-1 介绍
许科大
Helm 云原生 kubernetes k8s
欢迎欢迎使用Helm文档。Helm是Kubernetes的包管理器,您也可以在CNCFHelm项目过程报告阅读详细的背景信息。HelmHelmProjectJourneyReport|CNCF文档构成Helm有大量的文档。高级组织概述会让您知道在哪里查找特定内容。1、教程如果您是新手,从这里开始,手把手带您通过一系列的步骤创建您的第一个Helmchart。Helm|Docs2、主题引导以相当高的水
JavaScript基础-全局作用域
難釋懷
javascript 开发语言
在JavaScript编程中,理解变量的作用域是编写高效、可维护代码的关键之一。全局作用域是指变量在整个程序范围内都可访问的状态,这意味着它们可以在任何函数或代码块中被读取和修改。然而,过度使用全局变量也可能导致一些问题,如命名冲突和意外的副作用。本文将详细介绍全局作用域的概念、特性以及如何合理使用全局变量。一、什么是全局作用域?当一个变量在任何函数、代码块之外声明时,它就处于全局作用域下。这意味
什么是Claude API Key?如何使用?
AI_1988
人工智能
Claude,作为一款功能强大的AI工具,它的API接口无疑为开发者提供了极大的便利。那么,ClaudeAPIKey的作用是什么呢?在本文中,我们将详细介绍ClaudeAPIKey的使用方法、能调用的模型,以及如何获取ClaudeAPIKey,帮助开发者更好地利用这一技术。一、ClaudeAPIKey的作用是什么?ClaudeAPIKey是访问ClaudeAI服务的凭证。每当您向Claude的AP
SQL必知必会40-SQLite:为什么微信用SQLite存储聊天记录?
程序员zhi路
MYSQL专栏 sql sqlite jvm
我在上一篇文章中讲了WebSQL,当我们在Chrome、Safari和Firefox等浏览器客户端中使用WebSQL时,会直接操作SQLite。实际上SQLite本身是一个嵌入式的开源数据库引擎,大小只有3M左右,可以将整个SQLite嵌入到应用中,而不用采用传统的客户端/服务器(Client/Server)的架构。这样做的好处就是非常轻便,在许多智能设备和应用中都可以使用SQLite,比如微信就
SpringBoot使用AspectJ实现AOP记录接口:请求日志、响应日志、异常日志
pan_junbiao
Spring Spring Boot 我の原创 spring boot 后端 java
Spring面向切面编程(AOP),系列文章:《Spring面向切面编程(AOP)的简单实例》《Spring使用AspectJ的注解式实现AOP面向切面编程》《SpringBoot使用AspectJ实现AOP记录接口:请求日志、响应日志、异常日志》《SpringBoot使用AspectJ的@Around注解实现AOP全局记录接口:请求日志、响应日志、异常日志》1、AspectJ框架的简介Aspec
自动化测试:灵活书写XPATH定位路径
ZJ_star_1220
python html css 前端 python
进行UI自动化测试过程中XPATH定位是使用最多的定位方法,但是有时候直接复制出来的XPATH路径会比较长,所以就需要掌握一些更高级的方法,通过询问AI,最终得到了以下方法,感觉很有用,所以记录下来一、基础定位语法绝对路径与相对路径绝对路径:以/开头,从根节点逐层定位(如/html/body/div/input),路径长且易受页面结构调整影响相对路径:以//开头,直接定位目标元素(如//input
Elasticsearch Java High Level Client [7.17] 使用
DavidSoCool
java elasticsearch 开发语言
es的HighLevelClient存在es源代码的引用,结合springboot使用时,会存在es版本的冲突,这里记录下解决冲突和使用方式(es已经不建议使用这个了)。注意es服务端的版本需要与client的版本对齐,否则返回数据可能会解析失败!!!文档地址:JavaHighLevelRESTClient|JavaRESTClient[7.17]|Elastic1、首先创建个javaspring
解读Layout Method of Met Mast Based on Macro Zoning and Micro Quantitative Siting in a Wind Farm
赵孝正
风资源与微观选址 paper
目录1.风电场气象塔布局方法流程图(简略)内容细化2.风电场气象塔布局方法详细流程图(详细)核心算法和公式详解2.2解读流程(深入浅出)第一阶段:把大风电场分成几个小区域1.看看风在哪里吹得不一样️2.看看风机的位置分布️3.测量风机之间有多"像"4.用智能方法分区第二阶段:在每个区域内找到最好的位置放测量杆5.画格子找可能的位置6.用电脑模拟风的吹动7.筛选出好位置8.找出最最好的位置9.检验我
React 和 Vue _使用区别
开心小老虎
react知识点+组件 vue3知识点+组件 前端知识点 vue.js react.js 前端
目录一、框架介绍1.Vue2.React二、框架结构1.创建应用2.框架结构三、使用区别1.单页面组成2.样式3.显示响应式数据4.响应式html标签属性5.控制元素显隐6.条件渲染7.渲染列表react和vue是目前前端比较流行的两大框架,前端程序员应该将两种框架都掌握,本文总结一些基本知识点的使用区别。一、框架介绍1.VueVue是一个框架,也是一个生态。其功能覆盖了大部分前端开发常见的需求。
C++中栈的用法
冬瓜生鲜
1 大学学习的算法
简单记忆,具体详细见:https://blog.csdn.net/qq_20366761/article/details/70053813c++栈的方法的基本用法:push():向栈内压入一个成员;pop():从栈顶弹出一个成员;empty():如果栈为空返回true,否则返回false;top():返回栈顶,但不删除成员;size():返回栈内元素的大小;#include#includeusin
Flutter从0到1:构建跨平台应用的新选择
卓桢琳Blackbird
Flutter从0到1:构建跨平台应用的新选择去发现同类优质开源项目:https://gitcode.com/在移动开发领域,寻求一款既能提供高性能,又能实现跨平台的框架是开发者们永恒的话题。这就是我们要向您推荐的【Flutter从0到1】项目,它是一个详细、全面的Flutter学习资源库,旨在帮助初学者和有经验的开发者迅速掌握Flutter并构建出高质量的应用。项目简介Flutterfrom0t
shell脚本 重启python脚本
mzgong
python
#!/bin/bashwhiletrue#循环检测脚本是否停止doprocnum=$(ps-ef|grep"run.py"|grep-vgrep|wc-l)#记录正在运行run.py的数量echo"ps-efgrepreturn:"${procnum}#信息输出if[[${procnum}==0]];then#如果run.py正在运行数量等于0,脚本中断,需要重启filename=$(date+%
C语言从入门到精通
李鲶鱼
c++ 学习 python
主要内容1.基础知识C语言概述:介绍C语言的历史、特点和发展。数据类型:讲解基本数据类型、常量、变量及其存储类别。运算符与表达达:涵盖赋值、算术、关系、逻辑等运算符和表达式。输入输出函数:介绍字符、字符串和格式化的输入输出方法。2.核心技术控制语句:包括选择结构(if、switch)和循环结构(while、for)。数组与指针:详细讲解一维数组、二维数组、字符数组和指针的使用。函数:函数的定义、声
apt/yum/dnf/dkg命令详细:软件安装
黑子哥呢?
运维 linux 运维
apt命令apt(AdvancedPackageTool)是Debian及其衍生版(如Ubuntu)中广泛使用的软件包管理工具。它提供了一系列简洁且易于记忆的命令,用于查找、安装、升级、删除和管理软件包。下面将对apt命令进行详细解析。1.apt命令的基本用法apt命令的基本语法如下:apt[options][command][package...]options:可选参数,用于指定命令的行为,如
使用Python的 multiprocessing 模块实现多进程并行计算(上完整代码)
小码小李
开发语言 python 数据库
使用Python的multiprocessing模块实现多进程并行计算的较为详细复杂的示例代码,用于计算一个较大范围内数字的平方,并将结果汇总。以下是一个更具体、复杂且详尽的多进程并行计算代码示例,用于分析多个大型文本文件中单词出现的频率:importmultiprocessingimporttimeimportrefromcollectionsimportCounter#函数用于读取单个文件内容
应用统计学学什么科目_统计学考研科目分别有哪些?你都知道吗
心言星愿
应用统计学学什么科目
在现实社会社会中统计学的应用范围是比较广泛的,想要报考统计学的朋友也是不再少数的,那么问题就来了关于统计学应该要学习哪一些科目呢,下面就来详细的看一下关于统计学方向具体的统计学考研科目分别有那些。首先对于统计学来讲英语政治史必然的初试科目,而专业课的考研科目具体是什么还是要看你选择的院校的实际出题情况了,所以在确定了考研科目之后一定要在在确定一下你想去的高校,以便能够更好的准备。在来看一下在学校方
北本海硕腾讯二面没过,该如何准备才能再战大厂?
程序员yt
面试
今天给大家分享的是一位粉丝的提问,北本海硕腾讯二面没过,该如何准备才能再战大厂?接下来把粉丝的具体提问和我的回复分享给大家,希望也能给一些类似情况的小伙伴一些启发和帮助。同学提问:bg北本海硕两段大厂实习,感觉自己bg其实不错但问题是实习干的都是些crud当时也没意识记录一些更深刻的技术或者架构上的问题,八股又欠背(大致看完了小林codinga和csguilde的c++指北但实际中延伸出来的问题太
Rust语言基础知识详解【八】
学习两年半的Javaer
rust rust
继上一章对rust复合类型中的数组和元组讲解之后,接下来对结构体进行详细的介绍。结构体跟之前讲过的元组有些相像:都是由多种类型组合而成。但是与元组不同的是,结构体可以为内部的每个字段起一个富有含义的名称。因此结构体更加灵活更加强大,你无需依赖这些字段的顺序来访问和解析它们。结构体语法天下无敌的剑士往往也因为他有一柄无双之剑,既然结构体这么强大,那么我们就需要给它配套一套强大的语法,让用户能更好的驾
C# Dictionary使用详解
Daniel的万事通杂货铺
Winform应用开发 c# 开发语言
在C#中,Dictionary是一个非常常用的数据结构,用于存储键值对。Dictionary类实现了IDictionary接口,并且提供了许多有用的方法和属性来操作键值对集合。下面是一些关于如何使用Dictionary的详细说明:1.基本用法创建DictionaryCsharp深色版本1DictionarymyDictionary=newDictionary();或者使用字面量语法:Csharp深
C++:std::vector常用函数及用法详解
湫兮之风
c++ c++ 算法 开发语言
std::vector是C++标准库中最常用的动态数组容器,提供了丰富的操作方法,支持动态扩展、插入、删除等操作。本文将详细介绍vector的常用函数及其用法,并配合代码示例说明。1.std::vector的基本使用在C++中,vector需要包含头文件:#include示例:#include#includeintmain(){std::vectorvec={1,2,3,4,5};for(intn
Python一键搞定Word与PDF文档批量转换
Selina .a
python教程 python word pdf
在日常工作中,我们经常需要将Word文档(.docx)转换为PDF格式,或者反过来操作。手动进行这种转换不仅费时费力,还容易出错。为此,我们可以利用Python编写一个批量转换工具,一键搞定Word与PDF文档的转换。本文将详细介绍如何实现这一目标,并提供源码和工具。所需库的安装首先,我们需要安装一些Python库来实现这个功能。推荐使用以下两个库:python-docx:用于处理Word文件内容
C# 事件使用详解
鲤籽鲲
C# c# C# 知识捡漏 开发语言
总目录前言在C#中,事件(Events)是一种基于委托的重要机制,用于实现对象之间的松耦合通信。它通过发布-订阅模式(Publisher-SubscriberPattern),允许一个对象(发布者)在特定条件发生时通知其他对象(订阅者)执行相应操作。事件是构建响应式、动态应用程序的核心工具,广泛应用于UI交互、游戏开发、网络通信等领域。本文将全面详细地介绍C#事件的使用,包括事件的定义、发布、订阅
linux系统服务器下jsp传参数乱码
3213213333332132
java jsp linux windows xml
在一次解决乱码问题中, 发现jsp在windows下用js原生的方法进行编码没有问题,但是到了linux下就有问题, escape,encodeURI,encodeURIComponent等都解决不了问题
但是我想了下既然原生的方法不行,我用el标签的方式对中文参数进行加密解密总该可以吧。于是用了java的java.net.URLDecoder,结果还是乱码,最后在绝望之际,用了下面的方法解决了
Spring 注解区别以及应用
BlueSkator
spring
1. @Autowired
@Autowired是根据类型进行自动装配的。如果当Spring上下文中存在不止一个UserDao类型的bean,或者不存在UserDao类型的bean,会抛出 BeanCreationException异常,这时可以通过在该属性上再加一个@Qualifier注解来声明唯一的id解决问题。
2. @Qualifier
当spring中存在至少一个匹
printf和sprintf的应用
dcj3sjt126com
PHP sprintf printf
<?php
printf('b: %b <br>c: %c <br>d: %d <bf>f: %f', 80,80, 80, 80);
echo '<br />';
printf('%0.2f <br>%+d <br>%0.2f <br>', 8, 8, 1235.456);
printf('th
config.getInitParameter
171815164
parameter
web.xml
<servlet>
<servlet-name>servlet1</servlet-name>
<jsp-file>/index.jsp</jsp-file>
<init-param>
<param-name>str</param-name>
Ant标签详解--基础操作
g21121
ant
Ant的一些核心概念:
build.xml:构建文件是以XML 文件来描述的,默认构建文件名为build.xml。 project:每个构建文
[简单]代码片段_数据合并
53873039oycg
代码
合并规则:删除家长phone为空的记录,若一个家长对应多个孩子,保留一条家长记录,家长id修改为phone,对应关系也要修改。
代码如下:
java 通信技术
云端月影
Java 远程通信技术
在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制就是必须的了,在这篇blog中我们将来
string与StringBuilder 性能差距到底有多大
aijuans
之前也看过一些对string与StringBuilder的性能分析,总感觉这个应该对整体性能不会产生多大的影响,所以就一直没有关注这块!
由于学程序初期最先接触的string拼接,所以就一直没改变过自己的习惯!
今天碰到 java.util.ConcurrentModificationException 异常
antonyup_2006
java 多线程 工作 IBM
今天改bug,其中有个实现是要对map进行循环,然后有删除操作,代码如下:
Iterator<ListItem> iter = ItemMap.keySet.iterator();
while(iter.hasNext()){
ListItem it = iter.next();
//...一些逻辑操作
ItemMap.remove(it);
}
结果运行报Con
PL/SQL的类型和JDBC操作数据库
百合不是茶
PL/SQL表 标量类型 游标 PL/SQL记录
PL/SQL的标量类型:
字符,数字,时间,布尔,%type五中类型的
--标量:数据库中预定义类型的变量
--定义一个变长字符串
v_ename varchar2(10);
--定义一个小数,范围 -9999.99~9999.99
v_sal number(6,2);
--定义一个小数并给一个初始值为5.4 :=是pl/sql的赋值号
Mockito:一个强大的用于 Java 开发的模拟测试框架实例
bijian1013
mockito 单元测试
Mockito框架:
Mockito是一个基于MIT协议的开源java测试框架。 Mockito区别于其他模拟框架的地方主要是允许开发者在没有建立“预期”时验证被测系统的行为。对于mock对象的一个评价是测试系统的测
精通Oracle10编程SQL(10)处理例外
bijian1013
oracle 数据库 plsql
/*
*处理例外
*/
--例外简介
--处理例外-传递例外
declare
v_ename emp.ename%TYPE;
begin
SELECT ename INTO v_ename FROM emp
where empno=&no;
dbms_output.put_line('雇员名:'||v_ename);
exceptio
【Java】Java执行远程机器上Linux命令
bit1129
linux命令
Java使用ethz通过ssh2执行远程机器Linux上命令,
封装定义Linux机器的环境信息
package com.tom;
import java.io.File;
public class Env {
private String hostaddr; //Linux机器的IP地址
private Integer po
java通信之Socket通信基础
白糖_
java socket 网络协议
正处于网络环境下的两个程序,它们之间通过一个交互的连接来实现数据通信。每一个连接的通信端叫做一个Socket。一个完整的Socket通信程序应该包含以下几个步骤:
①创建Socket;
②打开连接到Socket的输入输出流;
④按照一定的协议对Socket进行读写操作;
④关闭Socket。
Socket通信分两部分:服务器端和客户端。服务器端必须优先启动,然后等待soc
angular.bind
boyitech
AngularJS angular.bind AngularJS API bind
angular.bind 描述: 上下文,函数以及参数动态绑定,返回值为绑定之后的函数. 其中args是可选的动态参数,self在fn中使用this调用。 使用方法: angular.bind(se
java-13个坏人和13个好人站成一圈,数到7就从圈里面踢出一个来,要求把所有坏人都给踢出来,所有好人都留在圈里。请找出初始时坏人站的位置。
bylijinnan
java
import java.util.ArrayList;
import java.util.List;
public class KickOutBadGuys {
/**
* 题目:13个坏人和13个好人站成一圈,数到7就从圈里面踢出一个来,要求把所有坏人都给踢出来,所有好人都留在圈里。请找出初始时坏人站的位置。
* Maybe you can find out
Redis.conf配置文件及相关项说明(自查备用)
Kai_Ge
redis
Redis.conf配置文件及相关项说明
# Redis configuration file example
# Note on units: when memory size is needed, it is possible to specifiy
# it in the usual form of 1k 5GB 4M and so forth:
#
[强人工智能]实现大规模拓扑分析是实现强人工智能的前奏
comsci
人工智能
真不好意思,各位朋友...博客再次更新...
节点数量太少,网络的分析和处理能力肯定不足,在面对机器人控制的需求方面,显得力不从心....
但是,节点数太多,对拓扑数据处理的要求又很高,设计目标也很高,实现起来难度颇大...
记录一些常用的函数
dai_lm
java
public static String convertInputStreamToString(InputStream is) {
StringBuilder result = new StringBuilder();
if (is != null)
try {
InputStreamReader inputReader = new InputStreamRead
Hadoop中小规模集群的并行计算缺陷
datamachine
mapreduce hadoop 并行计算
注:写这篇文章的初衷是因为Hadoop炒得有点太热,很多用户现有数据规模并不适用于Hadoop,但迫于扩容压力和去IOE(Hadoop的廉价扩展的确非常有吸引力)而尝试。尝试永远是件正确的事儿,但有时候不用太突进,可以调优或调需求,发挥现有系统的最大效用为上策。
-----------------------------------------------------------------
小学4年级英语单词背诵第二课
dcj3sjt126com
english word
egg 蛋
twenty 二十
any 任何
well 健康的,好
twelve 十二
farm 农场
every 每一个
back 向后,回
fast 快速的
whose 谁的
much 许多
flower 花
watch 手表
very 非常,很
sport 运动
Chinese 中国的
自己实践了github的webhooks, linux上面的权限需要注意
dcj3sjt126com
github webhook
环境, 阿里云服务器
1. 本地创建项目, push到github服务器上面
2. 生成www用户的密钥
sudo -u www ssh-keygen -t rsa -C "
[email protected] "
3. 将密钥添加到github帐号的SSH_KEYS里面
3. 用www用户执行克隆, 源使
Java冒泡排序
蕃薯耀
冒泡排序 Java冒泡排序 Java排序
冒泡排序
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年6月23日 10:40:14 星期二
http://fanshuyao.iteye.com/
Excle读取数据转换为实体List【基于apache-poi】
hanqunfeng
apache
1.依赖apache-poi
2.支持xls和xlsx
3.支持按属性名称绑定数据值
4.支持从指定行、列开始读取
5.支持同时读取多个sheet
6.具体使用方式参见org.cpframework.utils.excelreader.CP_ExcelReaderUtilTest.java
比如:
Str
3个处于草稿阶段的Javascript API介绍
jackyrong
JavaScript
原文:
http://www.sitepoint.com/3-new-javascript-apis-may-want-follow/?utm_source=html5weekly&utm_medium=email
本文中,介绍3个仍然处于草稿阶段,但应该值得关注的Javascript API.
1) Web Alarm API
&
6个创建Web应用程序的高效PHP框架
lampcy
Web 框架 PHP
以下是创建Web应用程序的PHP框架,有coder bay网站整理推荐:
1. CakePHP
CakePHP是一个PHP快速开发框架,它提供了一个用于开发、维护和部署应用程序的可扩展体系。CakePHP使用了众所周知的设计模式,如MVC和ORM,降低了开发成本,并减少了开发人员写代码的工作量。
2. CodeIgniter
CodeIgniter是一个非常小且功能强大的PHP框架,适合需
评"救市后中国股市新乱象泛起"谣言
nannan408
首先来看百度百家一位易姓作者的新闻:
三个多星期来股市持续暴跌,跌得投资者及上市公司都处于极度的恐慌和焦虑中,都要寻找自保及规避风险的方式。面对股市之危机,政府突然进入市场救市,希望以此来重建市场信心,以此来扭转股市持续暴跌的预期。而政府进入市场后,由于市场运作方式发生了巨大变化,投资者及上市公司为了自保及为了应对这种变化,中国股市新的乱象也自然产生。
首先,中国股市这两天
页面全屏遮罩的实现 方式
Rainbow702
html css 遮罩 mask
之前做了一个页面,在点击了某个按钮之后,要求页面出现一个全屏遮罩,一开始使用了position:absolute来实现的。当时因为画面大小是固定的,不可以resize的,所以,没有发现问题。
最近用了同样的做法做了一个遮罩,但是画面是可以进行resize的,所以就发现了一个问题,当画面被reisze到浏览器出现了滚动条的时候,就发现,用absolute 的做法是有问题的。后来改成fixed定位就
关于angularjs的点滴
tntxia
AngularJS
angular是一个新兴的JS框架,和以往的框架不同的事,Angularjs更注重于js的建模,管理,同时也提供大量的组件帮助用户组建商业化程序,是一种值得研究的JS框架。
Angularjs使我们可以使用MVC的模式来写JS。Angularjs现在由谷歌来维护。
这里我们来简单的探讨一下它的应用。
首先使用Angularjs我
Nutz--->>反复新建ioc容器的后果
xiaoxiao1992428
DAO mvc IOC nutz
问题:
public class DaoZ {
public static Dao dao() { // 每当需要使用dao的时候就取一次
Ioc ioc = new NutIoc(new JsonLoader("dao.js"));
return ioc.get(