0%

问题

不同用户需要展示不同的登陆页

解决方案

修改web.xml欢迎页,跳转到index.mvc动态页面中

1
2
3
<welcome-file-list>
    <welcome-file>index.mvc</welcome-file>
</welcome-file-list>

创建controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Slf4j
@Controller
public class IndexController {

/**
* 页面跳转
*
* @return
*/
@RequestMapping(value = "/index", method = RequestMethod.GET)
public String index(@RequestParam Map map, Model model) {
if (map != null) {
model.addAllAttributes(map);
return (String) map.get("custom");
}
return "index";
}
}

效果

http://localhost:8080/hug_interview/?custom=ibd

http://localhost:8080/hug_interview/

修改service.xml文件

在tomcat安装目录下找到conf目录(tomcat/conf/service.xml)

path:虚拟路径,以 / 开头;

docBase:磁盘路径(绝对路径),Windows环境以盘符(D:/template)开始,linux环境如下;

reloadable:为 true 时 当web.xml或者class有改动的时候都会自动重新加载不需要从新启动服务;

1
<Context path="/hug_interview/informedConsent" docBase="/home/fllow/cloudFollowupImage/informedConsent" reloadable="true" />

PARQHTlYsId2u95

Java的List在删除元素时,一般会用list.remove(o)/remove(i)方法。在使用时,容易触碰陷阱,得到意想不到的结果。总结以往经验,记录下来与大家分享。

阅读全文 »

医院就诊凭条太多

挂号、抽血、B超、缴费等各个环节都能在自助机上完成操作,会产生很多凭条,凭条太多不方便,而且容易丢失。

CPU密集

CPU密集的意思是该任务需要大量的运算,而没有阻塞,CPU一直全速运行。

CPU密集任务只有在真正的多核CPU上才可能得到加速(通过多线程),而在单核CPU上,无论你开几个模拟的多线程,该任务都不可能得到加速,因为CPU总的运算能力就那些。

IO密集

IO密集型,即该任务需要大量的IO,即大量的阻塞。在单线程上运行IO密集型的任务会导致浪费大量的CPU运算能力浪费在等待。所以在IO密集型任务中使用多线程可以大大的加速程序运行,即时在单核CPU上,这种加速主要就是利用了被浪费掉的阻塞时间。

接着上一篇探讨线程池留下的尾巴,如何合理的设置线程池大小。

要想合理的配置线程池的大小,首先得分析任务的特性,可以从以下几个角度分析:

  1. 任务的性质:CPU密集型任务、IO密集型任务、混合型任务。

  2.   任务的优先级:高、中、低。

  3. 任务的执行时间:长、中、短。

  4. 任务的依赖性:是否依赖其他系统资源,如数据库连接等。

性质不同的任务可以交给不同规模的线程池执行。

对于不同性质的任务来说,CPU密集型任务应配置尽可能小的线程,如配置CPU个数+1的线程数,IO密集型任务应配置尽可能多的线程,因为IO操作不占用CPU,不要让CPU闲下来,应加大线程数量,如配置两倍CPU个数+1,而对于混合型的任务,如果可以拆分,拆分成IO密集型和CPU密集型分别处理,前提是两者运行的时间是差不多的,如果处理时间相差很大,则没必要拆分了。

若任务对其他系统资源有依赖,如某个任务依赖数据库的连接返回的结果,这时候等待的时间越长,则CPU空闲的时间越长,那么线程数量应设置得越大,才能更好的利用CPU。

当然具体合理线程池值大小,需要结合系统实际情况,在大量的尝试下比较才能得出,以上只是前人总结的规律。

最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 ) CPU数目*

比如平均每个线程CPU运行时间为0.5s,而线程等待时间(非CPU运行时间,比如IO)为1.5s,CPU核心数为8,那么根据上面这个公式估算得到:((0.5+1.5)/0.5)*8=32。这个公式进一步转化为:

最佳线程数目 = (线程等待时间与线程CPU时间之比 + 1) CPU数目*

可以得出一个结论: 

线程等待时间所占比例越高,需要越多线程。线程CPU时间所占比例越高,需要越少线程。 

以上公式与之前的CPU和IO密集型任务设置线程数基本吻合。

CPU密集型时,任务可以少配置线程数,大概和机器的cpu核数相当,这样可以使得每个线程都在执行任务

IO密集型时,大部分线程都阻塞,故需要多配置线程数,2*cpu核数

操作系统之名称解释:

某些进程花费了绝大多数时间在计算上,而其他则在等待I/O上花费了大多是时间,

前者称为计算密集型(CPU密集型)computer-bound,后者称为I/O密集型,I/O-bound。