- CMake基础:条件判断详解
目录1.简介2.核心判断类型及示例2.1.变量相关判断2.2.数值判断2.3.文件/路径判断2.4.目标/组件判断2.5.系统与编译器判断2.6.逻辑组合(与/或/非)2.7.括号分组(优先级控制)2.8.判断某个元素是否在列表中3.常见实用场景4.注意事项相关链接1.简介CMake的条件判断是通过if()/elseif()/else()/endif()结构实现流程控制的核心,常用于根据环境、配置
- CTFSHOW-WEB-36D杯
wyjcxyyy
前端android
给你shell这道题对我这个新手还是有难度的,花了不少时间。首先f12看源码,看到?view_source,点进去看源码location.href=\'./index.php\'');if(!isset($_GET['code'])){show_source(__FILE__);exit();}else{$code=$_GET['code'];if(!preg_match($secret_waf,
- python程序控制语句2 《让静态数据动起来》
Monkey的自我迭代
python学习python前端javascript
共同构建了程序的“智能中枢”,让代码从呆板的指令序列蜕变为灵活的问题解决者一条件控制语句条件控制语句主要包含if,elif和else之间的相互配合,下面是几种主要形式:if语句if语句是最简单的条件控制语句,用于判断条件是否为真,如果为真则执行对应的代码块。x=10ifx>5:print("x大于5")if-else语句if-else语句用于在条件为真时执行一个代码块,否则执行另一个代码块。x=3
- 第一章 入门
陌路玥
javascript开发语言前端
14.if条件判断语句14.1ifelse语句if(...)语句计算括号里的条件表达式,如果计算结果是true,就会执行对应的代码块。letyear=prompt('请输入年份');if(year==2015)alert('Youareright!');if(…)语句会计算圆括号内的表达式,并将计算结果转换为布尔型。数字0、空字符串""、null、undefined和NaN都会被转换成false。
- 力扣-75.颜色分类
এ᭄画画的北北
java二刷力扣hot100leetcode算法
题目链接75.颜色分类classSolution{publicvoidsortColors(int[]nums){intp0=0;intp2=nums.length-1;intp=0;//注意循环结束的条件while(p<=p2){if(nums[p]==2){swap(nums,p,p2);p2--;}elseif(nums[p]==1){p++;}else{swap(nums,p,p0);p+
- JavaScript条件语句
啥时候都困系列
JavaScriptjavascript
if-else类型第一关:if-else类型functionmainJs(a){a=parseInt(a);//请在此处编写代码/**********Begin**********/if(a<60){return"unpass";}else{return"pass";}/**********End**********/}switch类型第一关:switch类型functionmainJs(a){a
- Day 1: 从零突破 - Go基础语法快速入门
目录Day1:从零突破-Go基础语法快速入门1.安装Go环境(或使用GoPlayground快速体验)安装Go环境GoPlayground快速体验2.基础语法2.1变量声明2.2常量2.3基础类型3.控制结构3.1if-else3.2for循环3.3switch4.函数基础4.1参数和返回值4.2多返回值4.3匿名函数5.练习5.1实现FizzBuzz5.2计算斐波那契数列总结Day1:从零突破-
- D触发器实现二分频
mengzijie@@
verilogverilog
moduletoplevel(clock,reset);inputclock;inputreset;regflop1;regflop2;always@(posedgeresetorposedgeclock)if(reset)beginflop1<=0;flop2<=1;endelsebeginflop1<=flop2;flop2<=flop1;endendmodule
- 【Python进阶篇 面向对象程序设计(5) 异常处理】
nananaij
pythonpycharm开发语言
文章目录1、基础异常类(所有异常的父类)2、异常类型总结3、异常处理(1)try......except语句:捕获和处理异常(2)try......except......else语句(3)try......except......finally语句(4)raise语句(5)assert语句:调试断言1、基础异常类(所有异常的父类)BaseException:所有内置异常的基类(不建议直接捕获)。
- 巧用 #define与 #ifdef,实现灵活数值比较
一粒沙白兔
C语言刷题记录算法c语言
题目描述#if#ifdef和#ifndef的综合应用。源代码#include#defineMAX#defineMAXIMUM(x,y)(x>y)?x:y#defineMINIMUM(x,y)(x>y)?y:xintmain(){inta=10,b=20;#ifdefMAXprintf("更大的数字是%d\n",MAXIMUM(a,b));#elseprintf("更小的数字是%d\n",MINIM
- 第五章算法设计题
以二叉链表作为二叉树的存储结构,编写以下算法:(1)统计二叉树的叶结点个数。[题目分析]如果二叉树为空,返回0,如果二叉树不为空且左右子树为空,返回1,如果二叉树不为空,且左右子树不同时为空,返回左子树中叶子节点个数加上右子树中叶子节点个数。[算法描述]intLeafNodeCount(BiTreeT){if(T==NULL) return0;//如果是空树,则叶子结点个数为0elseif(T
- BUUCTF在线评测-练习场-WebCTF习题[网鼎杯 2020 青龙组]AreUSerialz1-flag获取、解析
码农12138号
BUUCTF网络安全web安全CTF反序列化漏洞
解题思路打开靶场,贴有源码process();}publicfunctionprocess(){if($this->op=="1"){$this->write();}elseif($this->op=="2"){$res=$this->read();$this->output($res);}else{$this->output("BadHacker!");}}privatefunctionwrit
- Python 上下文管理器和 else 块(上下文管理器和with块)
钢铁男儿
流程Pythonpythonjava前端
上下文管理器和with块上下文管理器对象存在的目的是管理with语句,就像迭代器的存在是为了管理for语句一样。with语句的目的是简化try/finally模式。这种模式用于保证一段代码运行完毕后执行某项操作,即便那段代码由于异常、return语句或sys.exit()调用而中止,也会执行指定的操作。finally子句中的代码通常用于释放重要的资源,或者还原临时变更的状态。上下文管理器协议包含_
- 爆肝4万字!手把手带你入门Python
rooney2024
python开发语言
目录0.前言:为什么是Python?1.准备工作:安装与环境1.1安装Python1.2选择代码编辑器或IDE1.3第一个程序:Hello,World!2.基础语法与核心概念2.1变量与数据类型2.2基本运算符2.3字符串操作2.4列表(Lists)2.5元组(Tuples)2.6字典(Dictionaries)2.7集合(Sets)3.流程控制3.1条件语句(if,elif,else)3.2循环
- .NET9 实现 JSON 序列化和反序列化(Newtonsoft.Json & System.Text.Json)性能测试
为了在.NET9平台上对比Newtonsoft.Json和System.Text.Json的序列化与反序列化的性能,我们可以使用BenchmarkDotNet来进行压测。目录1.项目准备2.基准测试环境3.性能对比a.对象级别的序列化(Object-LevelSerialization)b.对象级别的反序列化(Object-LevelDeserialization)c.API响应级别的序列化(Ap
- Python 分支语句,分支语句嵌套,三目运算
龙技术
Python语法python
1、分支语句单一条件判断if条件:条件成立时执行的代码#格式:'''if条件:条件成立时执行的代码'''age=int(input('请输入你的年龄:'))#上网ifage>=18:print('小帅哥快来玩啊')print('回家睡觉')对立条件判断if条件:条件成立时执行的代码else:条件不成立时执行的代码#if...else...'''if条件:条件成立时执行的代码else:条件不成立时执
- 奇数和偶数的求法c++
今天给大家分享一个奇偶数的求法:#includeusingnamespacestd;intmain(){inta=0;cin>>a;if(a%2==0){cout>a;这是输入和声明if(a%2==0){cout<<"偶数";}else{cout<<"奇数";}这部分是判断的点个赞吧,求求了~
- C - Large Queue
queenlll
c语言开发语言
地址:C-LargeQueue#includeusingnamespacestd;constintN=1e5+10;voidsolve(){intn;cin>>n;queue>q;while(n--){intt;cin>>t;if(t==1){longlongc,x;cin>>c>>x;q.push({x,c});}else{longlongk;cin>>k;longlongsum=0;while
- Python 中的循环
小羊苏八
python开发语言
目录前言一.for循环二.while循环三.break与continue四.循环与else总结前言Python中的循环:for、while、break、continue与循环中的else。在Python中,循环是控制程序流程的重要结构之一。它允许我们重复执行一段代码,直到满足特定条件为止。Python提供了两种主要的循环结构:for循环和while循环。此外,break和continue语句可以用
- 深入解析C++中 std::sort背后的实现原理 —Introsort(Introspective Sort)
点云SLAM
C++c++算法数据结构快速排序排序算法堆排序深度优先
Introsort简介Introsort是一种混合排序算法,结合了三种经典算法的优点:算法用于特点快速排序通常情况平均时间复杂度O(nlogn)堆排序当快速排序退化(递归过深)时最坏时间复杂度O(nlogn)插入排序小规模数组时(如长度≤16)常数开销小,快Introsort运行机制排序逻辑如下:if(size2*log2(n))堆排序(HeapSort)else快速排序(QuickSort)快速
- Python中的函数定义
aiguangyuan
Python后端开发Python
1.定义一个函数defcheck_truthiness(value,des):ifvalue:print(f"{des}({value})被认为是True(真值)")else:print(f"{des}({value})被认为是False(假值)")check_truthiness(False,"布尔值false")#布尔值false(False)被认为是False(假值)check_truthi
- 【批处理脚本】bat解决谷歌浏览器跨域问题
一殊酒
网络安全文档解析前端开发服务器linux运维网络安全
新建TXT文件,复制粘贴以下代码@echooff:Startsetindex=""for/f"delims=="%%iin('wherechrome')dosetindex="%%i"echo"%index%"if%index%==""(gotoA)else(gotoGOON):GOONfor/f"delims=\,tokens=1,*"%%ain(%index%)do(::echo%%a%%bs
- 【基础】C++中的关键词
小熊猫爱编程
重新学编程c++开发语言
一、关键词的概念C++中的关键词是语言保留用来表示特定语法结构的单词,不能作为变量名、函数名或标识符使用。二、关键词有哪些在C++中有63个关键字,如下:关键词关键词关键词关键词关键词asmdoifreturntypedefautodoubleinlineshorttypeidbooldynamic_castintsignedtypenamebreakelselongsizeofunioncase
- 怀化学院2024年ACM基地第二轮招新机试题解
啊这.-
算法
比赛地址:https://www.nowcoder.com/acm/contest/96304。【邀请码:acm20241115】A宋学长买书#include#defineintlonglongconstintN=1e6+10;inta[N];intmin(inta,intb){if(a=m)pl=min(pl,x);elseans+=x,cnt++;}ans+=pl-1;if(cnt>m)pri
- 【算法训练营Day07】字符串part1
文章目录反转字符串反转字符串II替换数字反转字符串题目链接:344.反转字符串双指针法,两个指针的元素直接调转即可classSolution{publicvoidreverseString(char[]s){inthead=0;intend=s.length-1;while(head=k){reverseString(charArray,head,head+k-1);}else{reverseSt
- 微信小程序实现路由拦截的方法
半点寒12W
javascript前端
微信小程序路由拦截实现方法微信小程序本身没有提供直接的路由拦截功能,但可以通过以下几种方式实现类似的效果:1.使用页面跳转前的拦截方法一:封装路由跳转方法//utils/router.jsconstrouteInterceptor={navigateTo:function(params){if(checkAuth()){//你的拦截条件wx.navigateTo(params)}else{wx.r
- python之海象运算符
youhebuke225
pythonpython
简介海象运算符是一种语法糖,有一个:和一个=构成,语法格式如下:(variable_name:=expression)一般海象运算符有三种用法,如下ifelseifelse中还是比较常用的#if语句中a=10ifa>5:print("hello")ifa:=10>5:print("hello:=")打印hellohello:=他会先进行赋值,然后再进行比较while一般使用while我们会进行无限
- Python 海象运算符 详细介绍
ys.journey
Pythonpython
海象运算符定义:一个变量名跟一个表达式或者一个值,这个是一种新的赋值运算符。下面看看它的三种用法:一、用于ifelse条件表达式基础写法:x=5ifx10]print(num2)运行结果:海象运算符写法:num1=[1,2,3,4,5]count=1deff(x):globalcountprint(f"f(x)函数运行了{count}次")count+=1returnx**2num2=[nforx
- Vue从入门到精通:前端开发的基石之旅
奔跑吧邓邓子
必备核心技能vue.js前端javascript从入门到精通
目录一、Vue简介1.1渐进式框架的含义1.2Vue在前端开发中的优势二、Vue环境搭建2.1安装Node.js和npm2.2全局安装VueCLI2.3使用VueCLI创建Vue项目三、Vue基础语法3.1数据绑定3.1.1插值语法3.1.2指令语法3.2计算属性和侦听器3.2.1计算属性3.2.2侦听器3.3条件渲染与列表渲染3.3.1v-if、v-else-if、v-else3.3.2v-sh
- 代码随想录算法训练营第四十六天 | 动态规划 part13
sagen aller
算法动态规划
647.回文子串classSolution{public:intcountSubstrings(strings){vector>dp(s.size(),vector(s.size(),false));intresult=0;for(inti=s.size()-1;i>=0;i--){for(intj=i;j=j-1){dp[i][j]=true;result++;}elseif(dp[i+1][j
- 安装数据库首次应用
Array_06
javaoraclesql
可是为什么再一次失败之后就变成直接跳过那个要求
enter full pathname of java.exe的界面
这个java.exe是你的Oracle 11g安装目录中例如:【F:\app\chen\product\11.2.0\dbhome_1\jdk\jre\bin】下的java.exe 。不是你的电脑安装的java jdk下的java.exe!
注意第一次,使用SQL D
- Weblogic Server Console密码修改和遗忘解决方法
bijian1013
Welogic
在工作中一同事将Weblogic的console的密码忘记了,通过网上查询资料解决,实践整理了一下。
一.修改Console密码
打开weblogic控制台,安全领域 --> myrealm -->&n
- IllegalStateException: Cannot forward a response that is already committed
Cwind
javaServlets
对于初学者来说,一个常见的误解是:当调用 forward() 或者 sendRedirect() 时控制流将会自动跳出原函数。标题所示错误通常是基于此误解而引起的。 示例代码:
protected void doPost() {
if (someCondition) {
sendRedirect();
}
forward(); // Thi
- 基于流的装饰设计模式
木zi_鸣
设计模式
当想要对已有类的对象进行功能增强时,可以定义一个类,将已有对象传入,基于已有的功能,并提供加强功能。
自定义的类成为装饰类
模仿BufferedReader,对Reader进行包装,体现装饰设计模式
装饰类通常会通过构造方法接受被装饰的对象,并基于被装饰的对象功能,提供更强的功能。
装饰模式比继承灵活,避免继承臃肿,降低了类与类之间的关系
装饰类因为增强已有对象,具备的功能该
- Linux中的uniq命令
被触发
linux
Linux命令uniq的作用是过滤重复部分显示文件内容,这个命令读取输入文件,并比较相邻的行。在正常情 况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如 果输入文件用“- ”表示,则从标准输入读取。
AD:
uniq [选项] 文件
说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个
- 正则表达式Pattern
肆无忌惮_
Pattern
正则表达式是符合一定规则的表达式,用来专门操作字符串,对字符创进行匹配,切割,替换,获取。
例如,我们需要对QQ号码格式进行检验
规则是长度6~12位 不能0开头 只能是数字,我们可以一位一位进行比较,利用parseLong进行判断,或者是用正则表达式来匹配[1-9][0-9]{4,14} 或者 [1-9]\d{4,14}
&nbs
- Oracle高级查询之OVER (PARTITION BY ..)
知了ing
oraclesql
一、rank()/dense_rank() over(partition by ...order by ...)
现在客户有这样一个需求,查询每个部门工资最高的雇员的信息,相信有一定oracle应用知识的同学都能写出下面的SQL语句:
select e.ename, e.job, e.sal, e.deptno
from scott.emp e,
(se
- Python调试
矮蛋蛋
pythonpdb
原文地址:
http://blog.csdn.net/xuyuefei1988/article/details/19399137
1、下面网上收罗的资料初学者应该够用了,但对比IBM的Python 代码调试技巧:
IBM:包括 pdb 模块、利用 PyDev 和 Eclipse 集成进行调试、PyCharm 以及 Debug 日志进行调试:
http://www.ibm.com/d
- webservice传递自定义对象时函数为空,以及boolean不对应的问题
alleni123
webservice
今天在客户端调用方法
NodeStatus status=iservice.getNodeStatus().
结果NodeStatus的属性都是null。
进行debug之后,发现服务器端返回的确实是有值的对象。
后来发现原来是因为在客户端,NodeStatus的setter全部被我删除了。
本来是因为逻辑上不需要在客户端使用setter, 结果改了之后竟然不能获取带属性值的
- java如何干掉指针,又如何巧妙的通过引用来操作指针————>说的就是java指针
百合不是茶
C语言的强大在于可以直接操作指针的地址,通过改变指针的地址指向来达到更改地址的目的,又是由于c语言的指针过于强大,初学者很难掌握, java的出现解决了c,c++中指针的问题 java将指针封装在底层,开发人员是不能够去操作指针的地址,但是可以通过引用来间接的操作:
定义一个指针p来指向a的地址(&是地址符号):
- Eclipse打不开,提示“An error has occurred.See the log file ***/.log”
bijian1013
eclipse
打开eclipse工作目录的\.metadata\.log文件,发现如下错误:
!ENTRY org.eclipse.osgi 4 0 2012-09-10 09:28:57.139
!MESSAGE Application error
!STACK 1
java.lang.NoClassDefFoundError: org/eclipse/core/resources/IContai
- spring aop实例annotation方法实现
bijian1013
javaspringAOPannotation
在spring aop实例中我们通过配置xml文件来实现AOP,这里学习使用annotation来实现,使用annotation其实就是指明具体的aspect,pointcut和advice。1.申明一个切面(用一个类来实现)在这个切面里,包括了advice和pointcut
AdviceMethods.jav
- [Velocity一]Velocity语法基础入门
bit1129
velocity
用户和开发人员参考文档
http://velocity.apache.org/engine/releases/velocity-1.7/developer-guide.html
注释
1.行级注释##
2.多行注释#* *#
变量定义
使用$开头的字符串是变量定义,例如$var1, $var2,
赋值
使用#set为变量赋值,例
- 【Kafka十一】关于Kafka的副本管理
bit1129
kafka
1. 关于request.required.acks
request.required.acks控制者Producer写请求的什么时候可以确认写成功,默认是0,
0表示即不进行确认即返回。
1表示Leader写成功即返回,此时还没有进行写数据同步到其它Follower Partition中
-1表示根据指定的最少Partition确认后才返回,这个在
Th
- lua统计nginx内部变量数据
ronin47
lua nginx 统计
server {
listen 80;
server_name photo.domain.com;
location /{set $str $uri;
content_by_lua '
local url = ngx.var.uri
local res = ngx.location.capture(
- java-11.二叉树中节点的最大距离
bylijinnan
java
import java.util.ArrayList;
import java.util.List;
public class MaxLenInBinTree {
/*
a. 1
/ \
2 3
/ \ / \
4 5 6 7
max=4 pass "root"
- Netty源码学习-ReadTimeoutHandler
bylijinnan
javanetty
ReadTimeoutHandler的实现思路:
开启一个定时任务,如果在指定时间内没有接收到消息,则抛出ReadTimeoutException
这个异常的捕获,在开发中,交给跟在ReadTimeoutHandler后面的ChannelHandler,例如
private final ChannelHandler timeoutHandler =
new ReadTim
- jquery验证上传文件样式及大小(好用)
cngolon
文件上传jquery验证
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="jquery1.8/jquery-1.8.0.
- 浏览器兼容【转】
cuishikuan
css浏览器IE
浏览器兼容问题一:不同浏览器的标签默认的外补丁和内补丁不同
问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。
碰到频率:100%
解决方案:CSS里 *{margin:0;padding:0;}
备注:这个是最常见的也是最易解决的一个浏览器兼容性问题,几乎所有的CSS文件开头都会用通配符*来设
- Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
daizj
shell$#$?特殊变量
前面已经讲到,变量名只能包含数字、字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量。例如,$ 表示当前Shell进程的ID,即pid,看下面的代码:
$echo $$
运行结果
29949
特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个
- 程序设计KISS 原则-------KEEP IT SIMPLE, STUPID!
dcj3sjt126com
unix
翻到一本书,讲到编程一般原则是kiss:Keep It Simple, Stupid.对这个原则深有体会,其实不仅编程如此,而且系统架构也是如此。
KEEP IT SIMPLE, STUPID! 编写只做一件事情,并且要做好的程序;编写可以在一起工作的程序,编写处理文本流的程序,因为这是通用的接口。这就是UNIX哲学.所有的哲学真 正的浓缩为一个铁一样的定律,高明的工程师的神圣的“KISS 原
- android Activity间List传值
dcj3sjt126com
Activity
第一个Activity:
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import a
- tomcat 设置java虚拟机内存
eksliang
tomcat 内存设置
转载请出自出处:http://eksliang.iteye.com/blog/2117772
http://eksliang.iteye.com/
常见的内存溢出有以下两种:
java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: Java heap space
------------
- Android 数据库事务处理
gqdy365
android
使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。事
- Java 打开浏览器
hw1287789687
打开网址open浏览器open browser打开url打开浏览器
使用java 语言如何打开浏览器呢?
我们先研究下在cmd窗口中,如何打开网址
使用IE 打开
D:\software\bin>cmd /c start iexplore http://hw1287789687.iteye.com/blog/2153709
使用火狐打开
D:\software\bin>cmd /c start firefox http://hw1287789
- ReplaceGoogleCDN:将 Google CDN 替换为国内的 Chrome 插件
justjavac
chromeGooglegoogle apichrome插件
Chrome Web Store 安装地址: https://chrome.google.com/webstore/detail/replace-google-cdn/kpampjmfiopfpkkepbllemkibefkiice
由于众所周知的原因,只需替换一个域名就可以继续使用Google提供的前端公共库了。 同样,通过script标记引用这些资源,让网站访问速度瞬间提速吧
- 进程VS.线程
m635674608
线程
资料来源:
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001397567993007df355a3394da48f0bf14960f0c78753f000 1、Apache最早就是采用多进程模式 2、IIS服务器默认采用多线程模式 3、多进程优缺点 优点:
多进程模式最大
- Linux下安装MemCached
字符串
memcached
前提准备:1. MemCached目前最新版本为:1.4.22,可以从官网下载到。2. MemCached依赖libevent,因此在安装MemCached之前需要先安装libevent。2.1 运行下面命令,查看系统是否已安装libevent。[root@SecurityCheck ~]# rpm -qa|grep libevent libevent-headers-1.4.13-4.el6.n
- java设计模式之--jdk动态代理(实现aop编程)
Supanccy2013
javaDAO设计模式AOP
与静态代理类对照的是动态代理类,动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类。java.lang.reflect 包中的Proxy类和InvocationHandler 接口提供了生成动态代理类的能力。
&
- Spring 4.2新特性-对java8默认方法(default method)定义Bean的支持
wiselyman
spring 4
2.1 默认方法(default method)
java8引入了一个default medthod;
用来扩展已有的接口,在对已有接口的使用不产生任何影响的情况下,添加扩展
使用default关键字
Spring 4.2支持加载在默认方法里声明的bean
2.2
将要被声明成bean的类
public class DemoService {