当前位置: 首页 > news >正文

企业网站建设记什么会计科目网站开发费用多少钱

企业网站建设记什么会计科目,网站开发费用多少钱,长春财经学院录取分数线,麓谷网站建设一、函数式编程概念 函数式编程是一种编程的范式和编程的方法论(programming paradigm)#xff0c;它属于结构化编程的一种#xff0c;主要的思想是把运算的过程尽量通过一组嵌套的函数来实现。 函数式编程的几个特点#xff1a; 函数可以作为变量、参数、返回值和数据类…一、函数式编程概念 函数式编程是一种编程的范式和编程的方法论(programming paradigm)它属于结构化编程的一种主要的思想是把运算的过程尽量通过一组嵌套的函数来实现。 函数式编程的几个特点 函数可以作为变量、参数、返回值和数据类型。基于表达式来替代方法的调用函数无状态可以并发和独立使用函数无副作用不会修改外部的变量函数结果确定性同样的输入必然会有同样的结果。 函数式编程的优点 代码简洁开发效率高接近自然语言易于理解由于函数的特性易于调试和使用易于并发使用脚本语言的特性易于升级部署 二、FunctionalInterface 函数式接口 FunctionalInterface是 Java 8 新加入的一种接口注解在接口层面且注解的接口要有且仅有一个抽象方法。具体就是说注解在Inteface上且interface里只能有一个抽象方法可以有多个default方法。 函数式接口的一大特性就是可以被lambda表达式和函数引用表达式代替 三、Lambda 表达式 Lambda 表达式是一种匿名函数(对 Java 而言这并不完全正确但现在姑且这么认为)简单地说它是没有声明的方法也即没有访问修饰符、返回值声明和名字。 你可以将其想做一种速记在你需要使用某个方法的地方写上它。当某个方法只使用一次而且定义很简短使用这种速记替代之尤其有效这样你就不必在类中费力写声明与方法了。 四、使用场景 4.1、Redis工具类 JAVA是面向对象的通常方法的入参都是类对象或者变量而函数式编程就是把一个函数(方法)作为入参那这个有啥好处呢 简单举个例子 当多个方法都有同样的操作时我们通常想的是将其共同抽象成独立方法但是整个流程是一样的只是不同场景下具体业务处理处理不同时我们该怎么抽象呢如果像下面那样操作明显就是破坏了整个业务流程 public Object common1(){return common1;}public Object common2(){return common2;}public void method1(Object o){Object o1 this.common1();//doSomeingSystem.out.println(o1);this.common2();}public void method2(Object o){Object o1 this.common1();//doSomeingSystem.out.println(-----------o1);this.common2();} 那想再不破坏整个流程的情况改怎么处理呢可以利用函数式编程把接口作为入参当具体业务处理时再去实现其具体业务。 FunctionalInterface public interface OperationT,R {public T operate(R r); }public void common(OperationObject,Object operation){//step1Object o1 this.common1();operation.operate(o1);//step3this.common2();}public void method1Operation(Object o){this.common(o1 - o1);}public void method2Operation(Object o){this.common(o1 - o1);} 上面的介绍过于抽象下面介绍一个很实用的场景。 对于一些池的操作比如redisPool或者线程池都有一些通用的操作首先先从池中取出对象然后实现具体业务然后再把对象放入池中 可以看出这里有操作流程上有重复的地方如果我们把这写都写在具体业务中过于耦合和繁琐那我们就可以像上面的demo一样将其公用部分抽象出来这里已redisPool为例如下 FunctionalInterface public interface OperationT,R {public T operate(R r);} public class RedisTool2 {private static final String LOCK_SUCCESS OK;private static final Long RELEASE_SUCCESS 1L;//NX|XX, NX -- Only set the key if it does not already exist;// XX -- Only set the key if it already exist.private static final String SET_IF_NOT_EXIST NX;//EX|PX, expire time units: EX seconds; PX millisecondsprivate static final String SET_WITH_EXPIRE_TIME PX;private static volatile JedisPool jedisPool null;public static JedisPool getRedisPoolUtil() {if(null jedisPool ){synchronized (RedisTool2.class){if(null jedisPool){GenericObjectPoolConfig poolConfig new GenericObjectPoolConfig();poolConfig.setMaxTotal(100);poolConfig.setMaxIdle(10);poolConfig.setMaxWaitMillis(100*1000);poolConfig.setTestOnBorrow(true);jedisPool new JedisPool(poolConfig,192.168.10.151,6379);}}}return jedisPool;}public static T T doOperation(OperationT,Jedis operation){Jedis jedis jedisPool.getResource();try {return operation.operate(jedis);}catch (Exception e){return null;}finally {jedisPool.returnResource(jedis);}}//使用匿名内部类实现public static boolean tryGetDistributedLock1(final String lockKey, final String requestId, final int expireTime) {return doOperation(new OperationBoolean, Jedis() {public Boolean operate(Jedis jedis) {String result jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);if (LOCK_SUCCESS.equals(result)) {return true;}return false;}});}//使用lambda表达式实现public static boolean tryGetDistributedLock2(final String lockKey, final String requestId, final int expireTime) {return doOperation(jedis -{String result jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);if (LOCK_SUCCESS.equals(result)) {return true;}return false;});}//使用lambda表达式实现public static boolean tryGetDistributedLock2(final String lockKey, final String requestId, final int expireTime) {String result doOperation(jedis -jedis.set(lockKey, requestId, SET_IF_NOT_EXIST,SET_WITH_EXPIRE_TIME, expireTime));return LOCK_SUCCESS.equals(result);}public boolean releaseDistributedLock(String lockKey, String requestId) {String script if redis.call(get, KEYS[1]) ARGV[1] then return redis.call(del, KEYS[1]) else return 0 end;Object result this.execute(jedis -jedis.eval(script, Collections.singletonList(COMMON_LOCK_KEYlockKey), Collections.singletonList(requestId)));return RELEASE_SUCCESS.equals(result);}//普通方法public static boolean tryGetDistributedLock(String lockKey, String requestId, int expireTime) {Jedis jedis jedisPool.getResource();try {String result jedis.set(lockKey, requestId, SET_IF_NOT_EXIST, SET_WITH_EXPIRE_TIME, expireTime);if (LOCK_SUCCESS.equals(result)) {return true;}return false;}catch (Exception e){return false;}finally {jedisPool.returnResource(jedis);}} }4.2、分布式定时任务 FunctionalInterface public interface Operation {public void execJob();}抽象基类把获取锁和释放锁抽象到寄类实现在具体业务job不用关心这些 Component public abstract class AbstractBasicTask {private static final Logger logger LoggerFactory.getLogger(AbstractBasicTask.class);AutowiredRedisService redisService;public void doOperation(String taskName,Operation operation){String requestId DateUtils.getNowTimeMill();// 控制并发锁if (redisService.tryGetDistributedLock(taskName, requestId,600)) {long start System.currentTimeMillis();try {// 开始执行定时任务operation.execJob();logger.info({}:执行定时任务完成耗时(毫秒){}, taskName, (System.currentTimeMillis() - start));} catch (Exception e) {logger.error(taskName :执行定时任务异常, e);} finally {// 释放锁try {redisService.releaseDistributedLock(taskName,requestId);} catch (Exception e) {logger.error(taskName :释放锁异常, e);}}} else {logger.info({}:获取锁失败, taskName);}}/*** 执行JOB业务逻辑*/public abstract void exec();具体执行任务demoJob Component EnableScheduling public class demoJob extends AbstractBasicTask{Scheduled(cron 1 * * * * ?)Overridepublic void exec() {this.doOperation(demoJob, this::testA);}private void testA(){System.out.println();} }总结比较常用的典型的应用场景是当我们运算的过程可以抽象成好几个步骤时把其中相同部分抽象成公共方法像上面的common方法并且把函数式接口作为其入参在具体业务实现中使用lambda表达式实现具体业务实现像上面的method1Operation、method2Operation。
http://www.tj-hxxt.cn/news/234157.html

相关文章:

  • 长春 行业网站哪个网站可以做图片
  • 打鱼在线游戏网站建设手机网站好还是h5好
  • 电子商务网站的功能有哪些陈村网站开发
  • 上海网站建设 乐云seo网站自适应怎么做
  • 网站设置多少个关键词购物网站页面设计
  • 做个免费的网站去男科医院花了9000多
  • 做网站从哪方面入门天猫招商
  • 网站开发上线ftp怎么用做局域网网站
  • 网站如何从行为数据进行优化福建龙岩有哪些网络平台
  • 网页布局照着别的网站做会侵权吗合肥建设学校网站
  • 重庆网站建设论坛手工企业网站模板
  • 微网站开发报价个人ip打造范文
  • 免费推广店铺的网站小米装修
  • 利用wps做网站flipaclip动画制作
  • 老板说做个网站我要怎么做安阳县人口
  • 苏州网站开发公司鹅鹅鹅怎么自己做一个论坛
  • 火星建站免费wap自助建站正规公司简历模板
  • 新昌县城乡建设局网站市场营销推广策划
  • 微网站建设流程网站开发 定制 多少 钱
  • 佛山著名网站建设公司网页设计作业网站素材和效果图
  • 网站建设案例wordpress前端登录页面
  • 网站模板下载百度云链接怎么做免费网站建设必择山东绘政科技
  • 网站地图 xml html校园微网站建设
  • p2p网贷网站建设公司城乡建设厅官方网站办事大厅
  • 做网站的公司wordpress文章多个分类显示
  • 志丹网站建设柳州制作网站
  • 网站引导动画怎么做的中国建设行业网官网
  • 做网站和做小程序哪个好做淘宝还有必要做网站吗
  • 建站之星怎么安装企业展厅设计公司大型
  • h5建站网站莒南网站建设