摘要:在上文《尾递归与Continuation》里,我们谈到了尾递归的概念和示例,不过有些朋友对于尾递归的功效依然有所怀疑。因此现在,我再简单讲解一下尾递归的优化原理,希望能给大家以一定理性认识。 尾递归的循环优化 尾递归,即是递归调用放在方法末尾的递归方式,如经典的阶乘: 由于递归在方法的末尾,因此方法 阅读全文
尾调用和尾递归
2019-02-18 22:49 by GarfieldEr007, 302 阅读, 0 推荐, 收藏, 编辑
摘要:尾调用 1. 定义 尾调用是函数式编程中一个很重要的概念,当一个函数执行时的最后一个步骤是返回另一个函数的调用,这就叫做尾调用。 注意这里函数的调用方式是无所谓的,以下方式均可: 函数调用: func(···) 方法调用: obj.method(···) call调用: func.call(···) 阅读全文
递归和尾递归的区别和实现
2019-02-18 22:49 by GarfieldEr007, 544 阅读, 0 推荐, 收藏, 编辑
摘要:基本上大多数C的入门教材里都会说简单的递归,例如求阶乘n!,经典的本科入门书籍谭浩强的《C语言程序设计》,但后来看了《代码大全2》这本书,关于进阶和编码规范的书中提到了,这些计算机教材用愚蠢的例子阶乘和斐波那契数列来讲解阶乘,因为递归是强有力的工具,但用阶乘去计算阶乘之类的,很不明智,除了速度慢,还 阅读全文
尾调用优化
2019-02-18 22:46 by GarfieldEr007, 347 阅读, 0 推荐, 收藏, 编辑
摘要:尾调用(Tail Call)是函数式编程的一个重要概念,本文介绍它的含义和用法。 一、什么是尾调用? 尾调用的概念非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个函数。 上面代码中,函数f的最后一步是调用函数g,这就叫尾调用。 以下两种情况,都不属于尾调用。 上面代码中,情况一是调用 阅读全文
伪共享和缓存行
2019-02-18 22:39 by GarfieldEr007, 326 阅读, 0 推荐, 收藏, 编辑
摘要:在计算机系统中,内存是以缓存行为单位存储的,一个缓存行存储字节的数量为2的倍数,在不同的机器上,缓存行大小为32字节到256字节不等,通常来说为64字节。伪共享指的是在多个线程同时读写同一个缓存行的不同变量的时候,尽管这些变量之间没有任何关系,但是在多个线程之间仍然需要同步,从而导致性能下降的情况。 阅读全文
request.getParameter(“xxx”)的参数的取值
2019-01-07 21:09 by GarfieldEr007, 489 阅读, 0 推荐, 收藏, 编辑
摘要:request.getParameter(“xxx”)的参数的取值的几种可能: 1. Html中form表单中标签的name属性: <form name="form" method="post" action="checkUser"> 请输入用户姓名:<input type="text" name= 阅读全文
Request的getParameter和getAttribute方法的区别
2019-01-07 21:08 by GarfieldEr007, 241 阅读, 0 推荐, 收藏, 编辑
摘要:HttpServletRequest.getParameter("modelName"); 能取到想要的modelObject吗?经过测试之后,发现是不能的。后来想想,其他道理挺简单的,当两个Web组件之间为转发关系时,转发源会将要共享 request范围内的数据先用setAttribute将数据放 阅读全文
request.getParameter() 和request.getAttribute() 区别
2019-01-07 21:07 by GarfieldEr007, 273 阅读, 0 推荐, 收藏, 编辑
摘要:getParameter 是用来接受用post个get方法传递过来的参数的.getAttribute 必须先setAttribute.(1)request.getParameter() 取得是通过容器的实现来取得通过类似post,get等方式传入的数据,request.setAttribute()和 阅读全文
request.getParameter();的意思
2019-01-07 21:06 by GarfieldEr007, 28378 阅读, 2 推荐, 收藏, 编辑
摘要:对于httprequrest的request.getParameter()的作用,之前我只是在用它而不知道它到底有什么作用,今天看了一遍文章突然明白了其中的意思。 大致的内容如下: <form action="xxxxxxx.do" ><input name="name" value="哈哈"/>< 阅读全文
Java并发编程:线程池的使用
2019-01-06 23:07 by GarfieldEr007, 196 阅读, 0 推荐, 收藏, 编辑
摘要:在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务 阅读全文