Amp

Java中map.getOrDefault()方法的使用

喜夏-厌秋 提交于 2020-07-27 07:07:25
HashMap<String, String> map = new HashMap<>(); map .put( "name" , "cookie" ); map .put( "age" , "18" ); map .put( "sex" , "女" ); String name = map .getOrDefault( "name" , "random" ); System.out.println(name); // cookie,map中存在name,获得name对应的value int score = map .getOrDefault( "score" , 80 ); System.out.println(score); // 80,map中不存在score,使用默认值80 在这里看到的: https://blog.csdn.net/m0_37827190/article/details/106223703?utm_medium=distribute.pc_category.none-task-blog-hot-11.nonecase&depth_1-utm_source=distribute.pc_category.none-task-blog-hot-11.nonecase&request_id=### 来源: oschina 链接: https://my

spring mvc @test 线程异步调用 报错

走远了吗. 提交于 2020-07-27 05:31:53
错误如下: Error creating bean with name 'transactionManager': Singleton bean creation not allowed while the singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!) 解决方式如下 //线程池定义 private static final int CPU_CNT = Runtime.getRuntime().availableProcessors(); private static final int THREAT_CNT = CPU_CNT; private ExceutorService fixedThreadPool = Executors.newFixedThreadPool(THREAT_CNT ); @Test public void testCommisionCalu() throws InterruptedException { Thread mainThread = Thread. currentThread (); List<Object> orders = Lists.

厉害了!除了find命令,还有这么多文件查找命令,高手必备!

我与影子孤独终老i 提交于 2020-07-27 05:25:51
大家好,我是良许。 在系统里查找文件,是所有工程师都必备的技能(不管你用的是 Windows 、Linux、还是 MacOS 系统)。对于 Linux 操作系统,单单一个 find 命令就可以完成非常多的搜索工作。 但是,文件搜索命令远不止一个 find 命令,还有很多。本文就对 Linux 下文件搜索命令进行一个科普,让你能够在短时间内找到自己需要的文件。 1. find find 命令应该是最经典的命令了,谈到搜索工具第一个想到的肯定是 find 命令。但是,find 命令非常强大,想要把它的功能都介绍一遍,恐怕要写好几篇文章。 所以,这里就偷个懒,介绍最基本的,根据文件名查找文件的方法。假如我们想搜索当前目录(及其子目录)下所有 .sh 文件,可以这样搜索: 2. locate locate 是另外一个根据文件名来搜索文件的命令。区别于 find 命令,locate 命令无需指定路径,直接搜索即可。 这个命令不是直接去系统的各个角落搜索文件,而是在一个叫 mlocate.db 的数据库下搜索。这个数据库位于 /var/lib/mlocate/mlocate.db ,它包含了系统里所有文件的索引,并且会在每天早上的时候由 cron 工具自动更新一次。 正因为如此,locate 的搜索速度远快于 find 命令,因为它直接在数据库里检索,速度自然更快。 locate

基于Spring Boot实现Mybatis的多数据源切换和动态数据源加载

生来就可爱ヽ(ⅴ<●) 提交于 2020-07-27 05:11:51
环境依赖:   Spring Boot:1.5.9   JDK:1.8.0   MySQL:5.7.17   Mybatis:3.3.0     本文主要就mybatis的多数据源切换和动态数据源加载的实现原理做分享;对于mybatis的基础可自行百度。由于在开始学习的时候,发现网上有很多人把多数据源切换和动态数据源加载混为一谈,导致在实现动态加载的时候,所很苦恼。所以有必要在这里做以简要说明:   多数据源切换:指项目所需要不止一个数据库的连接信息,eg:同一数据库地址下的不同库或者压根连地址都不同。   动态加载:指所需要的数据所在的数据库信息在项目启动前并不知道,只有在项目运行后根据业务逻辑获取到对应的数据库信息,并在代码的运行过程中,向Spring Boot中添加一个或多个mybatis实例。    单一数据源的连接   顾名思义,在项目中,在项目中只需要配置一个数据库的信息即可,业务所需要的所有数据均在这一个数据库下;这种场景通常能够适用于绝大部分的实际需求,因此这种实现的原理再次不做赘述,如有需求可自行百度。具体实现可参考源码spring-boot-mybatis-demo。 多数据源切换   业务场景:需要分别获取所有的用户信息和学生信息;但是已知用户信息在mybatis_demo数据库中,学生信息在mybatis_demo2 数据库中。如下图所示:

Android FrameWork——Binder机制详解(1)

一个人想着一个人 提交于 2020-07-27 04:20:03
1.前面我曾经发表过一篇blog介绍了aidl实现机制(aidl实现机制浅析),不过那只是停留在java表层,并遗留了一个问题,那就是BinderProxy.transact 该方法本地化实现,同时我指出了它的具体代码位置: \frameworks\base\core\jni\android_util_Binder.cpp->static jboolean android_os_BinderProxy_transact(JNIEnv* env, jobject obj,jint code, jobject dataObj,jobject replyObj, jint flags) 要进一步深入进去,其实涉及了android ipc机制,也就是android独有进程通信机制的Binder,本文主要就是想深入说明Binder机制, 首先说明,这个有点难度,只是对我来说,呵呵,我参加完台湾教授,高焕堂先生开设的android高阶培训课程(android软硬件结合开发培训),并反复看了课件android底层Android框架底层结构知多少?以及网上其它同仁的blog后才有所体会,不过,在些这blog前我还是有不少不解之处,我和大家一样,带着疑问去写这个blog,边写边学习,有问题我会遗留,同时可能有不少不正确的地方,希望路过的高手解答一下,小弟不胜感激。 2.好了,结束开场白

PrestaShop 1.7 创建税单的时候中文显示方框

淺唱寂寞╮ 提交于 2020-07-27 04:07:13
如果你的后台使用的是英文的话,当你创建税单的时候,你会发现所输入的中文是方框。 如果你后台切换使用简体中文的话,你创建的税单是没有问题的 如果你使用的是中文的话,你会发现你创建的税单中文是没有问题。 这是因为针对不同语言环境下,PrestaShop 使用的字体不一样,当使用英语环境的时候,但是内容是中文的时候 PrestaShop 不能够使用正确的中文字体。 在英语发布的 PDF 中,PrestaShop 使用了 DejaVuSans 的字体,这个字体是不能够支持简体中文的。 你需要访问 classes/pdf/PDFGenerator.php 文件。 你会看到下面的配置: public $font_by_lang = array( 'ja' => 'cid0jp', 'bg' => 'freeserif', 'ru' => 'freeserif', 'uk' => 'freeserif', 'mk' => 'freeserif', 'el' => 'freeserif', 'en' => 'dejavusans', 'vn' => 'dejavusans', 'pl' => 'dejavusans', 'ar' => 'dejavusans', 'fa' => 'dejavusans', 'ur' => 'dejavusans', 'az' => 'dejavusans',

#转贴分享# 面向对象编程的十大原则

♀尐吖头ヾ 提交于 2020-07-27 03:48:44
众所周知,面向对象的设计原则(Object-Oriented Design Principles)是面向对象编程(OOP)的核心。但是,如今有许多Java程序员在追求诸如 Singleton 、 Decorator 或 Observer 等设计模式的同时,却忽略了面向对象的分析和设计。我们除了要学习诸如抽象、封装、多态和继承之类的基础知识,还需要了解面向对象的设计原则。据此,我们可以创建出简洁的模块化设计,以便后期轻松地开展测试,调试和维护。 不知您是否听说过OOP的SOLID设计原则(请参见-- https://javarevisited.blogspot.com/2018/02/top-5-java-design-pattern-courses-for-developers.html )?作为一种面向对象设计原则,它具体包括如下十个部分。 1.DRY(Don’t repeat yourself) 顾名思义,DRY表示不要编写重复的代码,应尽量使用抽象类(Abstraction)来抽象出目标事物。例如:如果您有两个以上的代码块,那么就应当考虑使其成为一个单独的方法。如果您多次用到某个硬编程(hard-coded)的值,那么就应当将它们设为public final constant(请参见-- http://javarevisited.blogspot.com/2011/12

源码分析Dubbo监控中心实现原理

落花浮王杯 提交于 2020-07-27 01:07:27
Dubbo 监控的实现基本原理就是在服务调用时收集服务调用并发度、服务响应时间,然后以一定频率向监控中心汇报统计数据。 1、源码分析MonitorFilter过滤器 过滤器作用 监控过滤器,向监控中心汇报服务调用数据。 使用场景 搭建监控中心监控Dubbo服务调用。 阻断条件 非阻断过滤器。 1.1 MonitorFilter声明 /** * MonitorFilter. (SPI, Singleton, ThreadSafe) */ @Activate(group = {Constants.PROVIDER, Constants.CONSUMER}) public class MonitorFilter implements Filter { // 省略具体代码 } > 注:MonitorFilter会在生产者、消费者两端生效。 1.2 getConcurrent方法详解 // concurrent counter private AtomicInteger getConcurrent(Invoker<!--?--> invoker, Invocation invocation) { String key = invoker.getInterface().getName() + "." + invocation.getMethodName(); // @1

【经验】GaussDB(for MySQL)性能优化 —— 日志的“快递驿站”

巧了我就是萌 提交于 2020-07-26 23:51:54
GaussDB(for MySQL)数据库在写入性能上,在业界同类产品中是最好的,这主要得益于GaussDB(for MySQL)在MySQL内核方面的诸多优化。其中有一项从“送快递”得来灵感的优化——事务异步提交,值得我们分析。 背景 我们先来看看MySQL 8.0的事务提交的大致流程 图1 MySQL 8.0事务执行流程 以上流程,是MySQL8.0对WAL原则的一种实现,这个流程意味着,任何一个事务的提交,一定要完成write buffer和flush to disk流程。 然而那么这个流程中,有一个问题:每个服务器的CPU是有限的,服务器能处理的Thread也是有上限的,那么当我们的业务的并发数量,远远大于我们服务器能并行处理的数量时,那么后来的事务,只能等待前面的事务提交后才能被处理。在这之前,他们什么也做不了。因此,在大并发场景下,如何进一步提升线程的使用率,是大并发事物写入的一个关键。 灵感来源于生活 一个优化,并不是凭空想象出来的,有时候,往往来源于现实生活。下面,我们先来看看我们身边,和事务提交流程非常类似的一个例子:快递。 现在的快递配送,一般一个快递员会负责一片区域,快递刚开始兴起时,数量不多,那么一个快递员基本上可以在规定时间内完成配送。 图2 过去的快递配送 但是,随着快递数量越来越多,一个快递员要在一个小区配送很长的时间,才能到下一个小区

PAT-021-喜欢的解题思路集

筅森魡賤 提交于 2020-07-26 23:45:42
习题3-1 比较大小 (10分) 本题要求将输入的任意3个整数从小到大输出。 输入格式: 输入在一行中给出3个整数,其间以空格分隔。 输出格式: 在一行中将3个整数从小到大输出,其间以“->”相连。 输入样例: 4 2 8 输出样例: 2->4->8 #include <stdio.h> int main() { int num[3]={0}; int t,i,j; for (i=0;i<3;++i) { scanf("%d",&num[i]); } for (i=0;i<2;++i) /*喜欢原因:利用对数组的遍历,i,j,范围的取舍技巧,实现全部数值的大小比较*/ { for (j=0;j<2-i;++j) { if(num[j]>num[j+1]) { t=num[j]; num[j]=num[j+1]; num[j+1]=t; } } } printf("%d->%d->%d\n",num[0],num[1],num[2]); return 0; } 来源: oschina 链接: https://my.oschina.net/u/4429979/blog/4322246