channel 简单的应用

package main import "fmt" func calc(intChan chan int, resChan chan int, exitChan chan bool){ fmt.Println("calc start") count := 0 for v := range intChan { flag := true for i := 2; i < v; i++ { if v % i == 0 { flag = false break } } if flag { resChan <- v } count++ } fmt.Println("calc 运行了 ", count, " 次") exitChan <- true } func main(){ intChan := make(chan int, 1000) resChan := make(chan int, 1000) exitChan := make(chan bool, 8) // 检查其它 goroute 是否结束运行 for i := 0; i < 1000; i++ { intChan <- i } close(intChan) // 如果要用 range 遍历 channel , 则必须先 关闭 for i := 0; i < 8; i++ { go calc(intChan, resChan, exitChan) } for i := 0; i < 8; i++ { <- exitChan // 通过阻塞的方式 等待上面的 协程都运行完 } close(resChan) for v := range resChan { fmt.

hashmap 自定义类如何get

hashmap中的自定义类 使用hashmap,其中的key是自定义类。结果发现key相同的情况下,hashmap当成不同的key处理。 因为hashmap查找key时,先比较hashcode,然后用equal比较内容,只要不相同,就当成不同的key。 如:{(5,) =1, (2,) =1, (1,2,) =1, (1,3,) =1, (3,) =1, (2,) =1, (3,4,) =1, (5,) =1, (1,) =1, (3,) =1, (1,2,) =1, (4,) =1, (3,4,) =1} 所以要重写equal和hashcode。 重写equal只要比较内容是否相同就行了。 如果没有重写hashcode,依然没有效果。因为java用对象的地址计算hashcode,只有hashcode相同(->地址相同?)才能调用equal。 重写hashcode最简单的处理方式是让所有对象返回相同值,这样hashmap就会调用equal方法,比较内容。 但是,写好hashcode,可以减少equal的调用次数。 只有在hashcode相同的情况下才会调用equal,而不同对象拥有相同hashcode的情况比较少见(或者没有?)。 写hashcode和equal,参考String的hashcode写法。可以学习jdk的源码。 最后结果: {(1,) =1, (1,2,) =2, (2,) =2, (3,) =2, (4,) =1, (1,3,) =1, (5,) =2, (3,4,) =2} package arm; import java.util.ArrayList; import java.util.Collections; public class ItemSet { private ArrayList<String> itemSet; public ItemSet() { itemSet = new ArrayList<>(); } public ItemSet(String[] is) { itemSet = new ArrayList<>(); for (String i : is) { itemSet.

微信:APP支付-JAVA服务端-订单流程

本章文献基本都来源于微信支付平台,详情请看微信官方文档:APP支付 系统交互图 文档位置:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_3 APP支付-业务流程 根据文档内容,服务端只要做好获取 prepay_id 和 sign 传送给客户端,并做好回调接收处理就行 服务端demo APP支付文档里面的demo,主要是供客户端使用的,对后台来说,基本没什么用。 不过,依旧有我们后端可以直接拿来使用的demo: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 这个demo主要用于付款码/扫码/H5支付使用,但里面提供了很多方便的工具类。 这里我们引用demo里面的工具类并继承WXPayConfig和实现IWXPayDomain的抽象接口。 public class WxPayConfigImpl extends WXPayConfig{ // 设置应用Id public static String appid = "2019102168481752"; // 设置商户号 public static String mch_id = "1230000109"; // 设置设备号(终端设备号(门店号或收银设备ID),默认请传"WEB",非必需) public static String device_info = "WEB"; // 设置字符集 public static String key = "192006250b4c09247ec02edce69f6a2d"; private static WxPayConfigImpl INSTANCE; public static WxPayConfigImpl getInstance() throws Exception { if (INSTANCE == null) { synchronized (WxPayConfigImpl.

Android存储路径解析

本文讲的是Android存储路径,当需要存储文件或者清除缓存时可以看一下,下面是原文链接,复制一份以防意外 彻底搞懂Android文件存储—内部存储,外部存储以及各种存储路径解惑 前言: 对于任何一个应用来说,无论是PC端应用还是Android应用,存储肯定是必不可少的。对于很多做Android开发的同学来说,可能认为文件存储很简单,调用一些诸如getFilesDir,getExternalStorageDirectory方法行了,但是虽然说它们会调用相应的方法来实现简单的数据存储。但是他们未必就搞懂了他的数据到底存在了哪里,以及他的数据是否存对了地方,或者是否做好了版本兼容。下面我将从这几个地方来解答大家常见的困惑: 1、Android中内部存储,外部存储的概念 2、不同安卓版本下getDataDirectory,getFilesDir,getCacheDir,getDir,getExternalStorageDirectory,getExternalStoragePublicDirectory,getExternalFilesDir,getExternalCacheDir,getExternalCacheDir,getRootDirectory等方法的区别和联系 3、清除数据和清除缓存到底清除了什么数据 4、/storage/sdcard,/sdcard,/mnt/sdcard,/storage/emulated/0之间的关系 5、一张图看懂Ram,Rom,以及扩展存储(TF卡)的区别;内部存储,外部存储的区别。 一、Android中内部存储,外部存储的概念 内部存储 概念:注意内部存储不是内存。内部存储位于系统中很特殊的一个位置,如果你想将文件存储于内部存储中,那么文件默认只能被你的应用访问到,且一个应用所创建的所有文件都在和应用包名相同的目录下。也就是说应用创建于内部存储的文件,与这个应用是关联起来的。当一个应用卸载之后,内部存储中的这些文件也被删除。从技术上来讲如果你在创建内部存储文件的时候将文件属性设置成可读,其他app能够访问自己应用的数据,前提是他知道你这个应用的包名,如果一个文件的属性是私有(private),那么即使知道包名其他应用也无法访问。 内部存储空间十分有限,因而显得可贵,另外,它也是系统本身和系统应用程序主要的数据存储所在地,一旦内部存储空间耗尽,手机也就无法使用了。所以对于内部存储空间,我们要尽量避免使用。Shared Preferences和SQLite数据库都是存储在内部存储空间上的。内部存储一般用Context来获取和操作。 访问内部存储的API方法: 1、Environment.getDataDirectory() 2、getFilesDir().getAbsolutePath() 3、getCacheDir().getAbsolutePath() 4、getDir(“myFile”, MODE_PRIVATE).getAbsolutePath() 外部存储 概念:最容易混淆的是外部存储,因为老的Android系统的跟新的Android系统是有差别的,很多人去网上查找资料,看了一下以前的资料,又看了一下现在的资料,但是发现它们说法不一样然后就困惑了。首先说一个大家普遍的概念“如果在pc机上是区分外部存储和内部存储的话,那么电脑自带的硬盘算是内部存储,U盘或者移动硬盘就是外部存储了。”因此很多人带着这样的理解去看待安卓手机,把内置存储(机身存储)当做内部存储,而把扩展的SD卡当做是外部存储。这么认为确实没错,因为在4.4(API19)以前的手机上确实是这样的,手机自身带的存储卡就是内部存储,而扩展的SD卡就是外部存储。但是从4.4的系统开始,很多的中高端机器都将自己的机身存储扩展到了8G以上,比如有的人的手机是16G的,有的人的手机是32G的,但是这个16G,32G是内部存储吗,不是的!!!,它们依然是外部存储,也就是说4.4系统及以上的手机将机身存储存储(手机自身带的存储叫做机身存储)在概念上分成了”内部存储internal” 和”外部存储external” 两部分。既然16G,32G是外部存储,那有人又有疑惑了,那4.4系统及以上的手机要是插了SD卡呢,SD卡又是什么呢,如果SD卡也是外部存储的话,那怎么区分机身存储的外部存储跟SD卡的外部存储呢?对,SD卡也是外部存储,那怎么区分呢,在4.4以后的系统中,API提供了这样一个方法来遍历手机的外部存储路径: File[] files; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { files = getExternalFilesDirs(Environment.MEDIA_MOUNTED); for(File file:files){ Log.e(“main”,file); } } 1 2 3 4 5 6 7 如果你的手机插了SD卡的话,那么它打印的路径就有两条了,例如我的华为荣耀7插了SD卡,它的结果如下: /storage/emulated/0/Android/data/packname/files/mounted /storage/B3E4-1711/Android/data/packname/files/mounted 其中/storage/emulated/0目录就是机身存储的外部存储路径 而/storage/B3E4-1711/就是SD卡的路径 他们统称为外部存储 访问外部存储的API方法: 1、Environment.getExternalStorageDirectory().getAbsolutePath() 2、Environment.getExternalStoragePublicDirectory(“”).getAbsolutePath() 3、getExternalFilesDir(“”).getAbsolutePath() 4、getExternalCacheDir().getAbsolutePath() 大家对Android的外部存储会产生疑问,主要是现在很多的手机已经从物理上看不到外部存储了,以前的手机都有,就是那种黑色的内存卡,8G,16G,32G的,可以像U盘一样插拔,以前很流行,存储空间不够了,就去买个内存卡(准确说是SD卡,说成内存卡又会引起误解)回来,后来的手机比如现在我用的华为荣耀7,厂家已经把机身存储扩展到了16G了,只是在存储概念上了分为了内部存储(内部internal)和外部存储(外部external),其实它们都集成在一起了。当然如果你觉得16G不够用,那他支持通过插SD卡来扩充容量吗?支持的,荣耀7为例,它是三合二卡槽。卡槽1:Nano SIM卡;卡槽2:Nano SIM卡或Micro SD卡。默认卡槽1为4G主卡,可以在设置中更改4G主卡卡槽;不支持热插拔,插拔卡托后需重启手机。这样插入的SD卡也属于外部存储。所以手机的外部存储可能包含两部分,一是机身存储的外部存储部分,还有一个是SD卡部分 二、不同Android版本下getDataDirectory,getFilesDir,getCacheDir,getDir,getExternalStorageDirectory,getExternalStoragePublicDirectory,getExternalFilesDir,getExternalCacheDir,getExternalCacheDir,getRootDirectory的区别和联系 上面这些方法,我们可能似曾相识,但是对于有些同学来说却又很难分清出,主要还是不同的Android版本的问题。为了方便大家理解,我先简要介绍以上各个方法,为方便大家理解我把这些方法的结果打印出来(以下的打印结果是基于荣耀7的(系统版本6.0): 1、Environment.getDataDirectory() = /data 这个方法是获取内部存储的根路径 2、getFilesDir().getAbsolutePath() = /data/user/0/packname/files

sql 查询每隔3天的量

思路:根据日期yyyy-MM-dd mm:HH:ss 格式,天数dd/3 归于dd/3×3 ,00,01,02 为00,进行分组统计。 sql如下: select substr(FROM_UNIXTIME((curtime)/1000),1,14) || case when substr(FROM_UNIXTIME((curtime)/1000),15,2)/3*3 <10 then '0'||substr(FROM_UNIXTIME((curtime)/1000),15,2)/3*3 else substr(FROM_UNIXTIME((curtime)/1000),15,2)/3*3 end ||'00' as dt, count(1) FROM TXN WHERE curtime > UNIX_TIMESTAMP('2018/10/11 14:22:51') GROUP BY dt;

Excel中在不改变原有排序的条件下,将表里的一列数据排序,并将排名结果显示在另一列。

有时我们在排序时,比如排列成绩时,我们不能变动学生的总成绩顺序,但是还要给出学生的总排名,那么我们就需要使用到Rank()函数 Rank()函数的使用:返回某数字再一列数字中相对于其他数值的大小排名 1.首先在第一个需要排名的空输入=RANK() 2.然后输入需要排序的第一个数值的位置 3.再输入需要排序的范围,要绝对引用,即在字母和数字前加$,最后输入降序排列:0,升序排列:1 降序: 升序: 注:简单,仅作笔记用,免得用的时候总是忘

点击不同的单选按钮(radio)出现不同的内容

前台的一个模块可以调用不同的数据 html: <p> <input id="list" onclick="acheck1()" type="radio" name="list" value="1">选项1 <input id="list" onclick="acheck2()" type="radio" name="list" value="2">选项2 </p> <p class="box1" style="display:none">点击第一个显示这里</p> <p class="box2" style="display:none">点击第二个显示这里</p> js: function acheck1(){ $(".box1").show(); $(".box2").hide(); } function acheck2(){ $(".box2").show(); $(".box1").hide(); } $(function(){ var list = $('#list:checked').val(); if( list == 1){ $(".box1").show(); } if( list == 2){ $(".box2").show(); } });

android之清理缓存实现

android之清理缓存实现 一. 清理缓存首先要搞清楚清理哪些东西, app本身的功能比如录像,录音,更新都会产生文件,需要清理app的默认缓存地址cache 二. 搞清楚要清理的文件夹位置 首先app自身的功能就要看自己把它放在了什么位置默认缓存地址:getActivity().getExternalCacheDir(); 这个位置是在storage/emulated/0/Android/data/com.xxxxxapp/cache 三. 搞起 代码功能模块: 获取app缓存大小,以字节为单位获取某个文件夹的大小,以字节为单位把字节单位换算成常用单位把缓存大小设置到页面,清理前一次,清理后一次删除文件夹功能清除app缓存 /** * 获取app的缓存大小 * 1. 录制的视频/storage/emulated/0/xueliangapp/video/1573972925136.mp4 * 2. 录制的音频/storage/emulated/0/xueliangapp/radio/1573972925136.amr * 3. 下载的更新包/storage/emulated/0/Android/data/com.sdxzt.xueliangapp_v3/files/Download/xueliang_update.apk * 4. 缓存/storage/emulated/0/Android/data/com.sdxzt.xueliangapp_v3/cache */ File videoDir,radioDir,filesDir,cacheDir; private String getAppCache(){ long fileSize = 0; String cacheSize = "0KB"; videoDir = new File(Environment.getExternalStorageDirectory()+"/xueliangapp/video"); Log.d(TAG, "getAppCache: videoDir大小: "+getDirSize(videoDir)); radioDir = new File(Environment.getExternalStorageDirectory()+"/xueliangapp/radio"); Log.d(TAG, "getAppCache: radioDir大小: "+getDirSize(radioDir)); filesDir = getActivity().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS); Log.d(TAG, "getAppCache: filesDir大小: "+getDirSize(filesDir)); ///storage/emulated/0/Android/data/com.sdxzt.xueliangapp_v3/files,这里面有download文件夹,里面是下载的更新包 cacheDir = getActivity().getExternalCacheDir(); Log.d(TAG, "

Caffeine 使用与原理

这里写自定义目录标题 caffeine、GuavaCache、EhCache 比较Caffeine 基础使用SpringBoot 集成Caffeine配置注解@Cacheable@CachePut@CacheEvict@Caching@Caching 其他功能监听器(Removal )统计(Statistics) 补充说明 Caffeine 策略分析过期策略更新策略填充策略同步加载(Loading)异步加载(Asynchronously Loading) 驱逐策略基于大小(size-based)基于时间(Time-based)基于引用(reference-based) Caffeine 原理分析缓存算法FIFOLRULFU Caffeine 源码分析 caffeine、GuavaCache、EhCache 比较 Google Guava工具包中的一个非常方便易用的本地化缓存实现,基于LRU算法实现,支持多种缓存过期策略。 EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。 Caffeine是使用Java8对Guava缓存的重写版本,在Spring Boot 2.0中将取代,基于LRU算法实现,支持多种缓存过期策略。 场景1:8个线程读,100%的读操作 场景2:6个线程读,2个线程写,也就是75%的读操作,25%的写操作 场景3:8个线程写,100%的写操作 Caffeine 基础使用 SpringBoot 集成 添加pom文件 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> </dependency> 添加配置文件 spring.cache.cache-names=ConfigCache spring.cache.caffeine.spec=initialCapacity=50,maximumSize=500,expireAfterWrite=4s spring.cache.type=caffeine Application.class中添加 @EnableCaching 注解 @SpringBootApplication @EnableCaching public class Application { public static void main(String[] args) { SpringApplication.run(Application .class, args); } } 添加需要缓存的方法 import lombok.extern.slf4j.Slf4j; import org.

腾讯云加速 配置docker加速镜像

https://cloud.tencent.com/document/product/457/9113 CVM 实例通用配置 Liunx 说明: 本文以 Ubuntu 16.04+、Debian 8+、CentOS 7 的配置为例,其他版本请结合实际情况进行配置。 创建或修改 /etc/docker/daemon.json 文件,并写入以下内容: vi /etc/docker/daemon.json { "registry-mirrors": [ "https://mirror.ccs.tencentyun.com" ] } 依次执行以下命令,重新启动 Docker 服务。 sudo systemctl daemon-reload sudo systemctl restart docker 检查加速器是否生效 执行 docker info 命令,返回结果中包含以下内容,则说明配置成功。 Registry Mirrors: https://mirror.ccs.tencentyun.com

【行业全景图】半导体集成电路拐点将至,新一轮产业爆发只等5G

转载自:学术plus(ID:caeit-e) 作者:唐志强 本文8510字19图,建议阅读22分钟。 本文从市场的角度介绍半导体集成电路行业基本概况、全球范围竞争格局、我国集成电路市场规模等。 半导体集成电路行业是一类特殊的行业,几乎整个电子信息领域都有半导体产品应用。自上世纪五十年代半导体技术商用、集成电路发明以来,电子信息技术改变了人类的生产生活方式,人类社会发展快速步入了信息时代。作为支撑信息时代的基石行业,半导体集成电路扮演着不可或缺的角色。 本系列报告将围绕半导体集成电路进行多维度、多视角的行业透视,针对行业发展的市场格局、发展历程、核心技术、产业链主要环节、机遇挑战等方面,从“技术+市场”的角度对全行业进行分析。系列报告内容主要包括半导体集成电路行业市场篇、历史篇、设计篇、工艺篇、封测篇、装备篇、材料篇以及工具篇,希望通过行业透视构建半导体集成电路行业的全景图,为读者认识、投资、发展该行业提供参考。 半导体集成电路行业全景图(一) 市场篇:信息时代基石 半导体集成电路行业是典型的跨地域、多产业链合作的行业,需求牵引、技术驱动是行业发展的核心逻辑,基于多样的下游应用场景,集成电路拥有广阔的市场空间,并且随着传统电子设备升级换代以及新型智能终端应用爆发,行业发展迎来新的历史机遇。本篇将从市场的角度介绍半导体集成电路行业基本概况、全球范围竞争格局、我国集成电路市场规模等内容,通过对行业特点、产业链、竞争态势等方面分析,总结全球半导体集成电路行业现状,并提出对我国集成电路行业发展的启示。 1.行业概览 1.1行业介绍及特点 集成电路是半导体的主要产品。半导体是指导电性介于金属和绝缘体之间的一种材料,半导体材料由于其独特的物理性质,能制成各类电子元器件,以实现调制、开关、放大等功能,广泛应用于电子信息产业的各个环节之中。 半导体产品主要包括四类:集成电路,光电器件,分立器件,传感器。 在半导体产品类别中,集成电路产品占比最大,根据Wind数据,2018年全球半导体产值为4687.78亿美元,首次突破4500亿美元大关,创十年以来新高。其中,集成电路产值为3932.88亿美元,在半导体产品中产值占比84%。光电子器件、分立器件和传感器虽然应用广泛,但需求和单价与集成电路差距较大,人们常用集成电路产业代指半导体产业,也是指在未涉及分立、光电、传感器件(D-O-S)等情况而言。 集成电路也就是人们常说的芯片。集成电路(IC,integrated circuit)是一种微型电子器件,是在特定的设计结构下,通过一定的工艺将晶体管、电阻、电容等元件集成在基片上,然后进行封装,成为具有所需电路功能的微型结构。集成电路发明者为杰克·基尔比(基于锗的集成电路)和罗伯特·诺伊思(基于硅的集成电路),现代集成电路大多应用的是基于硅的工艺技术。集成电路产品主要包括微处理器、逻辑电路、存储器、模拟电路等。 集成电路的实体往往以芯片的形势存在,但两者并非同一个概念:芯片由核心电路、基板、针脚构成,更加注重电路集成、生产和封装等环节,是一个产品概念;集成电路更加注重电路的设计和布局布线,是一个系统概念。通常在未特殊说明的情况下,芯片可等同于集成电路。 集成电路是技术和资本密集型行业。集成电路属于典型的高科技领域,是技术密集型行业:技术研发和路线选择是行业内企业发展的命脉,由于集成电路行业是一个高技术壁垒的行业,拥有最前沿的技术路线、最高端的工艺制程的企业能掌控行业话语权。由于历史发展原因,目前集成电路最前沿技术掌握在欧美等国家手中,我国近年来集成电路产业也取得了飞速发展,逐渐实现自主可控。另一方面,集成电路是资本密集行业:产业发展需要大量的资金投入,尤其是在行业初期,研发新技术、新产品,布局新产线需要巨大的资金投入,据估计,投资一条月产5万片的12英寸晶圆生产线约需50亿美元。 集成电路是信息时代的基石,应用于几乎所有的电子产品中。集成电路产品下游应用包括通信产品、PC、服务器、智能手机、消费电子产品、汽车、工业、家电、医疗设备等。根据IC Insights数据,电脑、通信、消费电子一共占据90%的下游市场,未来随着智能手机、平板电脑等产品增速放缓,通信、工业、医疗及汽车电子正成为新的增长点,IC Insights预计2016-2021年汽车半导体的年均复合增速(CAGR)有望达到5.4%,工业、医疗CAGR有望达到4.6%,通信市场CAGR达到4.2%,并且通信市场将超越电脑成为集成电路最大的下游市场。 集成电路发展与全球GDP发展高度相关。集成电路产品已经渗透到人们日常生活,2012-2018年全球半导体产值占全球GDP的比重由0.39%增长到0.55%。全球半导体市场增长率与GDP总量增长率波动高度一致,其发展与GDP发展具有强相关性已经成为了行业共识。 作为需求推动的行业,半导体市场具有较强的周期性,这种周期性与下游新兴应用带动密不可分:19世纪80年代半导体迎来第一波发展高峰,收音机、电视机和录相机等消费电子产品是主要需求;21世纪初,功能手机和个人计算机走入千家万户,互联网时代来临带动半导体行业迅速发展;2010年左右智能手机市场爆发,移动互联网迅速发展,半导体行业再次迎来高增长。 集成电路行业目前处于下行周期,5G来临有望带来新一轮产业爆发。2019年,全球政治、经济局势充满不稳定性,中美贸易摩擦、日韩贸易摩擦等不确定因素给半导体集成电路产业带来巨大冲击。世界经济发展增速进一步放缓,世界银行已将2019年全球GDP由1月预估的2.9%下调至2.6%,IMF由原预估的3.6%下调至3.1%。美国半导体协会(SIA)发布报告显示,全球芯片销售额连续第三个季度和第六个月同比下滑,2019年二季度全球芯片销售额下降16.8%,至982亿美元,6月芯片销售额下降16.8%,至327亿美元。目前5G网络处于爆发前夕,具备商用能力的5G手机芯片供应商只有华为和高通2家,现有的智能手机产能过剩,手机出货量承压,世界知名半导体行业调查机构纷纷下调2019年半导体市场预期。因此,受到宏观经济和产能影响,预计本轮集成电路下行周期可能持续到2020年第二季度。随着5G网络建设逐步落地,物联网、大数据、VR/AR、人工智能等新兴行业的兴起,5G终端拉动智能手机和消费电子市场,集成电路行业有望在2020/2021年迎来新一轮产业爆发。 1.2产业链构成 集成电路产业链主要由三个主产业和三个支撑产业构成。主产业包括芯片设计、芯片制造、封装测试,支撑产业包括EDA工具、电子材料、制造设备。集成电路产业是一条巨大的产业链,包含从原材料、设计加工到系统整机的全过程。一块完整的芯片产品需要多个流线配合生产完成,工艺流程是上游IC端根据下游需求设计芯片,然后进行加工制造,之后再进行封装测试,最后将性能良好的IC产品出售给下游客户。 芯片设计:根据芯片要实现的功能,用设计工具形成图形的过程,主要包含电路设计、版图设计、逻辑设计、光罩制作等。芯片设计是一项复杂的工程,不仅要考虑到单个独立器件工作的可靠性、稳定性,还需考虑系统集成的布线、散热等问题。芯片设计属于智力密集型行业,注重研发实力和专利,轻资产运营,人才是企业的最关键要素。芯片设计最初由基本层逐层开始,后来演变成基于微架构(IP)的设计,专门设计提供微架构的公司称为IP供应商。现在的芯片设计公司一般在外购或自研IP核基础上,将各类功能组件设计在一个芯片上,降低难度的同时提高了工作效率。芯片设计是产业链中的高端部分,具有最高附加值。 芯片制造:芯片制造环节是将设计好的版图转移到基片上的过程,属于重资产行业。整个过程涉及多道复杂工艺,需要经过多次光刻-沉积-刻蚀-离子注入等环节的过程,其中光刻环节最为复杂,集成电路中的制程(最小线条宽度)直接取决于光刻精度。此外,高纯度硅晶片的提纯和切割同样依赖于工艺技术。芯片制造的主要成本在晶圆生产环节,技术壁垒和资金壁垒极高,企业为保持竞争力每年用于采购设备和厂房的资本开支占营业收入一半左右。芯片制造在产业链中的附加值较低。 封装测试:芯片封装是指将制造出来的硅晶圆裸片进行切割,并与外部器件实现电气连接和物理保护,测试则是对封测好的芯片进行性能和质量检测的过程。芯片封装测试技术壁垒低,属于劳动密集型,往往是发展中国家首先发展的子行业,在产业链中附加值较低。 1.3业务模式 集成电路行业目前存在两种业务模式。根据企业涉及的业务流线,集成电路企业的业务模式主要分为两种:整合制造模式(IDM,Integrated Devices Manufacture)和垂直分工模式(Fabless+Foundry+OSAT)。IDM模式是指一家公司覆盖集成电路全产业链,所有的生产环节由自己完成。垂直分工模式是指芯片生产每个环节由不同的企业完成,上游的芯片设计公司(Fabless)负责芯片的设计,设计好的芯片掩膜版图交由中游的晶圆厂(Foundry)进行制造,加工完成的晶圆交由下游的封装测试公司(OSAT)进行切割、封装和测试。 IDM模式:在70年代及之前,几乎所有的半导体公司从事芯片设计、芯片制造和芯片封测的整个流程,即采用IDM模式,部分企业甚至还覆盖下游的整机制造业务,例如IBM公司。目前全球主要的大型半导体公司仍然采用IDM模式,尤其是存储器厂商(三星、海力士、美光、东芝等)和汽车电子厂商(英飞凌、恩智浦、意法半导体等),此外,由于英特尔在PC和服务器CPU领域内的垄断地位,目前也采用IDM模式。IDM模式下,企业每年要经受大量的晶圆制造设备的折旧,因而只有在产能利用率保证较高的情况下才比较适合。存储器属于相对标准化产品,适合大规模制造,并且设计成本较低,因而非常适合于IDM企业;汽车和工业半导体市场的变化相对较慢,市场格局较稳定,适合IDM模式。 垂直分工模式:集成电路行业巨额的资本投入使得绝大多数企业无力支撑高昂的开支,集成电路产业链的细分行业开始出现分工。1987年台积电的成立标志着集成电路行业从垂直化向分工化的变革,目前,新兴通信终端和消费电子领域大多采用垂直分工模式,纯芯片设计厂商主要有高通、博通、英伟达、海思、紫光展锐等,晶圆代工企业主要有台积电、格罗方德、中芯国际、华虹半导体等,封装测试企业主要有日月光、长电科技、华天科技、通富微电等。对于通信终端和消费电子领域,产品更新换代块,市场竞争激烈,行业格局变化快,芯片设计厂商采用Fabless轻资产模式,能最大发挥设计优势,而晶圆代工厂和封测厂则可以发挥规模优势和专业优势,其业绩波动与行业整体波动一致,利于其更好的提升设备利用效率。 IDM模式营收高于垂直分工模式。两种业务模式中,由于像Intel等全球龙头企业采用IDM模式,并且体量巨大,其营收额高于垂直分工模式。根据IC Insights的数据,2017年全球集成电路销售收入中,IDM企业的销售额为2636亿美元,采用垂直分工模式的Fabless企业销售额为1000亿美元。从增速上来看,垂直分工模式的IC销售额增速更快,近十年内,IDM企业销售额的CAGR为3%,Fabless 企业高达9%。 模式界限逐渐模糊,IDM模式逐渐向垂直分工模式演进。全球大部分集成电路企业采用垂直分工模式,并且随着众多IDM模式的龙头企业纷纷剥离部分业务,垂直分工模式已经成为了行业趋势。行业巨头讲其晶圆制造和封测业务剥离,转变为Fabless模式,例如GlobalFoundries就是AMD的晶圆制造剥离而来,同时AMD也在逐步出售其封测厂,其中部分就出售给了通富微电;大部分IDM公司(除存储器厂商外)都在慢慢减少其晶圆厂投资,将其新增的晶圆制造业务外包给专业的晶圆代工厂,形成Fablite模式;而像英特尔和三星,则开始将其晶圆厂向外界开放,提供代工业务。 2.全球竞争格局 2.1产品结构 集成电路产业作为信息时代的基石产业,一直以来保持高速发展态势。2017/2018连续两年全球半导体总销售额均超过4000亿美元,集成电路产品占比超过80%,并且保持最高增速。根据Wind数据,2018年全球半导体产值4687.78亿美元,其中,集成电路产值约3932.88亿美元,同比增长14.60%;分立器件241.02亿美元,同比增长11.32%;光电器件380.32亿美元,同比增长9.25%;传感器件133.56亿美元,同比增长6.24%。在半导体产品中,集成电路产品增速高于D-O-S产品的增速。 集成电路产品中,存储器是行业风向标。2017年存储器价格上涨,据IC Insights报道,DRAM 2017年平均售价同比上涨77%,销售总值达720亿美元,同比增长74%,NAND Flash 2017年平均售价同比上涨38%,销售总额达498亿美元,同比增长44%。2017年存储器销售额为1239.74亿美元,同比增长61.49%,占到全球半导体市场总值30.1%,超越历年占比最大的逻辑电路(24.8%),2018年存储器市场规模占半导体总规模33.7%,同比增长27.42%,其销售增长率仍远高于其他产品。 2.2产业结构 集成电路产业中,IC制造市场规模占比最大。根据IC Insights、Gartner数据,2018年全球IC设计产值为1139亿美元,IC封测产值为560亿美元,IC制造环节的产值约为2233亿美元,从产值占比而言,全球集成电路设计、制造、封测环节的产值占比分别为28.96%、56.80%、14.24%。可以看出,IC制造是集成电路行业最大板块,其产值占据集成电路总产值的一半。从发展趋势来看,2017-2018年,全球集成电路制造业份额有所提升,设计和封测业占比小幅下降。 2.3地域分布结构 亚太地区半导体市场规模占全球比重超过五成。过去二十年全球半导体市场消费格局不断变迁,美国、日本等国作为半导体产业主要制造和消费国,市场占比保持稳定,而以中国市场为核心的亚太地区新兴经济体迅猛发展,自2015年开始占比已达60%,并保持稳步增长。主要原因是因为全球制造业产业重心转移等因素,亚太地区(不含日本)已成为过去十年全球半导体市场增长最为迅猛的区域,2000年该地区仅仅占全球25%份额,2018年该地区半导体市场销售规模达2816亿美元,占全球市场规模的60%,其次为美洲(22%)、欧洲(9%)和日本(9%)。 中国已成为全球最大的半导体市场。近十余年来随着全球集成电路市场逐渐步入成熟发展阶段,全球产业增速有所放缓。但随着我国电子信息行业飞速发展,智能手机、汽车电子、物联网以及安防、工控、大数据、云计算等应用兴起,2016/2017年以来人工智能发展步入快车道,半导体集成电路产品需求激增。根据Wind数据,过去5年,日本、欧洲等地半导体市场份额略有下降,而中国保持快速增长,中国半导体市场规模由2014年的917亿美元增长到2018年1579亿美元,市场占比由27%增长到34%。 3.我国市场规模 3.1市场规模 我国集成电路起步较晚,发展速度全球领先。2000年以前集成电路产业薄弱,相关产品几乎全部依靠进口。随着我国经济不断发展,全球集成电路行业开始分工,我国承接了第三次半导体产业转移,同时国家大力支持集成电路产业,不断出台系列政策刺激产业发展,我国集成电路从封测、代工开始逐渐向设计、制造领域迈进,我国集成电路产业发展速度快于全球水平。 2018年中国集成电路产业市场规模6532亿元。我国集成电路市场虽起步较晚,但受益于国家大力支持及全球集成电路产业向我国转移趋势加快,我国集成电路产业发展速度快于全球水平。 2008、2009年受到全球金融危机和全球半导体产业持续低迷的影响,我国集成电路市场规模连续两年呈负增长,分别下降1%和11%。 2010年以后全球半导体市场复苏,我国持续加大相关政策支持,我国集成电路销售收入大幅回升。 据中国半导体行业协会数据,2018年中国集成电路产业销售额6532元,同比增长20.71%,2008年国内集成电路总销售额仅1246.8亿元,过去十年间(2008-2018)年均复合增速(CAGR)达到18%。受到2018年第四季度全球半导体市场下滑影响,中国集成电路产业2018年第四季同比增幅只有17.26%,较比前三季度略有下降;2018年第二季的增幅超过26%。 3.2产业结构 国内集成电路芯片设计占比最高,制造业占比低增速快。2018年我国集成电路设计业销售额为2519.3亿元,同比增长21.49%;制造业销售额为1818.2亿元,继续保持快速增长,同比增长25.56%;封装测试业销售额2193.9亿元,同比增长16.09%。与全球产业结构对比,2018年国内集成电路设计、制造、封测的销售额占比分别为:38.57%、27.84%、33.59%,而全球集成电路产值在以上三个环节的分布分别为:28.96%、63.89%、7.14%,由此可见,国内集成电路的销售额更多倚重于劳动密集型的封测环节,而在与封测紧密相关的制造环节,中国市场的匹配度较差,尚不具备全面参与全球产业链分工的比较优势。 封测业占比下降,设计业占比提升。近十年来我国集成电路三业齐头并进,集成电路产业结构趋于优化,目前以芯片设计和封装测试为主。 从产业结构变化来看,2011年我国集成电路产业主要集中在封测业,封测占比高达50.46%,2018年封测占比降至33.59%,半导体封测业附加值较低,但是技术壁垒较低,是实现半导体国产化的重要突破口之一。2016年设计业超过封测业,并且占比逐步增加,2018年设计业占比38.57%。制造业在我国半导体领域比重最小的主要原因在于其较高的技术壁垒和较低的附加值,一个晶圆厂从规划到投入生产使用大概要两年的时间,后期还要经过产能爬坡和良率提升阶段。并且建设一条12英寸芯片生产线的投资预计30-50亿美元,其中仅半导体设备的投资占70%以上。除了时间和资金成本外,晶圆代工厂还要面临巨额的设备折旧和世界巨头价格战的打压,因此我国半导体制造业发展速度较为缓慢。 从全球集成电路产业现状和发展经验来看,一般集成电路设计、制造和封测的价值量比例为3:4:3,由我国产业结构变化情况可以看出,我国集成电路的主导产业朝着低附加值的封测业转变到高附加值的设计业,集成电路产业不断转型升级。 3.3需求规模 我国集成电路需求旺盛。我国有广阔的需求市场,已经成为全球最大的半导体消费市场。由于我国半导体集成电路行业仍处于发展阶段,部分核心技术掌握在美日等国手中,国内产品能满足部分消费需求,除此之外约80%消费需求来源于进口。根据我国海关总署数据,2015年我国集成电路进口金额2303亿美元,超出原油成为我国第一大进口商品。2018年我国集成电路进口总额3120.58亿美元,同比大幅增长19.8%,出口总额846.36亿美元,同比增长26.6%。从我国集成电路进出口规模可以看到,我国集成电路行业需求旺盛,市场空间进一步打开;出口增长率高于进口增长率,证明我国集成电路正在朝着健康方向发展,供给能力不断提高。 高需求带来大机遇,进口替代为国内厂商带来契机。我国集成电路发展时间短、基础弱,西方技术限制和巨大市场需求倒逼行业高速发展。随着华为、中兴、紫光、华虹等国内企业快速发展,我国集成电路核心技术不断突破,国内企业不断占据价值链高端,进口替代成为国内企业的主要发展战略。据统计,2018年我国集成电路自给率15.3%,预计2023年将增长到20.5%,这意味着我国有超过八成的进口替代市场,国内集成电路厂商发展迎来契机。 4.机遇与启示

第一个Spring项目(基础)

Spring简介 首先我们对Spring做一个简单介绍 Spring 是一个轻量级的Java开发框架,它是一种容器框架,用于创建bean,维护bean之间的关系。从而简化应用程序的开发。 简化应用程序开发的体现: AOP 即面向切面编程,比如进行一个计算器的编写,需要实现加、减、乘、除四种简单的运算,编写四种不同的方法。还有另外的两个需求是在每种运算之前和运算之后需要打印日志进行记录,需要进行数字合规的校验。我们就得考虑如何能简单地实现呢?就是得把日志记录和数据校验等可重用的功能模块分离出来,然后在程序的执行的合适的地方动态地植入这些代码并执行。这样就简化了代码的书写,业务逻辑代码中没有参和通用逻辑的代码,业务模块更简洁,只包含核心业务代码。实现了业务逻辑和通用逻辑的代码分离,便于维护和升级,降低了业务逻辑和通用逻辑的耦合。 有人会想到把这些通用的功能整合到一个方法中,去调用,这样也是避免不了重复调用,并且在业务逻辑中添加额外的代码。Spring通过配置的方式,而且不需要在业务逻辑代码中添加任何额外代码,就可以很好地实现上述功能。通俗点说就是把可重用的功能提取出来,然后将这些通用功能在合适的时候织入到应用程序中;比如安全,日记记录,设置token,校验数据,这些都是通用的功能,我们可以把它们提取出来,然后在程序执行的合适地方织入这些代码并执行它们,从而完成需要的功能并复用了这些功能。IOC IOC即控制反转,是一种面向对象编程的思想来削减程序中耦合问题。此模式将耦合代码从程序中移出,放到统一的XML文件中管理。让对象的创建不用再使用New的方式而是由IOC容器通过配置文件来管理对象的生命周期、依赖关系等,这样就不用重新修改并编译具体的代码,从而实现组件之间的解耦。 编写Spring项目代码 下载Spring jar包,下载地址(https://spring.io/),下载完成后可以看到一个压缩包,把它解压。 解压后进入spring-framework-3.2.0.RELEASE\libs 目录可看到Spring的jar文件。 新建项目 File --> New --> Java Project 在项目下新建文件夹lib,把我们Spring依赖的jar包放进去(注意只需要把release.jar后缀的文件放进入即可) 将lib文件夹下的jar包全部选中(不要选中lib文件夹),右键选择Buid Path -->Add to Build Path 然后我们会看到刚才Build Path后的jar包全部到Referenced Libraries下,并且 图标有所变化。 在src目录下创建包 com.lhl.spring.entity 存放实体类 com.lhl.spring.test 存放测试类 xml文件直接建在src目录下,一般命名为"spring-config.xml",或者"applicationContext.xml" com.lhl.spring.entity包下创建实体类Person package com.lhl.spring.entity; public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.

vue-uuid的使用

官方地址:https://www.npmjs.com/package/vue-uuid 1、安装 npm i vue-uuid 2、使用 两种方式: 局部引入后,通过uuid名来使用全局注册,然后通过$uuid来使用。 全局注册方式,在main.js文件中引入包 // 引入vue-UUID组件 import UUID from 'vue-uuid' Vue.use(UUID) <template> <div class="uuid-panel"> <h3 class="uuid">{{ uuid }}</h3> <button class="button" @click="handleUUIDv1" >Generate V1</button> <button class="button" @click="handleUUIDv4" >Generate V4</button> </div> </template> <script> import { uuid } from 'vue-uuid'; // uuid object is also exported to things // outside Vue instance. export default { data () { return { uuid: '' }; }, created() { this.uuid = uuid.

Linux cat命令参数及使用方法详解

https://www.linuxeye.com/command/cat.html cat 命令用于连接文件并打印到标准输出设备上。 使用权限 所有使用者 语法格式 cat [-AbeEnstTuv] [--help] [--version] fileName 参数说明: -n 或 --number:由 1 开始对所有输出的行数编号。 -b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。 -s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。 -v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。 -E 或 --show-ends : 在每行结束处显示 $。 -T 或 --show-tabs: 将 TAB 字符显示为 ^I。 -A, --show-all:等价于 -vET。 -e:等价于"-vE"选项; -t:等价于"-vT"选项 实例: 把 textfile1 的文档内容加上行号后输入 textfile2 这个文档里: cat -n textfile1 > textfile2 把 textfile1 和 textfile2 的文档内容加上行号(空白行不加)之后将内容附加到 textfile3 文档里:

dict和zip结合使用

dict和zip结合使用 zip()函数 函数说明: zip()可以将两个可迭代对象中的对应元素打包成一个个元组,然后返回这些元组组成的列表 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表 示例: >>> a = [1,2,3] >>> b = [4,5,6] >>> c = [4,5,6,7,8] >>> zipped = zip(a,b) # 打包为元组的列表 [(1, 4), (2, 5), (3, 6)] >>> zip(a,c) # 元素个数与最短的列表一致 [(1, 4), (2, 5), (3, 6)] >>> zip(*zipped) # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式 [(1, 2, 3), (4, 5, 6)] dict()函数 函数说明: dict()创建字典,可以传入元组列表创建字典,也可以通过zip得到元组列表后来创建字典 示例: >>> dict() # 创建空字典 {} >>> dict(a='a', b='b', t='t') # 传入关键字 {'a': 'a', 'b': 'b', 't': 't'} >>> dict(zip(['one', 'two', 'three'], [1, 2, 3])) # 映射函数方式来构造字典 {'three': 3, 'two': 2, 'one': 1} >>> dict([('one', 1), ('two', 2), ('three', 3)]) # 可迭代对象方式来构造字典 {'three': 3, 'two': 2, 'one': 1} 通过zip得到元组列表后来创建字典:

怎样在heatmap中使用多种cluster方法

生物信息学中经常使用R 来画图,而R画heatmap的功能是非常强大的。通常,我的习惯是使用gplots包中的heatmap.2函数来进行画图。不过这个函数中不能对聚类分析(clustering)到方法进行调整,于是,小小写一段代码即能使用不同的聚类分析方法来对heatmap进行聚类整合。 1 # There are 7 methods to make cluster in the function hclust in R 2 Cluster_Method<-c( "ward", "single", "complete", "average", "mcquitty", "median", "centroid") 3 4 for (i in 1:length(Cluster_Method)){ 5 #make a function to extract the cluster method 6 myclust<-function(x){ 7 hclust(x,method=Cluster_Method[i]) 8 } 9 #make heatmap by jpeg 10 jpeg(filename=paste(Cluster_Method[i],'.jpg'),width=1024,height=728) 11 heatmap.2(as.matrix(Data_Top1k_Var), 12 trace='none', 13 hclustfun=myclust,labRow=NA, 14 ColSideColors=c('black',grey(0.4),'lightgrey')[as.factor(CellLine_Anno$Type)], 15 xlab='CellLines', 16 ylab='Probes', 17 main=Cluster_Method[i], 18 col=greenred(64)) 19 dev.

矢量数据下载【道路路网(公路、铁路)、水系、建筑物轮廓、地名等等】

矢量数据、数据珍贵、谨慎下载 同步视频教程:http://www.bigemap.com/video/play2018020621.html 专题地图制作视频教程:http://www.bigemap.com/video/play201801172.html 水系专题地图制作视频:http://www.bigemap.com/video/play20180730105.html 专题地图打印设置教程:http://www.bigemap.com/video/play20180730101.html 矢量测试数据下载: KML(KMZ)格式、DXF(DWG)格式、SHP格式:(请用BIGEMAP直接打开,可另存为SHP,DXF(AutoCAD)等格式或者直接用Global Mapper打开) 矢量数据效果图如下图: 第一步:打开BIGEMAP软件,为了和你下载的数据信息一致,请选择左上角图源:【矢量路网(无偏移)】;然后选择最上面的【矩形框】,框选需要下载的范围,如下图所示: 第二步:选择好下载范围后,【双击左键】弹出下载对话框,在对话框的最上面选择【矢量路网】;我们可以下载的 路网、水系、建筑物、地标名称 等等; 可以分开下载,也可以全部勾选上一起下载;如下图所示: 在上图中,任务名称中输入你要下载保存的名称;这里主要要选择存储格式,包括:KMZ、SHP(shapefile)和dxf(AutoCAD格式),如下图: 1、选项kml;【坐标投影】不用选择,保存出来的路网是经纬度坐标; 2、选项shp;【坐标投影】默认是WGS84墨卡托,点击【选择】可以在里面选择任意投影和坐标系包括:西安80、北京54、CGCS2000、UTM等等; 3、选项dxf;点击【坐标投影】后面的【选择】,在里面选择你需要的投影坐标系; 如下图: 可参看【如何选择投影分度带】 第三步:点击【确定】,开始下载,下载任务列表在左上角,如下图: 点击上图中的红色箭头文件夹,打开下载完成的文件夹目录,可以看到下载完成的文件,本例下载的kml文件,可以直接在Global Mapper中打开,如下图: 在BIGEMAP中打开,如下图: 在AutoCAD中打开,如下图: 下载的矢量数据,可另存为:kml\kml、dxf、dwg、shp、csv、excel、txt、corldraw文件等等矢量格式

ResNet101网络结构

来源于官方函数,input_shape=[160,160,3],classes=16 Layer (type) Output Shape Param # Connected to ================================================================================================== input_2 (InputLayer) (None, 160, 160, 3) 0 __________________________________________________________________________________________________ conv1_pad (ZeroPadding2D) (None, 166, 166, 3) 0 input_2[0][0] __________________________________________________________________________________________________ conv1_conv (Conv2D) (None, 80, 80, 64) 9472 conv1_pad[0][0] __________________________________________________________________________________________________ conv1_bn (BatchNormalization) (None, 80, 80, 64) 256 conv1_conv[0][0] __________________________________________________________________________________________________ conv1_relu (Activation) (None, 80, 80, 64) 0 conv1_bn[0][0] __________________________________________________________________________________________________ pool1_pad (ZeroPadding2D) (None, 82, 82, 64) 0 conv1_relu[0][0] __________________________________________________________________________________________________ pool1_pool (MaxPooling2D) (None, 40, 40, 64) 0 pool1_pad[0][0] __________________________________________________________________________________________________ conv2_block1_1_conv (Conv2D) (None, 40, 40, 64) 4160 pool1_pool[0][0] __________________________________________________________________________________________________ conv2_block1_1_bn (BatchNormali (None, 40, 40, 64) 256 conv2_block1_1_conv[0][0] __________________________________________________________________________________________________ conv2_block1_1_relu (Activation (None, 40, 40, 64) 0 conv2_block1_1_bn[0][0] __________________________________________________________________________________________________ conv2_block1_2_conv (Conv2D) (None, 40, 40, 64) 36928 conv2_block1_1_relu[0][0] __________________________________________________________________________________________________ conv2_block1_2_bn (BatchNormali (None, 40, 40, 64) 256 conv2_block1_2_conv[0][0] __________________________________________________________________________________________________ conv2_block1_2_relu (Activation (None, 40, 40, 64) 0 conv2_block1_2_bn[0][0] __________________________________________________________________________________________________ conv2_block1_0_conv (Conv2D) (None, 40, 40, 256) 16640 pool1_pool[0][0] __________________________________________________________________________________________________ conv2_block1_3_conv (Conv2D) (None, 40, 40, 256) 16640 conv2_block1_2_relu[0][0] __________________________________________________________________________________________________ conv2_block1_0_bn (BatchNormali (None, 40, 40, 256) 1024 conv2_block1_0_conv[0][0] __________________________________________________________________________________________________ conv2_block1_3_bn (BatchNormali (None, 40, 40, 256) 1024 conv2_block1_3_conv[0][0] __________________________________________________________________________________________________ conv2_block1_add (Add) (None, 40, 40, 256) 0 conv2_block1_0_bn[0][0] conv2_block1_3_bn[0][0] __________________________________________________________________________________________________ conv2_block1_out (Activation) (None, 40, 40, 256) 0 conv2_block1_add[0][0] __________________________________________________________________________________________________ conv2_block2_1_conv (Conv2D) (None, 40, 40, 64) 16448 conv2_block1_out[0][0] __________________________________________________________________________________________________ conv2_block2_1_bn (BatchNormali (None, 40, 40, 64) 256 conv2_block2_1_conv[0][0] __________________________________________________________________________________________________ conv2_block2_1_relu (Activation (None, 40, 40, 64) 0 conv2_block2_1_bn[0][0] __________________________________________________________________________________________________ conv2_block2_2_conv (Conv2D) (None, 40, 40, 64) 36928 conv2_block2_1_relu[0][0] __________________________________________________________________________________________________ conv2_block2_2_bn (BatchNormali (None, 40, 40, 64) 256 conv2_block2_2_conv[0][0] __________________________________________________________________________________________________ conv2_block2_2_relu (Activation (None, 40, 40, 64) 0 conv2_block2_2_bn[0][0] __________________________________________________________________________________________________ conv2_block2_3_conv (Conv2D) (None, 40, 40, 256) 16640 conv2_block2_2_relu[0][0] __________________________________________________________________________________________________ conv2_block2_3_bn (BatchNormali (None, 40, 40, 256) 1024 conv2_block2_3_conv[0][0] __________________________________________________________________________________________________ conv2_block2_add (Add) (None, 40, 40, 256) 0 conv2_block1_out[0][0] conv2_block2_3_bn[0][0] __________________________________________________________________________________________________ conv2_block2_out (Activation) (None, 40, 40, 256) 0 conv2_block2_add[0][0] __________________________________________________________________________________________________ conv2_block3_1_conv (Conv2D) (None, 40, 40, 64) 16448 conv2_block2_out[0][0] __________________________________________________________________________________________________ conv2_block3_1_bn (BatchNormali (None, 40, 40, 64) 256 conv2_block3_1_conv[0][0] __________________________________________________________________________________________________ conv2_block3_1_relu (Activation (None, 40, 40, 64) 0 conv2_block3_1_bn[0][0] __________________________________________________________________________________________________ conv2_block3_2_conv (Conv2D) (None, 40, 40, 64) 36928 conv2_block3_1_relu[0][0] __________________________________________________________________________________________________ conv2_block3_2_bn (BatchNormali (None, 40, 40, 64) 256 conv2_block3_2_conv[0][0] __________________________________________________________________________________________________ conv2_block3_2_relu (Activation (None, 40, 40, 64) 0 conv2_block3_2_bn[0][0] __________________________________________________________________________________________________ conv2_block3_3_conv (Conv2D) (None, 40, 40, 256) 16640 conv2_block3_2_relu[0][0] __________________________________________________________________________________________________ conv2_block3_3_bn (BatchNormali (None, 40, 40, 256) 1024 conv2_block3_3_conv[0][0] __________________________________________________________________________________________________ conv2_block3_add (Add) (None, 40, 40, 256) 0 conv2_block2_out[0][0] conv2_block3_3_bn[0][0] __________________________________________________________________________________________________ conv2_block3_out (Activation) (None, 40, 40, 256) 0 conv2_block3_add[0][0] __________________________________________________________________________________________________ conv3_block1_1_conv (Conv2D) (None, 20, 20, 128) 32896 conv2_block3_out[0][0] __________________________________________________________________________________________________ conv3_block1_1_bn (BatchNormali (None, 20, 20, 128) 512 conv3_block1_1_conv[0][0] __________________________________________________________________________________________________ conv3_block1_1_relu (Activation (None, 20, 20, 128) 0 conv3_block1_1_bn[0][0] __________________________________________________________________________________________________ conv3_block1_2_conv (Conv2D) (None, 20, 20, 128) 147584 conv3_block1_1_relu[0][0] __________________________________________________________________________________________________ conv3_block1_2_bn (BatchNormali (None, 20, 20, 128) 512 conv3_block1_2_conv[0][0] __________________________________________________________________________________________________ conv3_block1_2_relu (Activation (None, 20, 20, 128) 0 conv3_block1_2_bn[0][0] __________________________________________________________________________________________________ conv3_block1_0_conv (Conv2D) (None, 20, 20, 512) 131584 conv2_block3_out[0][0] __________________________________________________________________________________________________ conv3_block1_3_conv (Conv2D) (None, 20, 20, 512) 66048 conv3_block1_2_relu[0][0] __________________________________________________________________________________________________ conv3_block1_0_bn (BatchNormali (None, 20, 20, 512) 2048 conv3_block1_0_conv[0][0] __________________________________________________________________________________________________ conv3_block1_3_bn (BatchNormali (None, 20, 20, 512) 2048 conv3_block1_3_conv[0][0] __________________________________________________________________________________________________ conv3_block1_add (Add) (None, 20, 20, 512) 0 conv3_block1_0_bn[0][0] conv3_block1_3_bn[0][0] __________________________________________________________________________________________________ conv3_block1_out (Activation) (None, 20, 20, 512) 0 conv3_block1_add[0][0] __________________________________________________________________________________________________ conv3_block2_1_conv (Conv2D) (None, 20, 20, 128) 65664 conv3_block1_out[0][0] __________________________________________________________________________________________________ conv3_block2_1_bn (BatchNormali (None, 20, 20, 128) 512 conv3_block2_1_conv[0][0] __________________________________________________________________________________________________ conv3_block2_1_relu (Activation (None, 20, 20, 128) 0 conv3_block2_1_bn[0][0] __________________________________________________________________________________________________ conv3_block2_2_conv (Conv2D) (None, 20, 20, 128) 147584 conv3_block2_1_relu[0][0] __________________________________________________________________________________________________ conv3_block2_2_bn (BatchNormali (None, 20, 20, 128) 512 conv3_block2_2_conv[0][0] __________________________________________________________________________________________________ conv3_block2_2_relu (Activation (None, 20, 20, 128) 0 conv3_block2_2_bn[0][0] __________________________________________________________________________________________________ conv3_block2_3_conv (Conv2D) (None, 20, 20, 512) 66048 conv3_block2_2_relu[0][0] __________________________________________________________________________________________________ conv3_block2_3_bn (BatchNormali (None, 20, 20, 512) 2048 conv3_block2_3_conv[0][0] __________________________________________________________________________________________________ conv3_block2_add (Add) (None, 20, 20, 512) 0 conv3_block1_out[0][0] conv3_block2_3_bn[0][0] __________________________________________________________________________________________________ conv3_block2_out (Activation) (None, 20, 20, 512) 0 conv3_block2_add[0][0] __________________________________________________________________________________________________ conv3_block3_1_conv (Conv2D) (None, 20, 20, 128) 65664 conv3_block2_out[0][0] __________________________________________________________________________________________________ conv3_block3_1_bn (BatchNormali (None, 20, 20, 128) 512 conv3_block3_1_conv[0][0] __________________________________________________________________________________________________ conv3_block3_1_relu (Activation (None, 20, 20, 128) 0 conv3_block3_1_bn[0][0] __________________________________________________________________________________________________ conv3_block3_2_conv (Conv2D) (None, 20, 20, 128) 147584 conv3_block3_1_relu[0][0] __________________________________________________________________________________________________ conv3_block3_2_bn (BatchNormali (None, 20, 20, 128) 512 conv3_block3_2_conv[0][0] __________________________________________________________________________________________________ conv3_block3_2_relu (Activation (None, 20, 20, 128) 0 conv3_block3_2_bn[0][0] __________________________________________________________________________________________________ conv3_block3_3_conv (Conv2D) (None, 20, 20, 512) 66048 conv3_block3_2_relu[0][0] __________________________________________________________________________________________________ conv3_block3_3_bn (BatchNormali (None, 20, 20, 512) 2048 conv3_block3_3_conv[0][0] __________________________________________________________________________________________________ conv3_block3_add (Add) (None, 20, 20, 512) 0 conv3_block2_out[0][0] conv3_block3_3_bn[0][0] __________________________________________________________________________________________________ conv3_block3_out (Activation) (None, 20, 20, 512) 0 conv3_block3_add[0][0] __________________________________________________________________________________________________ conv3_block4_1_conv (Conv2D) (None, 20, 20, 128) 65664 conv3_block3_out[0][0] __________________________________________________________________________________________________ conv3_block4_1_bn (BatchNormali (None, 20, 20, 128) 512 conv3_block4_1_conv[0][0] __________________________________________________________________________________________________ conv3_block4_1_relu (Activation (None, 20, 20, 128) 0 conv3_block4_1_bn[0][0] __________________________________________________________________________________________________ conv3_block4_2_conv (Conv2D) (None, 20, 20, 128) 147584 conv3_block4_1_relu[0][0] __________________________________________________________________________________________________ conv3_block4_2_bn (BatchNormali (None, 20, 20, 128) 512 conv3_block4_2_conv[0][0] __________________________________________________________________________________________________ conv3_block4_2_relu (Activation (None, 20, 20, 128) 0 conv3_block4_2_bn[0][0] __________________________________________________________________________________________________ conv3_block4_3_conv (Conv2D) (None, 20, 20, 512) 66048 conv3_block4_2_relu[0][0] __________________________________________________________________________________________________ conv3_block4_3_bn (BatchNormali (None, 20, 20, 512) 2048 conv3_block4_3_conv[0][0] __________________________________________________________________________________________________ conv3_block4_add (Add) (None, 20, 20, 512) 0 conv3_block3_out[0][0] conv3_block4_3_bn[0][0] __________________________________________________________________________________________________ conv3_block4_out (Activation) (None, 20, 20, 512) 0 conv3_block4_add[0][0] __________________________________________________________________________________________________ conv4_block1_1_conv (Conv2D) (None, 10, 10, 256) 131328 conv3_block4_out[0][0] __________________________________________________________________________________________________ conv4_block1_1_bn (BatchNormali (None, 10, 10, 256) 1024 conv4_block1_1_conv[0][0] __________________________________________________________________________________________________ conv4_block1_1_relu (Activation (None, 10, 10, 256) 0 conv4_block1_1_bn[0][0] __________________________________________________________________________________________________ conv4_block1_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block1_1_relu[0][0] __________________________________________________________________________________________________ conv4_block1_2_bn (BatchNormali (None, 10, 10, 256) 1024 conv4_block1_2_conv[0][0] __________________________________________________________________________________________________ conv4_block1_2_relu (Activation (None, 10, 10, 256) 0 conv4_block1_2_bn[0][0] __________________________________________________________________________________________________ conv4_block1_0_conv (Conv2D) (None, 10, 10, 1024) 525312 conv3_block4_out[0][0] __________________________________________________________________________________________________ conv4_block1_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block1_2_relu[0][0] __________________________________________________________________________________________________ conv4_block1_0_bn (BatchNormali (None, 10, 10, 1024) 4096 conv4_block1_0_conv[0][0] __________________________________________________________________________________________________ conv4_block1_3_bn (BatchNormali (None, 10, 10, 1024) 4096 conv4_block1_3_conv[0][0] __________________________________________________________________________________________________ conv4_block1_add (Add) (None, 10, 10, 1024) 0 conv4_block1_0_bn[0][0] conv4_block1_3_bn[0][0] __________________________________________________________________________________________________ conv4_block1_out (Activation) (None, 10, 10, 1024) 0 conv4_block1_add[0][0] __________________________________________________________________________________________________ conv4_block2_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block1_out[0][0] __________________________________________________________________________________________________ conv4_block2_1_bn (BatchNormali (None, 10, 10, 256) 1024 conv4_block2_1_conv[0][0] __________________________________________________________________________________________________ conv4_block2_1_relu (Activation (None, 10, 10, 256) 0 conv4_block2_1_bn[0][0] __________________________________________________________________________________________________ conv4_block2_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block2_1_relu[0][0] __________________________________________________________________________________________________ conv4_block2_2_bn (BatchNormali (None, 10, 10, 256) 1024 conv4_block2_2_conv[0][0] __________________________________________________________________________________________________ conv4_block2_2_relu (Activation (None, 10, 10, 256) 0 conv4_block2_2_bn[0][0] __________________________________________________________________________________________________ conv4_block2_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block2_2_relu[0][0] __________________________________________________________________________________________________ conv4_block2_3_bn (BatchNormali (None, 10, 10, 1024) 4096 conv4_block2_3_conv[0][0] __________________________________________________________________________________________________ conv4_block2_add (Add) (None, 10, 10, 1024) 0 conv4_block1_out[0][0] conv4_block2_3_bn[0][0] __________________________________________________________________________________________________ conv4_block2_out (Activation) (None, 10, 10, 1024) 0 conv4_block2_add[0][0] __________________________________________________________________________________________________ conv4_block3_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block2_out[0][0] __________________________________________________________________________________________________ conv4_block3_1_bn (BatchNormali (None, 10, 10, 256) 1024 conv4_block3_1_conv[0][0] __________________________________________________________________________________________________ conv4_block3_1_relu (Activation (None, 10, 10, 256) 0 conv4_block3_1_bn[0][0] __________________________________________________________________________________________________ conv4_block3_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block3_1_relu[0][0] __________________________________________________________________________________________________ conv4_block3_2_bn (BatchNormali (None, 10, 10, 256) 1024 conv4_block3_2_conv[0][0] __________________________________________________________________________________________________ conv4_block3_2_relu (Activation (None, 10, 10, 256) 0 conv4_block3_2_bn[0][0] __________________________________________________________________________________________________ conv4_block3_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block3_2_relu[0][0] __________________________________________________________________________________________________ conv4_block3_3_bn (BatchNormali (None, 10, 10, 1024) 4096 conv4_block3_3_conv[0][0] __________________________________________________________________________________________________ conv4_block3_add (Add) (None, 10, 10, 1024) 0 conv4_block2_out[0][0] conv4_block3_3_bn[0][0] __________________________________________________________________________________________________ conv4_block3_out (Activation) (None, 10, 10, 1024) 0 conv4_block3_add[0][0] __________________________________________________________________________________________________ conv4_block4_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block3_out[0][0] __________________________________________________________________________________________________ conv4_block4_1_bn (BatchNormali (None, 10, 10, 256) 1024 conv4_block4_1_conv[0][0] __________________________________________________________________________________________________ conv4_block4_1_relu (Activation (None, 10, 10, 256) 0 conv4_block4_1_bn[0][0] __________________________________________________________________________________________________ conv4_block4_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block4_1_relu[0][0] __________________________________________________________________________________________________ conv4_block4_2_bn (BatchNormali (None, 10, 10, 256) 1024 conv4_block4_2_conv[0][0] __________________________________________________________________________________________________ conv4_block4_2_relu (Activation (None, 10, 10, 256) 0 conv4_block4_2_bn[0][0] __________________________________________________________________________________________________ conv4_block4_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block4_2_relu[0][0] __________________________________________________________________________________________________ conv4_block4_3_bn (BatchNormali (None, 10, 10, 1024) 4096 conv4_block4_3_conv[0][0] __________________________________________________________________________________________________ conv4_block4_add (Add) (None, 10, 10, 1024) 0 conv4_block3_out[0][0] conv4_block4_3_bn[0][0] __________________________________________________________________________________________________ conv4_block4_out (Activation) (None, 10, 10, 1024) 0 conv4_block4_add[0][0] __________________________________________________________________________________________________ conv4_block5_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block4_out[0][0] __________________________________________________________________________________________________ conv4_block5_1_bn (BatchNormali (None, 10, 10, 256) 1024 conv4_block5_1_conv[0][0] __________________________________________________________________________________________________ conv4_block5_1_relu (Activation (None, 10, 10, 256) 0 conv4_block5_1_bn[0][0] __________________________________________________________________________________________________ conv4_block5_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block5_1_relu[0][0] __________________________________________________________________________________________________ conv4_block5_2_bn (BatchNormali (None, 10, 10, 256) 1024 conv4_block5_2_conv[0][0] __________________________________________________________________________________________________ conv4_block5_2_relu (Activation (None, 10, 10, 256) 0 conv4_block5_2_bn[0][0] __________________________________________________________________________________________________ conv4_block5_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block5_2_relu[0][0] __________________________________________________________________________________________________ conv4_block5_3_bn (BatchNormali (None, 10, 10, 1024) 4096 conv4_block5_3_conv[0][0] __________________________________________________________________________________________________ conv4_block5_add (Add) (None, 10, 10, 1024) 0 conv4_block4_out[0][0] conv4_block5_3_bn[0][0] __________________________________________________________________________________________________ conv4_block5_out (Activation) (None, 10, 10, 1024) 0 conv4_block5_add[0][0] __________________________________________________________________________________________________ conv4_block6_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block5_out[0][0] __________________________________________________________________________________________________ conv4_block6_1_bn (BatchNormali (None, 10, 10, 256) 1024 conv4_block6_1_conv[0][0] __________________________________________________________________________________________________ conv4_block6_1_relu (Activation (None, 10, 10, 256) 0 conv4_block6_1_bn[0][0] __________________________________________________________________________________________________ conv4_block6_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block6_1_relu[0][0] __________________________________________________________________________________________________ conv4_block6_2_bn (BatchNormali (None, 10, 10, 256) 1024 conv4_block6_2_conv[0][0] __________________________________________________________________________________________________ conv4_block6_2_relu (Activation (None, 10, 10, 256) 0 conv4_block6_2_bn[0][0] __________________________________________________________________________________________________ conv4_block6_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block6_2_relu[0][0] __________________________________________________________________________________________________ conv4_block6_3_bn (BatchNormali (None, 10, 10, 1024) 4096 conv4_block6_3_conv[0][0] __________________________________________________________________________________________________ conv4_block6_add (Add) (None, 10, 10, 1024) 0 conv4_block5_out[0][0] conv4_block6_3_bn[0][0] __________________________________________________________________________________________________ conv4_block6_out (Activation) (None, 10, 10, 1024) 0 conv4_block6_add[0][0] __________________________________________________________________________________________________ conv4_block7_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block6_out[0][0] __________________________________________________________________________________________________ conv4_block7_1_bn (BatchNormali (None, 10, 10, 256) 1024 conv4_block7_1_conv[0][0] __________________________________________________________________________________________________ conv4_block7_1_relu (Activation (None, 10, 10, 256) 0 conv4_block7_1_bn[0][0] __________________________________________________________________________________________________ conv4_block7_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block7_1_relu[0][0] __________________________________________________________________________________________________ conv4_block7_2_bn (BatchNormali (None, 10, 10, 256) 1024 conv4_block7_2_conv[0][0] __________________________________________________________________________________________________ conv4_block7_2_relu (Activation (None, 10, 10, 256) 0 conv4_block7_2_bn[0][0] __________________________________________________________________________________________________ conv4_block7_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block7_2_relu[0][0] __________________________________________________________________________________________________ conv4_block7_3_bn (BatchNormali (None, 10, 10, 1024) 4096 conv4_block7_3_conv[0][0] __________________________________________________________________________________________________ conv4_block7_add (Add) (None, 10, 10, 1024) 0 conv4_block6_out[0][0] conv4_block7_3_bn[0][0] __________________________________________________________________________________________________ conv4_block7_out (Activation) (None, 10, 10, 1024) 0 conv4_block7_add[0][0] __________________________________________________________________________________________________ conv4_block8_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block7_out[0][0] __________________________________________________________________________________________________ conv4_block8_1_bn (BatchNormali (None, 10, 10, 256) 1024 conv4_block8_1_conv[0][0] __________________________________________________________________________________________________ conv4_block8_1_relu (Activation (None, 10, 10, 256) 0 conv4_block8_1_bn[0][0] __________________________________________________________________________________________________ conv4_block8_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block8_1_relu[0][0] __________________________________________________________________________________________________ conv4_block8_2_bn (BatchNormali (None, 10, 10, 256) 1024 conv4_block8_2_conv[0][0] __________________________________________________________________________________________________ conv4_block8_2_relu (Activation (None, 10, 10, 256) 0 conv4_block8_2_bn[0][0] __________________________________________________________________________________________________ conv4_block8_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block8_2_relu[0][0] __________________________________________________________________________________________________ conv4_block8_3_bn (BatchNormali (None, 10, 10, 1024) 4096 conv4_block8_3_conv[0][0] __________________________________________________________________________________________________ conv4_block8_add (Add) (None, 10, 10, 1024) 0 conv4_block7_out[0][0] conv4_block8_3_bn[0][0] __________________________________________________________________________________________________ conv4_block8_out (Activation) (None, 10, 10, 1024) 0 conv4_block8_add[0][0] __________________________________________________________________________________________________ conv4_block9_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block8_out[0][0] __________________________________________________________________________________________________ conv4_block9_1_bn (BatchNormali (None, 10, 10, 256) 1024 conv4_block9_1_conv[0][0] __________________________________________________________________________________________________ conv4_block9_1_relu (Activation (None, 10, 10, 256) 0 conv4_block9_1_bn[0][0] __________________________________________________________________________________________________ conv4_block9_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block9_1_relu[0][0] __________________________________________________________________________________________________ conv4_block9_2_bn (BatchNormali (None, 10, 10, 256) 1024 conv4_block9_2_conv[0][0] __________________________________________________________________________________________________ conv4_block9_2_relu (Activation (None, 10, 10, 256) 0 conv4_block9_2_bn[0][0] __________________________________________________________________________________________________ conv4_block9_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block9_2_relu[0][0] __________________________________________________________________________________________________ conv4_block9_3_bn (BatchNormali (None, 10, 10, 1024) 4096 conv4_block9_3_conv[0][0] __________________________________________________________________________________________________ conv4_block9_add (Add) (None, 10, 10, 1024) 0 conv4_block8_out[0][0] conv4_block9_3_bn[0][0] __________________________________________________________________________________________________ conv4_block9_out (Activation) (None, 10, 10, 1024) 0 conv4_block9_add[0][0] __________________________________________________________________________________________________ conv4_block10_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block9_out[0][0] __________________________________________________________________________________________________ conv4_block10_1_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block10_1_conv[0][0] __________________________________________________________________________________________________ conv4_block10_1_relu (Activatio (None, 10, 10, 256) 0 conv4_block10_1_bn[0][0] __________________________________________________________________________________________________ conv4_block10_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block10_1_relu[0][0] __________________________________________________________________________________________________ conv4_block10_2_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block10_2_conv[0][0] __________________________________________________________________________________________________ conv4_block10_2_relu (Activatio (None, 10, 10, 256) 0 conv4_block10_2_bn[0][0] __________________________________________________________________________________________________ conv4_block10_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block10_2_relu[0][0] __________________________________________________________________________________________________ conv4_block10_3_bn (BatchNormal (None, 10, 10, 1024) 4096 conv4_block10_3_conv[0][0] __________________________________________________________________________________________________ conv4_block10_add (Add) (None, 10, 10, 1024) 0 conv4_block9_out[0][0] conv4_block10_3_bn[0][0] __________________________________________________________________________________________________ conv4_block10_out (Activation) (None, 10, 10, 1024) 0 conv4_block10_add[0][0] __________________________________________________________________________________________________ conv4_block11_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block10_out[0][0] __________________________________________________________________________________________________ conv4_block11_1_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block11_1_conv[0][0] __________________________________________________________________________________________________ conv4_block11_1_relu (Activatio (None, 10, 10, 256) 0 conv4_block11_1_bn[0][0] __________________________________________________________________________________________________ conv4_block11_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block11_1_relu[0][0] __________________________________________________________________________________________________ conv4_block11_2_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block11_2_conv[0][0] __________________________________________________________________________________________________ conv4_block11_2_relu (Activatio (None, 10, 10, 256) 0 conv4_block11_2_bn[0][0] __________________________________________________________________________________________________ conv4_block11_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block11_2_relu[0][0] __________________________________________________________________________________________________ conv4_block11_3_bn (BatchNormal (None, 10, 10, 1024) 4096 conv4_block11_3_conv[0][0] __________________________________________________________________________________________________ conv4_block11_add (Add) (None, 10, 10, 1024) 0 conv4_block10_out[0][0] conv4_block11_3_bn[0][0] __________________________________________________________________________________________________ conv4_block11_out (Activation) (None, 10, 10, 1024) 0 conv4_block11_add[0][0] __________________________________________________________________________________________________ conv4_block12_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block11_out[0][0] __________________________________________________________________________________________________ conv4_block12_1_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block12_1_conv[0][0] __________________________________________________________________________________________________ conv4_block12_1_relu (Activatio (None, 10, 10, 256) 0 conv4_block12_1_bn[0][0] __________________________________________________________________________________________________ conv4_block12_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block12_1_relu[0][0] __________________________________________________________________________________________________ conv4_block12_2_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block12_2_conv[0][0] __________________________________________________________________________________________________ conv4_block12_2_relu (Activatio (None, 10, 10, 256) 0 conv4_block12_2_bn[0][0] __________________________________________________________________________________________________ conv4_block12_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block12_2_relu[0][0] __________________________________________________________________________________________________ conv4_block12_3_bn (BatchNormal (None, 10, 10, 1024) 4096 conv4_block12_3_conv[0][0] __________________________________________________________________________________________________ conv4_block12_add (Add) (None, 10, 10, 1024) 0 conv4_block11_out[0][0] conv4_block12_3_bn[0][0] __________________________________________________________________________________________________ conv4_block12_out (Activation) (None, 10, 10, 1024) 0 conv4_block12_add[0][0] __________________________________________________________________________________________________ conv4_block13_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block12_out[0][0] __________________________________________________________________________________________________ conv4_block13_1_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block13_1_conv[0][0] __________________________________________________________________________________________________ conv4_block13_1_relu (Activatio (None, 10, 10, 256) 0 conv4_block13_1_bn[0][0] __________________________________________________________________________________________________ conv4_block13_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block13_1_relu[0][0] __________________________________________________________________________________________________ conv4_block13_2_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block13_2_conv[0][0] __________________________________________________________________________________________________ conv4_block13_2_relu (Activatio (None, 10, 10, 256) 0 conv4_block13_2_bn[0][0] __________________________________________________________________________________________________ conv4_block13_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block13_2_relu[0][0] __________________________________________________________________________________________________ conv4_block13_3_bn (BatchNormal (None, 10, 10, 1024) 4096 conv4_block13_3_conv[0][0] __________________________________________________________________________________________________ conv4_block13_add (Add) (None, 10, 10, 1024) 0 conv4_block12_out[0][0] conv4_block13_3_bn[0][0] __________________________________________________________________________________________________ conv4_block13_out (Activation) (None, 10, 10, 1024) 0 conv4_block13_add[0][0] __________________________________________________________________________________________________ conv4_block14_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block13_out[0][0] __________________________________________________________________________________________________ conv4_block14_1_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block14_1_conv[0][0] __________________________________________________________________________________________________ conv4_block14_1_relu (Activatio (None, 10, 10, 256) 0 conv4_block14_1_bn[0][0] __________________________________________________________________________________________________ conv4_block14_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block14_1_relu[0][0] __________________________________________________________________________________________________ conv4_block14_2_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block14_2_conv[0][0] __________________________________________________________________________________________________ conv4_block14_2_relu (Activatio (None, 10, 10, 256) 0 conv4_block14_2_bn[0][0] __________________________________________________________________________________________________ conv4_block14_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block14_2_relu[0][0] __________________________________________________________________________________________________ conv4_block14_3_bn (BatchNormal (None, 10, 10, 1024) 4096 conv4_block14_3_conv[0][0] __________________________________________________________________________________________________ conv4_block14_add (Add) (None, 10, 10, 1024) 0 conv4_block13_out[0][0] conv4_block14_3_bn[0][0] __________________________________________________________________________________________________ conv4_block14_out (Activation) (None, 10, 10, 1024) 0 conv4_block14_add[0][0] __________________________________________________________________________________________________ conv4_block15_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block14_out[0][0] __________________________________________________________________________________________________ conv4_block15_1_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block15_1_conv[0][0] __________________________________________________________________________________________________ conv4_block15_1_relu (Activatio (None, 10, 10, 256) 0 conv4_block15_1_bn[0][0] __________________________________________________________________________________________________ conv4_block15_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block15_1_relu[0][0] __________________________________________________________________________________________________ conv4_block15_2_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block15_2_conv[0][0] __________________________________________________________________________________________________ conv4_block15_2_relu (Activatio (None, 10, 10, 256) 0 conv4_block15_2_bn[0][0] __________________________________________________________________________________________________ conv4_block15_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block15_2_relu[0][0] __________________________________________________________________________________________________ conv4_block15_3_bn (BatchNormal (None, 10, 10, 1024) 4096 conv4_block15_3_conv[0][0] __________________________________________________________________________________________________ conv4_block15_add (Add) (None, 10, 10, 1024) 0 conv4_block14_out[0][0] conv4_block15_3_bn[0][0] __________________________________________________________________________________________________ conv4_block15_out (Activation) (None, 10, 10, 1024) 0 conv4_block15_add[0][0] __________________________________________________________________________________________________ conv4_block16_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block15_out[0][0] __________________________________________________________________________________________________ conv4_block16_1_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block16_1_conv[0][0] __________________________________________________________________________________________________ conv4_block16_1_relu (Activatio (None, 10, 10, 256) 0 conv4_block16_1_bn[0][0] __________________________________________________________________________________________________ conv4_block16_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block16_1_relu[0][0] __________________________________________________________________________________________________ conv4_block16_2_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block16_2_conv[0][0] __________________________________________________________________________________________________ conv4_block16_2_relu (Activatio (None, 10, 10, 256) 0 conv4_block16_2_bn[0][0] __________________________________________________________________________________________________ conv4_block16_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block16_2_relu[0][0] __________________________________________________________________________________________________ conv4_block16_3_bn (BatchNormal (None, 10, 10, 1024) 4096 conv4_block16_3_conv[0][0] __________________________________________________________________________________________________ conv4_block16_add (Add) (None, 10, 10, 1024) 0 conv4_block15_out[0][0] conv4_block16_3_bn[0][0] __________________________________________________________________________________________________ conv4_block16_out (Activation) (None, 10, 10, 1024) 0 conv4_block16_add[0][0] __________________________________________________________________________________________________ conv4_block17_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block16_out[0][0] __________________________________________________________________________________________________ conv4_block17_1_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block17_1_conv[0][0] __________________________________________________________________________________________________ conv4_block17_1_relu (Activatio (None, 10, 10, 256) 0 conv4_block17_1_bn[0][0] __________________________________________________________________________________________________ conv4_block17_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block17_1_relu[0][0] __________________________________________________________________________________________________ conv4_block17_2_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block17_2_conv[0][0] __________________________________________________________________________________________________ conv4_block17_2_relu (Activatio (None, 10, 10, 256) 0 conv4_block17_2_bn[0][0] __________________________________________________________________________________________________ conv4_block17_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block17_2_relu[0][0] __________________________________________________________________________________________________ conv4_block17_3_bn (BatchNormal (None, 10, 10, 1024) 4096 conv4_block17_3_conv[0][0] __________________________________________________________________________________________________ conv4_block17_add (Add) (None, 10, 10, 1024) 0 conv4_block16_out[0][0] conv4_block17_3_bn[0][0] __________________________________________________________________________________________________ conv4_block17_out (Activation) (None, 10, 10, 1024) 0 conv4_block17_add[0][0] __________________________________________________________________________________________________ conv4_block18_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block17_out[0][0] __________________________________________________________________________________________________ conv4_block18_1_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block18_1_conv[0][0] __________________________________________________________________________________________________ conv4_block18_1_relu (Activatio (None, 10, 10, 256) 0 conv4_block18_1_bn[0][0] __________________________________________________________________________________________________ conv4_block18_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block18_1_relu[0][0] __________________________________________________________________________________________________ conv4_block18_2_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block18_2_conv[0][0] __________________________________________________________________________________________________ conv4_block18_2_relu (Activatio (None, 10, 10, 256) 0 conv4_block18_2_bn[0][0] __________________________________________________________________________________________________ conv4_block18_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block18_2_relu[0][0] __________________________________________________________________________________________________ conv4_block18_3_bn (BatchNormal (None, 10, 10, 1024) 4096 conv4_block18_3_conv[0][0] __________________________________________________________________________________________________ conv4_block18_add (Add) (None, 10, 10, 1024) 0 conv4_block17_out[0][0] conv4_block18_3_bn[0][0] __________________________________________________________________________________________________ conv4_block18_out (Activation) (None, 10, 10, 1024) 0 conv4_block18_add[0][0] __________________________________________________________________________________________________ conv4_block19_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block18_out[0][0] __________________________________________________________________________________________________ conv4_block19_1_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block19_1_conv[0][0] __________________________________________________________________________________________________ conv4_block19_1_relu (Activatio (None, 10, 10, 256) 0 conv4_block19_1_bn[0][0] __________________________________________________________________________________________________ conv4_block19_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block19_1_relu[0][0] __________________________________________________________________________________________________ conv4_block19_2_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block19_2_conv[0][0] __________________________________________________________________________________________________ conv4_block19_2_relu (Activatio (None, 10, 10, 256) 0 conv4_block19_2_bn[0][0] __________________________________________________________________________________________________ conv4_block19_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block19_2_relu[0][0] __________________________________________________________________________________________________ conv4_block19_3_bn (BatchNormal (None, 10, 10, 1024) 4096 conv4_block19_3_conv[0][0] __________________________________________________________________________________________________ conv4_block19_add (Add) (None, 10, 10, 1024) 0 conv4_block18_out[0][0] conv4_block19_3_bn[0][0] __________________________________________________________________________________________________ conv4_block19_out (Activation) (None, 10, 10, 1024) 0 conv4_block19_add[0][0] __________________________________________________________________________________________________ conv4_block20_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block19_out[0][0] __________________________________________________________________________________________________ conv4_block20_1_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block20_1_conv[0][0] __________________________________________________________________________________________________ conv4_block20_1_relu (Activatio (None, 10, 10, 256) 0 conv4_block20_1_bn[0][0] __________________________________________________________________________________________________ conv4_block20_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block20_1_relu[0][0] __________________________________________________________________________________________________ conv4_block20_2_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block20_2_conv[0][0] __________________________________________________________________________________________________ conv4_block20_2_relu (Activatio (None, 10, 10, 256) 0 conv4_block20_2_bn[0][0] __________________________________________________________________________________________________ conv4_block20_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block20_2_relu[0][0] __________________________________________________________________________________________________ conv4_block20_3_bn (BatchNormal (None, 10, 10, 1024) 4096 conv4_block20_3_conv[0][0] __________________________________________________________________________________________________ conv4_block20_add (Add) (None, 10, 10, 1024) 0 conv4_block19_out[0][0] conv4_block20_3_bn[0][0] __________________________________________________________________________________________________ conv4_block20_out (Activation) (None, 10, 10, 1024) 0 conv4_block20_add[0][0] __________________________________________________________________________________________________ conv4_block21_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block20_out[0][0] __________________________________________________________________________________________________ conv4_block21_1_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block21_1_conv[0][0] __________________________________________________________________________________________________ conv4_block21_1_relu (Activatio (None, 10, 10, 256) 0 conv4_block21_1_bn[0][0] __________________________________________________________________________________________________ conv4_block21_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block21_1_relu[0][0] __________________________________________________________________________________________________ conv4_block21_2_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block21_2_conv[0][0] __________________________________________________________________________________________________ conv4_block21_2_relu (Activatio (None, 10, 10, 256) 0 conv4_block21_2_bn[0][0] __________________________________________________________________________________________________ conv4_block21_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block21_2_relu[0][0] __________________________________________________________________________________________________ conv4_block21_3_bn (BatchNormal (None, 10, 10, 1024) 4096 conv4_block21_3_conv[0][0] __________________________________________________________________________________________________ conv4_block21_add (Add) (None, 10, 10, 1024) 0 conv4_block20_out[0][0] conv4_block21_3_bn[0][0] __________________________________________________________________________________________________ conv4_block21_out (Activation) (None, 10, 10, 1024) 0 conv4_block21_add[0][0] __________________________________________________________________________________________________ conv4_block22_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block21_out[0][0] __________________________________________________________________________________________________ conv4_block22_1_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block22_1_conv[0][0] __________________________________________________________________________________________________ conv4_block22_1_relu (Activatio (None, 10, 10, 256) 0 conv4_block22_1_bn[0][0] __________________________________________________________________________________________________ conv4_block22_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block22_1_relu[0][0] __________________________________________________________________________________________________ conv4_block22_2_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block22_2_conv[0][0] __________________________________________________________________________________________________ conv4_block22_2_relu (Activatio (None, 10, 10, 256) 0 conv4_block22_2_bn[0][0] __________________________________________________________________________________________________ conv4_block22_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block22_2_relu[0][0] __________________________________________________________________________________________________ conv4_block22_3_bn (BatchNormal (None, 10, 10, 1024) 4096 conv4_block22_3_conv[0][0] __________________________________________________________________________________________________ conv4_block22_add (Add) (None, 10, 10, 1024) 0 conv4_block21_out[0][0] conv4_block22_3_bn[0][0] __________________________________________________________________________________________________ conv4_block22_out (Activation) (None, 10, 10, 1024) 0 conv4_block22_add[0][0] __________________________________________________________________________________________________ conv4_block23_1_conv (Conv2D) (None, 10, 10, 256) 262400 conv4_block22_out[0][0] __________________________________________________________________________________________________ conv4_block23_1_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block23_1_conv[0][0] __________________________________________________________________________________________________ conv4_block23_1_relu (Activatio (None, 10, 10, 256) 0 conv4_block23_1_bn[0][0] __________________________________________________________________________________________________ conv4_block23_2_conv (Conv2D) (None, 10, 10, 256) 590080 conv4_block23_1_relu[0][0] __________________________________________________________________________________________________ conv4_block23_2_bn (BatchNormal (None, 10, 10, 256) 1024 conv4_block23_2_conv[0][0] __________________________________________________________________________________________________ conv4_block23_2_relu (Activatio (None, 10, 10, 256) 0 conv4_block23_2_bn[0][0] __________________________________________________________________________________________________ conv4_block23_3_conv (Conv2D) (None, 10, 10, 1024) 263168 conv4_block23_2_relu[0][0] __________________________________________________________________________________________________ conv4_block23_3_bn (BatchNormal (None, 10, 10, 1024) 4096 conv4_block23_3_conv[0][0] __________________________________________________________________________________________________ conv4_block23_add (Add) (None, 10, 10, 1024) 0 conv4_block22_out[0][0] conv4_block23_3_bn[0][0] __________________________________________________________________________________________________ conv4_block23_out (Activation) (None, 10, 10, 1024) 0 conv4_block23_add[0][0] __________________________________________________________________________________________________ conv5_block1_1_conv (Conv2D) (None, 5, 5, 512) 524800 conv4_block23_out[0][0] __________________________________________________________________________________________________ conv5_block1_1_bn (BatchNormali (None, 5, 5, 512) 2048 conv5_block1_1_conv[0][0] __________________________________________________________________________________________________ conv5_block1_1_relu (Activation (None, 5, 5, 512) 0 conv5_block1_1_bn[0][0] __________________________________________________________________________________________________ conv5_block1_2_conv (Conv2D) (None, 5, 5, 512) 2359808 conv5_block1_1_relu[0][0] __________________________________________________________________________________________________ conv5_block1_2_bn (BatchNormali (None, 5, 5, 512) 2048 conv5_block1_2_conv[0][0] __________________________________________________________________________________________________ conv5_block1_2_relu (Activation (None, 5, 5, 512) 0 conv5_block1_2_bn[0][0] __________________________________________________________________________________________________ conv5_block1_0_conv (Conv2D) (None, 5, 5, 2048) 2099200 conv4_block23_out[0][0] __________________________________________________________________________________________________ conv5_block1_3_conv (Conv2D) (None, 5, 5, 2048) 1050624 conv5_block1_2_relu[0][0] __________________________________________________________________________________________________ conv5_block1_0_bn (BatchNormali (None, 5, 5, 2048) 8192 conv5_block1_0_conv[0][0] __________________________________________________________________________________________________ conv5_block1_3_bn (BatchNormali (None, 5, 5, 2048) 8192 conv5_block1_3_conv[0][0] __________________________________________________________________________________________________ conv5_block1_add (Add) (None, 5, 5, 2048) 0 conv5_block1_0_bn[0][0] conv5_block1_3_bn[0][0] __________________________________________________________________________________________________ conv5_block1_out (Activation) (None, 5, 5, 2048) 0 conv5_block1_add[0][0] __________________________________________________________________________________________________ conv5_block2_1_conv (Conv2D) (None, 5, 5, 512) 1049088 conv5_block1_out[0][0] __________________________________________________________________________________________________ conv5_block2_1_bn (BatchNormali (None, 5, 5, 512) 2048 conv5_block2_1_conv[0][0] __________________________________________________________________________________________________ conv5_block2_1_relu (Activation (None, 5, 5, 512) 0 conv5_block2_1_bn[0][0] __________________________________________________________________________________________________ conv5_block2_2_conv (Conv2D) (None, 5, 5, 512) 2359808 conv5_block2_1_relu[0][0] __________________________________________________________________________________________________ conv5_block2_2_bn (BatchNormali (None, 5, 5, 512) 2048 conv5_block2_2_conv[0][0] __________________________________________________________________________________________________ conv5_block2_2_relu (Activation (None, 5, 5, 512) 0 conv5_block2_2_bn[0][0] __________________________________________________________________________________________________ conv5_block2_3_conv (Conv2D) (None, 5, 5, 2048) 1050624 conv5_block2_2_relu[0][0] __________________________________________________________________________________________________ conv5_block2_3_bn (BatchNormali (None, 5, 5, 2048) 8192 conv5_block2_3_conv[0][0] __________________________________________________________________________________________________ conv5_block2_add (Add) (None, 5, 5, 2048) 0 conv5_block1_out[0][0] conv5_block2_3_bn[0][0] __________________________________________________________________________________________________ conv5_block2_out (Activation) (None, 5, 5, 2048) 0 conv5_block2_add[0][0] __________________________________________________________________________________________________ conv5_block3_1_conv (Conv2D) (None, 5, 5, 512) 1049088 conv5_block2_out[0][0] __________________________________________________________________________________________________ conv5_block3_1_bn (BatchNormali (None, 5, 5, 512) 2048 conv5_block3_1_conv[0][0] __________________________________________________________________________________________________ conv5_block3_1_relu (Activation (None, 5, 5, 512) 0 conv5_block3_1_bn[0][0] __________________________________________________________________________________________________ conv5_block3_2_conv (Conv2D) (None, 5, 5, 512) 2359808 conv5_block3_1_relu[0][0] __________________________________________________________________________________________________ conv5_block3_2_bn (BatchNormali (None, 5, 5, 512) 2048 conv5_block3_2_conv[0][0] __________________________________________________________________________________________________ conv5_block3_2_relu (Activation (None, 5, 5, 512) 0 conv5_block3_2_bn[0][0] __________________________________________________________________________________________________ conv5_block3_3_conv (Conv2D) (None, 5, 5, 2048) 1050624 conv5_block3_2_relu[0][0] __________________________________________________________________________________________________ conv5_block3_3_bn (BatchNormali (None, 5, 5, 2048) 8192 conv5_block3_3_conv[0][0] __________________________________________________________________________________________________ conv5_block3_add (Add) (None, 5, 5, 2048) 0 conv5_block2_out[0][0] conv5_block3_3_bn[0][0] __________________________________________________________________________________________________ conv5_block3_out (Activation) (None, 5, 5, 2048) 0 conv5_block3_add[0][0] __________________________________________________________________________________________________ avg_pool (GlobalAveragePooling2 (None, 2048) 0 conv5_block3_out[0][0] __________________________________________________________________________________________________ probs (Dense) (None, 16) 32784 avg_pool[0][0] ================================================================================================== Total params: 42,690,960 Trainable params: 42,585,616 Non-trainable params: 105,344 另外有相关问题可以加入QQ群讨论,不设微信群

2019秋招面试总结

2019秋招小结 题目汇总java基础网络操作系统算法jvm数据库框架其他HR面自我介绍 题目汇总 java基础 Java map底层实现,HashMap,ConcurrentHashMap的1.7和1.8的不同和具体实现1.8版本的concurentHashMap在单线程下和HashMap效率有什么区别。sorted set底层?HashMap多线程插入是否线程安全(各自Key不相同)什么是一致性哈希 https://www.jianshu.com/p/49e3fbf41b9bJava中pv操作实现时用的类 semaphoreSynchronize的内部实现,可以用什么代替。其标注不同方法有什么区别。 https://blog.csdn.net/qq_32924343/article/details/79614775java中char能存全部中文(表情呢)吗 https://www.jianshu.com/p/4c29d96d5e06?utm_campaignjava元注解 https://blog.csdn.net/lkp1603645756/article/details/84072600HashMap是不是线程安全的,为什么不安全,会出现哪些问题, 扩容出现环死循环?死循环cpu的状态是怎么样的?占用率100%吗?那此时其他线程能不能使用cpu?cpu核数和占用率什么关系?cpu100%对整个服务器有什么影响?java函数值传递还是引用传递 https://baijiahao.baidu.com/s?id=1614769568984126810&wfr=spider&for=pcThreadLocal是如何实现的? https://blog.csdn.net/sonny543/article/details/51336457 https://www.jianshu.com/p/ee8c9dccc953java线程池的具体参数,最长空闲等待时间的具体情况,释放线程的过程,什么时候什么情况释放,释放时队列的情况是怎么样的。 https://www.cnblogs.com/cdf-opensource-007/p/8769777.html为什么要用线程池?单核cpu有必要用线程池吗?多线程和JUC,AQS、ReentrantLock、线程池、CountDownLatch、CyclicBarrier,和具体实现。CAS,ABA问题,cpu空转Atomic在高并发场景下有什么问题,缺点?volatile,作用,底层,lock 前缀的指令,多CPU的嗅探机制,多处理器下的缓存一致性协议异常和error的区别,oom是error还是异常?什么东西分配在堆上和栈上?异常机制怎么理解?RMI怎么实现的?cglib和jdk的动态代理的实现原理?这两者之间性能的区别?动态代理、反射生产的对象在jvm的哪里?会不会影响到永久代或者是8以后的元空间?java如何查看线程死锁servlet,filter讲一下Collections.sort的实现方法: timsortlist为什么有序,set为什么无序wait和sleep的区别,wait和await区别java中int和Integer的区别,为什么有了int还要有设计Integer哈希函数作用及实现,以及和equals的关系内存泄漏和溢出堆的底层是如何实现的java层面上的异步和同步Lock是如何实现线程安全的?Java中的锁机制是如何实现的?有什么区别?hashmap为什么要在链表长度为8再变红黑树jndi和rmi 网络 TCP三次握手,四次挥手。为啥要三次和四次?很多close wait,为什么http与https区别(wireshark抓包),https可能出现不安全的地方。打开一个url,会经历那些过程。类似的还有打开一个app到首页加载出来中间用到七层模型中的哪些协议?http状态码tcp如何保证安全可靠RPC框架和普通http有什么区别和优势? 基于Tcp封装还是http封装的。restfulAPI和RPC的区别 rpc是长连接吗?如果要传输一个特别大的文件 底层还是基于流吗?Nio是一个什么IO模型?拥塞控制 以及里面的算法?流量控制的协议Ping命令做了什么?ping是哪一个层的?基于什么协议?get和post区别,tcp和udp区别。DNS的分层结构。osi模型,各个层有哪些协议。IP地址的Regex说一下tcp/ip协议?Java中server端怎么实现?http和tcp头部长连接与短连接?如何知道这个数据包的顺序?cookie和session区别HTTP数据量很大,怎么发送CP server最多可以建立多少个TCP连接查看某个端口的情况(使用情况,连接等)以太网帧的格式 最小传输单元MTU的概念arp报文格式,ip/mac互查机制 arp缓存ip首部格式 ip分片(如何分片,如何保证顺序,接收端如何确认所有分片都到达,能否避免分片(传输层/应用层作限制)) 路由表icmp分为俩种,2种查询报文+5种差错报文tcp首部 三握、四挥、同时打开、同时关闭、半关闭tcp流量控制 滑动窗口、慢启动、拥塞避免、快速重传、快速恢复 超时重传(4个定时器)dns名字空间 指针查询(反向查找) dns缓存ftp 控制连接、数据连接 pasv/port俩种工作模式 各种指令和响应码 断电续传和匿名ftphttp报文格式 请求头和响应头的各种字段 http状态码 https握手过程 摘要算法、数字签名、数字证书的原理 操作系统 进程通信,线程间通信的同步异步问题进程线程区别线程间通信的同步异步问题进程中什么数据可以给线程共用,进程内存区域划分(数据区、代码区…),哪些是线程共享,哪些是线程独占复制粘贴过程中操作系统做了些什么说明一下缺页中断,虚拟内存,分页地址转换 内存抖动linux的fork指令对数据的拷贝是马上就拷贝的吗?linux看网络状况用什么 看日志用什么?协程的好处 和线程的对比物理地址与逻辑地址的概念,换算关系select/epoll原理僵尸、孤儿进程如何处理linux常用指令死锁产生条件,如何避免进程创建和线程创建的底层实现一个进程是不是可以创建无限数量的线程,线程的数量会受到什么限制,线程在内存中会占用什么资源一个进程,有十个线程,其中一个线程fork后,子进程有几个线程进程间通信和线程间通信的区别linux内核五种io模型?阻塞/非阻塞,同步异步指什么? 算法 单链表翻转(递归、循环头插)海量数据排序,如何在海量数据找最小的100条一个long类型的数,让他整个位倒转,能不能只迭代8次完成一个数组一个数只有一个其他数两个,找到单独的那个数(LeetCode原题)一个数组有一个数超过一半,找到这个数(LeetCode原题)红黑树的优缺点,红黑树与平衡树的区别,各自的应用场景单链表快排用 1到5的随机数生成器生成 1到7编辑距离青蛙跳台阶简单实现一下LRU?如何优化?二叉树俩个最远节点的路径长度平衡二叉树,二叉搜索树,二叉排序树,二叉线索树。本地化树及恢复层序遍历二叉树 分行打印通配符匹配3sum输出二叉树各层 首个节点一个稳定的排序如何变为稳定的?在不改变原算法的前提下? jvm Java内存溢出JavaGC(垃圾回收),Gc root,常用的垃圾回收算法,垃圾收集器,g1对stw如何优化?哪些可以作为GCRoot? 虚拟机栈(栈帧中的本地变量表)中引用的对象 方法区中的类静态属性引用的对象 方法区中的常量引用的对象 本地方法栈中JNI(即Native方法)的引用的对象Java中有全局变量吗Java内存管理(栈,堆,方法区,程序计数区)java类变量的加载过程,父类静态变量和子类静态变量哪个先加载,int和long哪个先加载java中如何分配一个对象synchronized的锁的机制,自旋锁,可重入锁,偏向锁,轻量级锁、重量级锁,锁的膨胀过程jvm的内存布局(和jmm不同)和gc过程,jvm怎么调优,什么看gc的日志之类的只对堆进行gc 这句话对不对 调用system.gc()马上就执行gc吗jvm动态分派java启动参数,java常用工具类类加载机制,双亲委派模型类是如何加载的,如何自己设计一个类加载器 数据库 事务的原理,ACID是如何保证的?数据库三范式举例MySQL的事务类型了解吗?扁平事务、带有保存点的扁平事务、链事务、嵌套事务、分布式事务mysql事务的隔离级别,如何实现,隔离是为了什么mysql的引擎,索引的工作原理,为什么快,有哪些索引?Innodb和Myisam的区别?myisam为什么不支持事务?覆盖索引主键索引和非主键索引的区别,讲了聚集索引,然后问了索引访问的过程,问了用聚集索引和不用的磁盘io访问次数的不同,组合索引的最左匹配原则?高并发时b+树如何加锁。一个sql查询慢,百万级别,单表,你觉得性能问题可能出在哪?如果两表查慢,问题出在哪?Inner join 和left join 性能不同,inner join反而慢是为什么?Mysql和Redis最大的区别?mysql的文件系统,是怎么找数据的?数据量特别大的时候 mysql会怎么去做慢查询优化,如何合理建索引MYSQL 为什么用B 树不用红黑树InnoDB是如何实现聚集索引的?乐观锁和悲观锁以及各自的适用场景。如何在查询的时候不让改数据。select xx for update。多个索引,mysql如何选择索引?分页查询sql语句?插件?mycat用过吗? 框架 Spring的bean的生命周期Spring的IOC和AOP知道吧,实现及原理?单实例无状态你怎么理解?SpringMVC和Servlet的区别SpringBoot 有什么好处,答一个好处就问是怎么实现这个好处的SpringBoot的自动配置如何实现的?SpringBoot相比于Spring框架有什么优势mybatis防止sql注入怎么实现Mybatis和hibernate的区别Redis为什么快,内存数据库、单线程、IO多路复用的epoll?redis的使用场景,和memrycache的区别Redis的设计思路,这么设计的好处是什么?Redis Cluster用过吗? Redis集群怎么搭?怎么分片的?Redis,持久化,RDB和AOF,AOF的具体过程,AOF文件重写是怎么做的Redis为什么单线程Redis底层的数据结构,SDS,缓存一致性是什么使用redis来实现单点登录,那么当单个redis节点内存不够的时候,怎么办? 集群化,redis-Clusterredis怎么实现消息队列?怎么实现分布式锁?spring如何解决循环依赖Spring是怎么支持事务的为什么@Transation注解修饰的方法可以在多线程的方式下互不影响 其他 服务器变慢的原因排查看过哪些书,有什么印象深刻地方,学到什么?职业生涯规划分布式锁的实现设计模式架构师的任务你有什么想问的微服务,dubbo,springcloud,springdata消息队列,activemq,rocketmq,rabbitmq,kafkamongodb,neo4j,hivees,zookeeper,docker,kubernetes,hadoop,sparkgit,maven,gradle,jenkins,shiro,nettyrestapi,protobuf,thrift关注过哪些github项目 HR面 个人优缺点家庭情况导师和同学的评价从学校经历和项目经历的角度做一下自我介绍?在XX公司实习过程中,遇见最大的项难题是啥,如何解决的?本科生的成绩如何? 研究生的成绩如何?最近生活或者工作上遇见最大的困难是啥?如何克服的?XX公司有留用机会吗?为什么不选择留在xx公司?您的职业规划路线是怎么样的?跟同龄人相比,你最大的优势是啥?最大的劣势是啥?为什么说你最大的优势是XXX,能够举个例子吗?了解我们的业务吗?你对XXX(业务)怎么看?对于XX这个城市有什么看法? 为啥不考虑回老家呢?父母职业工作是啥?有直系亲属在XX工作吗?父母对你选择工作地点有影响吗?有别的offer吗? 如果面临多个offer选择,你会怎么考虑? 自我介绍 最简单的模板

SpringMVC和Jackson解决Long 精度丢失(多方案)

概述 问题描述 Java输出至前端的整数长度超过16位时,前端js在解析整数时,超过16位的整数时,后面的数字会损失精度。 问题原因 JS内置的number类型是基于32位整数,Number类型的最大安全整数为9007199254740991,当Java Long型的值大小超过JS Number的最大安全整数时,超出此范围的整数值可能会被破坏,丢失精度。 解决办法 在后台将整数转换成字符串,围绕这个目标,共探索出5种解决方案,能满足大部分的个性化需求。 解决方案 过滤器统一拦截自定义Serializer序列化类POJO属性增加注解修改Serializers源码代码转化 项目环境: Spring 3.X and Jackson 2.X 1)过滤器统一拦截 配置Spring消息转换器的ObjectMapper类,引用创建的自定义类型转换器类。 创建CustomObjectMapperForJackson类 package com.xiaodajia.framework.util.web.databind; import java.math.BigDecimal; import java.math.BigInteger; import java.text.SimpleDateFormat; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; public class CustomObjectMapperForJackson extends ObjectMapper { public CustomObjectMapperForJackson() { super(); // 设置日期转换yyyy-MM-dd HH:mm:ss setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); SimpleModule simpleModule = new SimpleModule(); simpleModule.addSerializer(BigDecimal.class, ToStringSerializer.instance); simpleModule.addSerializer(BigInteger.class, ToStringSerializer.instance); simpleModule.addSerializer(Long.class, ToStringSerializer.instance); simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); registerModule(simpleModule); } } spring-mvc.xml配置objectMapper <mvc:annotation-driven validator="validator" conversion-service="

接口和注解

//事务管控 create创建 update更新 delete删除 get查找 find列表查询 //接口的请求方法 get查找 post创建 put更新 delete删除 $.ajax({ url:"<%=path%>/user/jsonTest.do", contentType:‘application/json;charset=utf-8’,//设置json格式 data:’{“username”:“张三”:“address”:“福州”}’, type:‘post’, success:function(data){ alert(data); },error:function(error){ alert(error); } }) @AutoWIred适用于fields,constructors,multi-argument methods这些允许在参数级别使用@Qualifier注解缩小范围的情况 @Resource适用于成员变量,只有一个参数的setter方法,所以在目标是构造器或一个多参数方法时,最好的方式是使用qualifiers @Controller (注入服务) @RequestMapping 来映射 Request 请求与处理器 @RequestBody用于读取http请求的内容(字符串) @RequestParam 绑定 HttpServletRequest 请求参数到控制器方法参数 @Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文, 如:json、xml等 如果存在多个同一类型的bean,则Spring会抛出异常,表示装配有歧义,解决办法有两个: (1)通过@Qualifier注解指定需要的bean的ID; (2)通过@Resource注解指定注入特定ID的bean; @Autowired 和 @Service("")的配合使用: @Transactional 使用时机: 对数据库的数据进行批量或连表操作时,为了保证数据的一致性和正确性,则需要添加事务管理机制进行管理; 当对数据库的数据操作失败时,事务管理可以很好保证所有的数据 回滚 到原来的数据,如果操作成功,则保证所有的需要更新的数据持久化。 @Param mybatis提供了一个使用注解来参入多个参数的方法,这种方法需要在接口的参数上添加@Param注解。 举个例子: /** * 更新学生信息 * @param student * @return */ int updateInfo(@Param(“student”) Student student);

PSQLException: ERROR: 42703: column "xxxxx" does not exist

问题背景:在公司项目开发中,使用到了瀚高数据库(瀚高数据库是基于开源数据库PostgreSQL上再次开发的),数据库语法啥的都和PostgreSQL上基本一致,在开发过程中表数据导入时遇到了PSQLException: ERROR: 42703错误 错误信息: ==> Preparing: INSERT INTO dev_Centre."BigClassStru" ( BigClassName, BigClassHits, Admin, ClassOrder, HotSelect, edit, dele, PBigClassID, LinkType, Oldid, lasttime, IsOnIndex, SH, FB ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) ==> Parameters: 信息公开(String), 0(Integer), admin(String), 1(Integer), 0(Integer), admin(String), admin(String), 0(Integer), 1(Integer), 1(Integer), 2008-07-28 10:38:41.0(Timestamp), 0(Integer), admin(String), admin(String) Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@cc71ac] org.springframework.jdbc.BadSqlGrammarException: ### Error updating database. Cause: com.

图的连通性——通路和回路

图的连通性——通路和回路 Abstract1. 通路和回路1.2 通路和回路的概念和定义1.3 回路通路举例1.4 回路记号简化 2. 通路数量2.1 通路数量的计算2.2 通路计算数学归纳法证明2.3 通路数量计算案例2.3.1 无向图的通路数计算2.3.2 有向图通路数的计算 Abstract 声明:本文只为我闲暇时候学习所做笔记,仅供我无聊时复习所用,若文中有错,误导了读者,敬请谅解!!! 图的同构参见我的语雀:图论:https://www.yuque.com/jhongtao/mai/gu9wdo 1. 通路和回路 为什么会有通路和回路 1.2 通路和回路的概念和定义 1.3 回路通路举例 1.4 回路记号简化 2. 通路数量 2.1 通路数量的计算 2.2 通路计算数学归纳法证明 2.3 通路数量计算案例 2.3.1 无向图的通路数计算 2.3.2 有向图通路数的计算

vue项目中实现文字滚动(跑马灯)效果——公告滚动播放

项目需求:系统公告,要从右忘左循环播放的牛皮广告效果。 实现: 方案一:使用定时器和CSS3的过渡属性来实现。 <template> <div class="notice-card-wrapper"> <div id="message-wrap" ref="out" class="message"> <div id="con1" ref="con1" :class="{anim:animate==true}" style="margin-left: 2500px;"> <span v-html="notice"></span> </div> </div> </div> </template> 关键标签ref='con1 和内部的span,con1上面有一个anim样式,根据animate变量的变化来动态变化。 注意,我这里给了一个margin-left:2500px的初始位置 data() { return { animate: true, notice: '', intervalId: null // 定时器标识 } }, 定义需要的属性变量 mounted() { this.scroll() // 动画先执行一次 this.intervalId = setInterval(this.scroll, 16000) // 间隔时间后重复执行 }, updated() { }, destroyed() { clearInterval(this.intervalId) // 清除定时器 }, methods: { // 异步ajax获取公告内容,略过 handleFetchNotice() { fetchNotice().then(res => { this.

日期时间类

1.1 Date类 概述 java.util.Date类 表示特定的瞬间,精确到毫秒。 继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象。 public Date():分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。public Date(long date):分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。 tips: 由于中国处于东八区(GMT+08:00)是比世界协调时间/格林尼治时间(GMT)快8小时的时区,当格林尼治标准时间为0:00时,东八区的标准时间为08:00。 简单来说:使用无参构造,可以自动设置当前系统时间的毫秒时刻;指定long类型的构造参数,可以自定义毫秒时刻。例如: import java.util.Date; public class Demo01Date { public static void main(String[] args) { // 创建日期对象,把当前的时间 System.out.println(new Date()); // Tue Jan 16 14:37:35 CST 2020 // 创建日期对象,把当前的毫秒值转成日期对象 System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970 } } 常用方法 Date类中的多数方法已经过时,常用的方法有: public long getTime() 把日期对象转换成对应的时间毫秒值。 1.2 DateFormat类 java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。 格式化:按照指定的格式,从Date对象转换为String对象。解析:按照指定的格式,从String对象转换为Date对象。 构造方法 由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat。这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为: public SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。 参数pattern是一个字符串,代表日期时间的自定义格式。 格式规则 常用的格式规则为:

防火墙配置NAT 多出口

防火墙配置NAT多出口 配置实例 某企业的网络拓扑如下 部门A:vlan11:192.168.11.1 /24 部门B:vlan12:192.168.12.1/24 两个部门均通过vlan10接入防火墙,从而访问外部网络。内部服务器开启了web服务以及ftp服务,外部客户端只能访问内部的web服务和ftp服务。防火墙有联通和电信两个出口。 设备配置 防火墙配置 interface GigabitEthernet0/0/2 ip address 192.168.1.1 255.255.255.0 interface GigabitEthernet0/0/3 ip address 192.168.10.2 255.255.255.0 interface GigabitEthernet0/0/7 ip address 1.1.1.2 255.255.255.0 interface GigabitEthernet0/0/8 ip address 8.8.8.2 255.255.255.0 firewall zone trust set priority 85 add interface GigabitEthernet0/0/0 add interface GigabitEthernet0/0/3 firewall zone dmz set priority 50 add interface GigabitEthernet0/0/2 firewall zone name dx set priority 15 add interface GigabitEthernet0/0/7 firewall zone name lt set priority 20 add interface GigabitEthernet0/0/8 firewall interzone dmz dx detect ftp firewall interzone dmz lt detect ftp ip route-static 2.

Android资源管理框架-------之Bag资源信息的获取(七)

前文我们以Integer为例介绍了最简单的资源的获取,说它是最简单的主要是基于以下两个点:第一,它没有Bag;第二,它是values类型的资源,资源索引表里存放的是最终值,而不是资源路径等资源相关的信息,我们不需要再根据这些信息去取得最终值(比如去加载图片,然后创建drawable对象等等)。我们在这篇文章里主要针对第一点,也就是介绍一下带有Bag的资源,android是怎么去获取这些资源相关的信息的(对于非values类型的资源,我们从resources.arsc里只能获取到资源信息,而不是资源本身)。 我们经常用到的带有Bag的资源主要包括:各种array(array、string-array、integer-array)、plurals、style等,我们一个一个分开说。 string-array资源的获取 我们知道各种array是一种非常典型的带有Bag的资源,它的Bag的key是^index_%d,其中%d表示0,1,2,3…等索引号;它的value就是我们在item标签中的值了。假设我们在apk的资源文件中有如下的array: <string-array name="camera_modes" translatable="false"> <item>photo</item> <item>video</item> <item>refocus</item> <item>photosphere</item> <item>panorama</item> <item>@android:string/gcma</item> <!--这里引用了系统包中的资源--> </string-array> 前文我们介绍过integer资源的获取过程,它最主要的过程是在native层的ResTable对象里,通过getResource方法,根据我们传过来的资源Id,找到对应的ResTable_entry,进而找到Res_value获取我们需要的资源信息。不过,带有Bag的资源,其流程不太一样下面我们详细分析。Resources类中String数组获取的相关方法有三个: public CharSequence[] getTextArray(int id) throws NotFoundException public String[] getStringArray(int id) throws NotFoundException public TypedArray obtainTypedArray(int id) throws NotFoundException 这三个方法的区别是什么呢?首先,getTextArray和getStringArray方法只能用来获取字符串类型的资源。也就是说,他们所对应的资源必须是string-array或者array(是array的时候要注意,它的每一个item都必须是一个字符串,或者是一个字符串的引用即一个指向字符串资源的id,形如@android:string/cance这种)。至于getTextArray和getStringArray方法的区别,和Resources类中getText与getString方法的区别一样:前者获取到的字符串是带style的(比如加粗、斜体等),而后者则是纯文本的。前者返回的是一个CharSequence数组,后者返回的是一个String数组。其实我们知道在底层的ResStringPool中是有存储一个字符串的style信息的,所以我们可以通过getTextArray将其返回。另外,多说一句String本身也是CharSequence接口的实现类,getTextArray方法返回的CharSequence接口的实现类到底是哪个呢?是android自己实现的android.text.SpannedString类,这个跟本文关系不大,就不展开说了。 相比前两者,obtainTypedArray方法则灵活得多,它可以用来获取各种类型的资源数组,比如CharSequence、String、Integer、Boolean、Float、Color、ColorList、Drawable、Dimension、Fraction或者资源Id等等,与它对应的xml中资源可以是array、integer-array、string-array等都可以。但是它的用法和前面的那两个不太一样,这个方法不会直接返回对应的资源数组,而是返回一个TypedArray对象,我们可以从这个对象中获取想要的资源。为什么这个方法可以这么灵活呢?是因为这个方法返回TypedArray的时候,并不会对里面的内容做类型检查,而前面的那两个方法则会做类型检查,如果不是String,则不会往结果里写数据。这三个方法实现上有所不同,但获取资源时的原理是相通的,我们就以getStringArray方法为例来简要分析其实现过程: //frameworks/base/base/core/java/android/content/res/Resources.java public String[] getStringArray(int id) throws NotFoundException { String[] res = mAssets.getResourceStringArray(id); if (res != null) { return res; } throw new NotFoundException("String array resource ID #0x" + Integer.toHexString(id)); } mAssets是AssetManager的一个实例,进入Assetmanager类: //frameworks/base/core/java/android/content/res/AssetManager.java final String[] getResourceStringArray(final int id) { String[] retArray = getArrayStringResource(id); return retArray; } private native final String[] getArrayStringResource(int arrayRes); 没有什么好说的,进入jni层:

Spring Data JPA 学习

Spring Data JPA是个非常强大的ORM持久化解决方案,免去了mybatis或spring jdbcTemplate的开发人员编写脚本的无趣工作。 Spring Data JPA官方文档 https://docs.spring.io/spring-data/jpa/docs/2.0.9.RELEASE/reference/html/ 目录 一、首先了解下Spring Data JPA 的继承结构 二、首先了解下Spring Data JPA 的运行原理(简单说下) 三、Repository接口 方法名称命名规则查询 @Query注解查询 @Query注解完成修改 四、CrudRepository接口 五、PagingAndSortingRepository接口 六、JpaRepository接口 七、JpaSpecificationExecutor接口 八、自定义Repository接口 一、首先了解下Spring Data JPA 的继承结构 Repository:标识接口 CrudRepository:用于CRUD操作(修改的方法和添加一样都是save,至于什么时候是修改,什么时候是添加后面会说) PagingAndSortingRepository:用于分页和排序操作 JpaRepository:将其他接口的方法的返回值做适配处理 除了图中的内容,还必须掌握JpaSpecificationExecutor,该接口不在图中的关系中,起作用是多条件查询且支持分页和查询。 如果说有什么关系,请看下图 二、首先了解下Spring Data JPA 的运行原理(简单说下) 我们知道使用Spring Data JPA是不需要接口实现类的,但我们在测试类中自动注入的UsersDao到底是什么呢? UsersDao接口 package com.zxw.dao; import com.zxw.pojo.Users; import org.springframework.data.jpa.repository.JpaRepository; public interface UsersDao extends JpaRepository<Users,Integer> { } 测试类 package com.zxw.test; import com.zxw.dao.UsersDao; import com.zxw.pojo.Users; import org.junit.Test; import org.junit.runner.RunWith; import org.

【Keras】数据自动生成器,继承keras.utils.Sequence

#coding=utf-8 ''' Created on 2018-7-10 ''' import keras import math import os import cv2 import numpy as np from keras.models import Sequential from keras.layers import Dense class DataGenerator(keras.utils.Sequence): def __init__(self, datas, batch_size=1, shuffle=True): self.batch_size = batch_size self.datas = datas self.indexes = np.arange(len(self.datas)) self.shuffle = shuffle def __len__(self): #计算每一个epoch的迭代次数 return math.ceil(len(self.datas) / float(self.batch_size)) def __getitem__(self, index): #生成每个batch数据,这里就根据自己对数据的读取方式进行发挥了 # 生成batch_size个索引 batch_indexs = self.indexes[index*self.batch_size:(index+1)*self.batch_size] # 根据索引获取datas集合中的数据 batch_datas = [self.datas[k] for k in batch_indexs] # 生成数据 X, y = self.

Retrofit和rxjava请求图片

Retrofit和rxjava请求图片 有这么一个接口,返回的是一张图片,图片传输的时候其实是字节数组的形式,这里就不能用json来解析了,用到rxjava的一个功能. 先定义接口,要注意get请求,下载图片配合@Streaming使用 /** * 获取二维码 * @return */ @Headers("Content-Type:image/png; charset=utf-8") @GET("img/ImageQR") @Streaming//下载文件需指定 Observable<ResponseBody> getImage(); 请求代码 //发送请求,get二维码 Bitmap bitmap = null; private void downLoadImg() { new Thread(new Runnable() { @Override public void run() { //OK设置请求超时时间,读取超时时间 OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(15, TimeUnit.SECONDS) .readTimeout(15, TimeUnit.SECONDS) .build(); Retrofit retrofit = new Retrofit.Builder().baseUrl(RequestInterface.HOST) .addConverterFactory(GsonConverterFactory.create()) .client(client) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); RequestInterface apiService = retrofit.create(RequestInterface.class);//接口实现,映射自动创建 Observable<ResponseBody> observable = apiService.getImage();//观察者模式,这是rxjava的类 observable.subscribeOn(Schedulers.io()) .subscribe(new Observer<ResponseBody>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(ResponseBody value) { byte[] data = new byte[0]; try { data = value.

quartz(四)监听类总结

quartz监听类总结 本篇文章将对我们使用quartz框架的过程中,主要涉及到的类及类中的方法进行介绍 SchedulerListener监听在调度过程中各个环节发生的事 SchedulerListener中主要方法介绍 jobScheduled()当JobDetail被调度器调用的时候触发这个方法jobUnscheduled()在JobDetail没有被调度器调用的时候触发这个方法triggerFinalized()当触发器完成时不会再次被触发是被调度器调用triggerPaused()当触发器暂停时被调度器调用triggersPaused()如果一个组内的触发器被暂停方法被调度器调用triggerResumed()当一个触发器取消暂停状态方法被调用triggersResumed()当一组触发器取消暂停状态方法被调用jobAdded()当添加一个JobDetail时方法被调用jobDeleted()当删除一个JobDetail时方法被调用jobPaused()当一个JobDetail被暂停时触发jobsPaused()当一组JobDetail被暂停时触发jobResumed()当一个JobDetail由暂停恢复时触发jobsResumed()当一组JobDetail由暂停恢复时触发schedulerError()在任务执行失败,或触发器创建的时候执行时间已经过了报错会被调用schedulerInStandbyMode()由调度器调用通知监听器调度器已经进入到备用模式schedulerStarted()由调度器调用通知监听器调度器已启动schedulerStarting()由调度器调用通知监听器调度器正在启动schedulerShutdown()由调度器调用通知监听器调度器已关闭schedulerShuttingdown()由调度器调用通知监听器调度器正在关闭schedulingDataCleared()由调度程序调用,通知侦听程序所有作业、触发器和日历已被删除。 TriggerListener接口是在触发器被触发时调用如果希望在触发器触发过程中得到通知或做相应操作的话可以实现这个接口进行操作; TriggerListener中主要方法介绍 triggerFired()方法 当触发器已经触发且关联的JobDetail即将执行的时候会触发这个方法,既定时任务执行之前会触发;vetoJobExecution()方法 这个方法是在triggerFired()方法之后执行,如果不想让这个job执行那么只需要这个接口返回true,这样job的execute方法将不会执行;triggerMisfired()方法 当触发器失败的时候会被调度器调用,这个方法不能执行太长时间,负责可能会影响其他触发器的执行;triggerComplete() 当触发器对应的job执行完毕时此方法被调用; JobListener接口是在任务执行过程中如果希望得到通知或做相应操作的话可以实现这个接口进行操作; JobListener中主要方法介绍 jobToBeExecuted()当要开始执行JobDetail,并且TriggerListener没有否决时由调度器调用jobExecutionVetoed()当要开始执行JobDetail,并且TriggerListener否决了由调度器调用jobWasExecuted()当执行完毕JobDetail调用 注:三种监听器可以根据需求灵活使用 稍后将开始与项目实际结合进行发布文章

JAVA解析APK包

JAVA解析APK包,获取APP版本名称,版本号,包名,已经是否是调试模式 1.添加依赖 <!-- https://mvnrepository.com/artifact/net.dongliu/apk-parser --> <dependency> <groupId>net.dongliu</groupId> <artifactId>apk-parser</artifactId> <version>2.6.9</version> </dependency> 2.解析APK /** * 读取apk * * @param * @return */ public static Map<String, Object> readAPK(File file) { Map<String, Object> map = new HashMap<>(); try { ApkFile apkFile = new ApkFile(file); ApkMeta apkMeta = apkFile.getApkMeta(); map.put("appName", apkMeta.getLabel()); map.put("appId", apkMeta.getPackageName()); map.put("versionCode", apkMeta.getVersionCode()); map.put("versionName", apkMeta.getVersionName()); map.put("debuggable", ReadXMLUtils.getRateCodeFromXmlString(apkFile.getManifestXml())); } catch (Exception e) { e.printStackTrace(); } return map; }

npm 安装指定版本video.js

前言: 安装指定版本的video.js,新版本的不太友好 一、安装指定版本是正常命令后加‘@版本号’ npm install videojs@5.8.2 --save 二、在node_modules中找到video.js的package.json中可以看到:

Sonar代码质量管理

一、简介 1.1 什么是Sonar Sonar是一个用于代码质量管理的开源平台,用于管理代码的质量,是一个Web系统,展现了静态代码扫描的结果, 通过插件形式可以支持二十几种语言的代码质量检测,通过多个维度的检查了快速定位代码中潜在的或者明显的错误; ① 统一各个小组内部开发者的编码风格(编码规范) ② 消除过于复杂的代码逻辑 ③ 消除重复代码与硬编码 ④ 消除违反规定的设计 ⑤ 提升代码注释质量 官网:https://www.sonarqube.org 文档:https://docs.sonarqube.org/latest 中文参考文档:http://www.sonar.org.cn/ 1.2 Sonar工作原理 Sonar其实是一个Web系统,SonarQube对Sonar进行支持,Sonar可以在网页上展示静态代码的检测结果,检测各种代码语言的规则我们可以自定义,通过Sonar-Scanner这个工具进行代码检测; 从服务器请求数据,分析提供给分析的文件,并将结果数据以报告的形式发送回服务器,然后在服务器端进行异步分析。 1. 用户本地使用IDE的插件进行代码分析 2. 用户上传到源代码版本控制服务器 3. 持续集成,使用Sonar Scanner进行扫描 4. 将扫描结果上传到SonarQube服务器 5. SonarQube server将结果写入db 6. 用户通过web ui查看扫描结果 7. SonarQube导出结果到其他需要的服务 1.3 Sonar检测维度 Sonar可以从七个维度进行代码质量检测,我们可以根据不同维度的严重性然后根据我们的经验做出相应的代码优化,当然并不是所有维度我们都有必要代码修改; ①代码规范 Sonar可以通过PMD、CheckStyle、Findbugs等代码规则检测工具来检测我们代码是否符合代码规范; ②潜在的缺陷 Sonar可以通过PMD、CheckStyle、Findbugs等代码规则检测工具来检测我们代码是否有代码缺陷(比如空指针是否有判断、IO流是否有关闭等); ③糟糕的复杂度分布 文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试 ④重复代码 程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示源码中重复严重的地方 ⑤注释的检测 没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷 ⑥单元测试 sonar可以很方便地统计并展示单元测试覆盖率 ⑦糟糕的设计 通过sonar可以找出循环,展示包与包、类与类之间相互依赖关系,可以检测自定义的架构规则 通过sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况, 检测耦合。 二、使用配置 2.1 jhipster 生成工程配置 在工程目录下修改sonar-project.properties配置 主要要修改配置 projectKey、projectName、url 1 2

eeglab中文教程系列 汇总

eeglab中文教程系列 eeglab简介教程目录 本教程为脑机学习者Rose发表于公众号:脑机接口社区 .QQ交流群:903290195 eeglab简介 eeglab是一个交互式的matlab工具箱,用于处理连续的和与事件相关的eeg、meg和其他电生理数据,包括独立成分分析(ica)、时间/频率分析、伪影抑制、事件相关统计以及对平均和单次试验数据的几种有用的可视化模式。 教程目录 安装篇:eeglab在MATLAB中安装教程 第一篇:eeglab中文教程系列(1)-加载、显示数据 第二篇:eeglab中文教程系列(2)-绘制脑电头皮图 第三篇:eeglab中文教程系列(3)-绘制通道光谱图 第四篇:eeglab中文教程系列(4)-预处理工具 第五篇:eeglab中文教程系列(5)-提取数据epoch 第六篇:eeglab中文教程系列(6)-数据叠加平均{1}(Data averaging) 第七篇:eeglab中文教程系列(7)-数据叠加平均{2}绘制2D和3D图 第八篇:eeglab中文教程系列(8)-选择数据的epochs并进行比较 第九篇:eeglab中文教程系列(9)-绘制ERP图像 第十篇:eeglab中文教程系列(10)-利用光谱选项绘制ERP图像 第十一篇:eeglab中文教程系列(11)-使用ICA分解数据 第十二篇:eeglab中文教程系列(12)-学习和删除ICA组件 第十三篇:eeglab中文教程系列(13)-导入cnt文件 第十四篇:eeglab中文教程系列(14)-Working with ICA Components 第十五篇:eeglab中文教程系列(15)-绘制独立成分ERP贡献 第十六篇:eeglab中文教程系列(16)-Time/Frequency decomposition 第十七篇:eeglab中文教程系列(17)-DIPFIT对独立成分进行等价偶极子定位 第十八篇:eeglab中文教程系列(18)-自己创建电极位置以及电极位置文件 本文章由脑机学习者Rose笔记分享,QQ交流群:903290195 更多分享,请关注公众号

MarkdownPad2安装教程

虽然现在有很多厂商推出了Markdown书写平台,要么不能本地上传图片,要么不能免费使用,要么不能离线操作,其实我喜欢就是MarkdownPad的离线操作,同时还可以修改css样式改变Markdown的显示样式。 详情步骤请移步到此处:安装教程

JS通过html2canvas截取屏幕(包含滚动条隐藏部分)并生成base64字符图片

JS通过html2canvas截取屏幕(包含滚动条隐藏部分)并生成base64字符图片 function saveHistoryImg() { //解决截屏时,滚动条隐藏部分不能截取问题 var targetDom = document.querySelector(".Contain_box"); var copyDom = targetDom.cloneNode(true); copyDom.style.width = targetDom.scrollWidth + "px"; copyDom.style.height = targetDom.scrollHeight + "px"; document.querySelector("body").appendChild(copyDom); html2canvas(copyDom, { onrendered : function(canvas) { var image = canvas.toDataURL("image/png"); zkbind.$('$tourPaymentEditWindow').command("onSave", {"image":image}); copyDom.remove(); } }); }

hive建表脚本

HIVE="sudo -u hdfs hive" db_name="chenzl" table_name="kn1_base_conf_group" $HIVE<< EOF USE ${db_name}; DROP TABLE ${table_name}; CREATE EXTERNAL TABLE ${table_name} ( day_key date comment'日期', group_id bigint comment'组编号', group_name string comment'组名称', realgroup_id bigint comment'真实组编号', realgroup_name string comment'真实组名称', app_service_id bigint comment'应用服务编号', app_service_name string comment'应用服务名称', service_state string comment'服务状态', node_id bigint comment'节点编号', node_name string comment'节点名称', area string comment'区域', province string comment'省份', isp string comment'运营商编码', isp_cnname string comment'运营商名称', province_name string comment'省份名称', area_name string comment'大区' ) COMMENT '组信息维度表' ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n' STORED AS TEXTFILE LOCATION '/user/hive/warehouse/dw/kn1_base_conf_group'; ALTER TABLE ${table_name} SET SERDEPROPERTIES('serialization.

缺项目经验?这 61 个实战项目让你的简历闪闪发光!

面试找工作时,最常被问到的问题就是:有什么项目经验? 对于毕业生来说,我们刚走出校园,还没有工作和项目经验,只能拿学校里练习做的“小游戏”或者“命令行程序”出来。 但是,这些项目并不符合现代编程的需要,现代编程需要:前后端分工合作、网络接入、图形化界面等…… 如果你有类似的中大型项目经验,写入简历中或者放在自己的 GitHub 上,就等于拥有了一件求职大杀器。 我们给大家整理了 61 个满满干货的实战项目,包含:前端、后端、Python、Java、机器学习、大数据等,希望你能找到喜欢的项目,借助它找到满意的工作! 小贴士:文末有惊喜。 Python 项目 1. Python 数据分析入门与进阶(数据分析方向) 通过 Python 数据分析和算法,实现【苹果公司股票分析、实验楼课程数据统计、用户情绪分析、潜在客户分析】等项目: https://www.shiyanlou.com/courses/764 2. Flask + VueJS 全栈 Web 开发实战(Web开发方向) 使用 Python 的 Flask 框架和 VueJS,通过两个实战项目留言板项目和论坛应用的练习,掌握 Flask + VueJS 进行 Web 开发的能力。 https://www.shiyanlou.com/courses/878 3. Python 实现搜索引擎(爬虫+Web框架) 利用 Python 异步特性实现异步爬虫系统,一步一步地将构建索引、索引压缩、排名算法等环节编码实现,最后利用异步 web 框架 sanic 构建后端实现一个完整的垂直搜索引擎站点。 https://www.shiyanlou.com/courses/1196 4. 基于 Python 实现微信公众号管理 Redis 服务器(公众号后台管理) 实现一个 Redis 服务器监控工具,第一部分实现了 Redis 服务器管理和监控信息获取的 API ;第二部分创建一个用户系统接入微信公众号平台。借助这个项目我们可以进一步学习 Web 开发中的一些知识。 https://www.shiyanlou.com/courses/1344 5. Python 使用机器学习玩转 Flappy Bird 游戏(机器学习)

华为路由器静态路由协议配置

华为路由器配置静态路由 静态路由 静态路由,一种路由的方式,路由项)由手动配置,而非动态决定。与动态路由不同,静态路由是固定的,不会改变,即使网络状况已经改变或是重新被组态。一般来说,静态路由是由网络管理员逐项加入路由表。 优点 使用静态路由的另一个好处是网络安全保密性高。动态路由因为需要路由器之间频繁地交换各自的路由表,而对路由表的分析可以揭示网络的拓扑结构和网络地址等信息。因此,网络出于安全方面的考虑也可以采用静态路由。不占用网络带宽,因为静态路由不会产生更新流量。 缺点 大型和复杂的网络环境通常不宜采用静态路由。一方面,网络管理员难以全面地了解整个网络的拓扑结构;另一方面,当网络的拓扑结构和链路状态发生变化时,路由器中的静态路由信息需要大范围地调整,这一工作的难度和复杂程度非常高。当网络发生变化或网络发生故障时,不能重选路由,很可能使路由失败。 配置方法 静态路由的配置有两种方法:带下一跳路由器的静态路由,和带送出接口的静态路由 配置实例(基于下一跳) 配置方法 目的网段 掩码 下一跳 R1配置 sysname AR1 interface GigabitEthernet0/0/0 ip address 172.16.0.1 255.255.255.0 interface GigabitEthernet0/0/1 ip address 192.168.1.1 255.255.255.0 #静态路由 ip route-static 10.0.0.0 255.255.255.0 172.16.0.2 ip route-static 192.168.2.0 255.255.255.0 172.16.0.2 ip route-static 192.168.3.0 255.255.255.0 172.16.0.2 [AR1]dis ip routing-table Route Flags: R - relay, D - download to fib ------------------------------------------------------------------------------ Routing Tables: Public Destinations : 13 Routes : 13 Destination/Mask Proto Pre Cost Flags NextHop Interface 10.

关于UVM的重载

最近做项目的时候,重用了别人的验证组件,需要对发包的driver做一定的修改,于是想到了重载。但是报了这样一个错: # UVM_FATAL @ 0: reporter [FCTTYP] Factory did not return a component of type 'sds_ge_driver'. A component of type 'my_sds_ge_driver' was returned instead. 觉得非常的奇怪,因为其他的关于激励的重载都是OK的。这个问题定位了很久,排查了重载格式不对,重载了两次,sds_ge_driver被例化了2次的可能,还是没有解决这个问题。后来我在整理filelist的时候,发现sds_ge_driver.sv这个文件,被加进来了两次,一次是组件VIP里的,一次是我自己在外面添加的。问题就出现在了这里,我自己添加的sds_ge_driver.sv文件内容上跟VIP里的一模一样,但是开头的宏文件有区别,我的定义是这样的: `ifndef SDS_GE_DRIVER_SV `define SDS_GE_DRIVER_SV VIP里是这样的: `ifndef SDS_GE_DRIVER__SV `define SDS_GE_DRIVER__SV 多了一个下划线。。。。。这个还是用软件统一生产的头文件,很难发现。。。。 就是因为宏定义的不同,导致了sds_ge_driver.sv这个文件被编译了两次,在UVM的factory中被注册了两次,导致在重载的时候报错。去掉我自己添加的文件,重载OK!。 最后引用我师父的一句话:诡异的问题一般都是低级问题。。

萌新总结的C++数组去重的两个方法

方法一:利用sort函数 #include<iostream> #include<algorithm> using namespace std; int main() { int n; cin>>n; int a[n]; for(int i=0;i<n;i++) { cin>>a[i]; } sort(a,a+n); //将数组从小到大排序 int m=unique(a,a+n)-a; //unique函数只能去除相邻重复的元素 for(int i=0;i<m;i++) { cout<<a[i]<<" "; } return 0; } /* unique等同于 for(int i=1;i<n;i++) { if(a[i]!=a[i-1]) cout<<a[i]<<" "; } */ 这个方法的弊端是不能按照原来的顺序输出,即如果输入的是1 3 2 3 1,那么输出的是1 2 3. 方法二:利用数组循环判断 #include <iostream> using namespace std; int main() { int n; cin>>n; int a[n]; for(int i=0;i<n;i++) { cin>>a[i]; } cout<<a[0]<<"

电源抑制比(PSRR )

如果运算放大器的电源发生变化,输出不应变化,但实际上通常会发生变化。如果X V的电源电压变化产生Y V的输出电压变化,则该电源的PSRR(折合到输出端)为X/Y。无量纲比通常称为电源电压抑制比(PSRR),以dB表示时则称为电源电压抑制(PSR)。但是,PSRR和PSR几乎总能互换使用,半导体行业很少有相关标准。 电源抑制比(Power Supply Rejection Ratio):把电源的输入与输出看作独立的信号源,输入与输出的纹波比值即是PSRR,通常用对数形式表示,单位是dB。 PSRR=20log{[ripple(in)/ripple(out)]} 对于高质量的D/A转换器,要求开关电路及运算放大器所用的电源电压发生变化时,对输出的电压影响极小.通常把满量程电压变化的百分数与电源电压变化的百分数之比称为电源抑制比.电源抑制比可分为交流电源抑制比和直流电源抑制比,其具体意思如下. 交流电源抑制比(ACPSR) 先在供电电源端(比如标称电压为5V),在读取一个测量值Vi1,与之对应,在输出端测得电压值为Vo1;然后在电源电压上叠加一个频率为100HZ,有效值为200mV的信号,并读取第二个测量值Vi1,与之对应在输出端测得电压值Vo2, 按测量误差公式 输出端百分误差=(Vo2 -Vo1) /Vo1 电源端百分误差=(Vo2 -Vo1) /Vo1 电源抑制比=输出端电压变化的百分数 / 电源电压变化的百分数 注意:电源电压变化不是输入信号电压变化,PSRR表征的是电源电压不稳定对输出的影响。 直流电源抑制比(DCPSR) 先在标称电源电压(5V)的情况下,读一个输出测量值,然后使电源电压变化 5%,在相同的输入信号电平下读取第二个输出测量值,按测量误差公式(同上题公式)计算得到的百分误差即为直流电源抑制比. 电源抑制比功用和计算 与其它的失衡量一样,参数规范中的电源抑制比也是针对运算放大器的输入而言的. 这个参数反映了电源电压出现一定变化量时输入失衡电压相应产生多大的变化量.在规定为1V的电源电压改变量除以按微伏计的输入失衡电压量. 输出电压误差的计算方法如同电压失衡与漂移的计算方法.外部电源的调整率会以电源抑制比的形式直接转变成运算放大器网络的输出误差.

eclipse pom.xml 第一行报错 Failure to transfer *这种错误 解决办法

报错示例:Failure to transfer org.codehaus.plexus:plexus-utils:jar:3.2.0 出现错误的原因: 因为之前有maven包正在更新时,点击了停止按钮,导致文件下载不完整,后续读读取因临时文件的原因导致错误; 解决办法: 进入都指定的目录,删除掉临时文件即可; 以下为详细步骤: 1.点击项目 maven denpendencies,确定根目录 2. 根据错误信息,拼接子路径 例如错误 Failure to transfer org.codehaus.plexus:plexus-utils:jar:3.2.0 先进入步骤1确定的根目录 然后进入 org/codehaus/plexus/plexus-utils/3.2.0/ 3.删除临时文件 因为我这里问题已经解决,所以看不到临时文件,无须关心; 删除掉该文件夹下的所有内容即可; 4 更新maven 依次点击项目右键,maven, update project 即可

linux后台运行的几种方式

linux 如何让进程后台运行? 1、nohup 将程序以忽略挂起信号的方式运行起来 补充说明 nohup命令 可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。 如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out文件中。 如果没有文件能创建或打开以用于追加,那么 command 参数指定的命令不可调用。 如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。 简单实例: nohup command & 指定输出实例 nohup command > myout.file 2>&1 & 其他相关命令 ctrl + z #可以将一个正在前台执行的命令放到后台,并且处于暂停状态。 fg #将后台任务切换到前台执行 bg #将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出 jobs #查看后台运行的状态,jobs -l选项可显示所有任务的PID ps -ef | grep command 或者 ps aux | grep command #查看进程 kill -9 进程id #杀掉对应的进程, 更高级的用法如下: ps aux | grep command | grep -v grep | awk '{print $1}' | xargs kill -9 #这个表示直接通过command获取进程id并直接kill掉

js取数组中的最大值

js取数组中的最大值 js取数组中的最大值,有四种方法 原文地址:https://www.cnblogs.com/lguow/p/9725258.html 一、借助apply(),获得最大值 var arr = [1, 2, 3, 4, 5, 6] var max = Math.max.apply(null,arr); console.log(max) //6 由于max()里面参数不能为数组,所以借助apply(funtion,args)方法调用Math.max(),function为要调用的方法,args是数组对象,当function为null时,默认为上文,即相当于apply(Math.max,arr) 二、借助call(),获得最大值 var arr = [1, 2, 3, 4, 5, 6] var max1 = Math.max.call(null,7,2,0,-3,5) console.log(max1) call()与apply()类似,区别是传入参数的方式不同,apply()参数是一个对象和一个数组类型的对象,call()参数是一个对象和参数列表 三、sort()+reverse() var arr = [1, 2, 3, 4, 5, 6] var max3 = arr.sort().reverse()[0]; console.log(max3) sort()排序默认为升序,reverse()将数组掉个 三、sort() var arr = [1, 2, 3, 4, 5, 6] var max2 = arr.sort(function(a,b){ return b-a; })[0]; console.

在电脑上如何录制游戏

在电脑上录制游戏对于有些人来说可能并不太了解,但大家都看过一些游戏直播或者解说视频吧,这些视频就是通过在电脑上录制游戏的方式而录制播放出来的。由于游戏都是在电脑屏幕上进行操作的,所以只要在游戏的同时开始电脑录屏功能就能录制游戏了。至于具体应该怎么操作,这里我就来为大家演示一下。 1、首先打开电脑上的屏幕录像工具,这是一个以用来录制游戏的应用。 2、打开之后先设置一下录制的参数,有视频、音频、画质、格式和模式。其中视频选择全屏录制、音频选择录全部声音、画质选择原画、格式的话在AVI、MP4、FLV中随便选择一个,模式的话选择游戏模式。 3、以上参数都设置好了之后再选择视频保存的文件夹,录制的游戏视频会被保存到这个文件夹中。 4、文件夹选择完成之后先打开游戏,在游戏开始的同时也点击“开始录制”按钮进行录屏。这时游戏也就会开始录制了。 5、游戏结束后如果你不想再继续录制的话点击“暂停录制”旁边的停止按钮,那么录制就会结束了。 6、最后录制的游戏视频也会出现在早已选好的文件夹中,如果想要欣赏或进行一些其他操作的话可以来这个文件夹中找。 而以上的这些操作就是在电脑上录制游戏视频的操作以及方法了,如果你正好想要录制一个游戏视频的话,可以试一试这个方法。

EventBus使用中遇到接收不到消息的坑(注册EventBus的监听要先于Event Bus 消息的发送)

昨天在使用EventBus的时候遇到了一个坑,在代码写完以后检查了N遍,并没有发现有什么不妥的地方,该注册监听的Activity中都有对该时间进行监听注册。 代码是这样的: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity); //查询该设备绑定状态,一个耗时操作,在fetchAuthBindState方法中调用EventBus发送消息 (1) fetchAuthBindState(); //EventBus 监听 (2) EventBus.getDefault().register(this); } public void fetchAuthBindState() { ******************* ***************** notifyDataSetChanged(authBindStateParam,status); } private void notifyDataSetChanged() { BindStateEvent event = new BindStateEvent(); event.setAuthBindStateParam(authBindStateParam); (3)EventBus.getDefault().post(event); } 如代码所示,我在给EventBus注册监听之前,进行了一个耗时操作,去请求查询状态。通过(3)发送到注册了监听的Activity。 后面发现问题就在这里!!! 我在fetchAuthBindState()方法中开启了一个子线程进行耗时操作,所以在第(1)步执行的同时,第(2)也会同时进行。但是如果第(1)步的的获取速度很快,那么当第(3)步发送消息的时候,Activity可能还没有注册好,此时Activity将接受不到消息,导致activity并没有做出相应的操作。(也有可能出现有时接收的到消息而有时又接收不到消息的情况) 正确的做法应该是把EventBus的注册写在耗时操作之前,以保证EventBus的消息能够正常接收的到。 如下: @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity); //EventBus 监听 (2) EventBus.getDefault().register(this); //查询该设备绑定状态,一个耗时操作,在fetchAuthBindState方法中调用EventBus发送消息 (1) fetchAuthBindState(); } 结语: 我建议以后关于一些监听的注册,最好直接写在 super.onCreate(savedInstanceState);的后面,以确保在消息回调之前就注册监听成功。

针对类TrueCrypt——虚拟磁盘加密容器文件删除恢复方法

随着互联网技术的高速发展,信息数据正呈量级增长,数据的存储方式也多种多样,对数据的存储安全提出了新的要求。随之而来的就是各种形式、各种加密算法的数据保护,在这些方法中,虚拟磁盘加密技术脱颖而出。 由于通过虚拟磁盘加密所产生的数据文件没有固定的特征,所以恢复删除的加密过的数据文件面临着新的挑战。本文提出一种针对没有固定特征的删除文件(通过虚拟磁盘加密的所产生)的恢复方法,该方法的主要目的是告诉大家一种虚拟磁盘加密文件的删除恢复方法和思路。 虚拟磁盘加密技术及其常见软件 虚拟磁盘加密技术即可不生成任何文件直接在硬盘上建立虚拟磁盘,也可生成一个容器文件(类似磁盘,指定大小,用于存放需加密的文件)。用户可以按照盘符进行访问,所有虚拟磁盘上的文件都被自动加密,需要通过密码或密钥文件来进行访问。 用户在使用时,必须知道密码或密钥文件,否则无法进入被虚拟磁盘技术加密的磁盘中进行操作。这种方式不仅对防止硬盘丢失情况下的数据保密有效,还对企图不经允许而打开计算机进行操作和信息查阅有效。 在已经打开计算机并进入了加密磁盘的情况下,任何接触到计算机的人或者在计算机上运行的软件,都可以对磁盘进行操作,本地桌面搜索工具也不例外,它可以直接对所有文件进行检索,并建立索引。 ◆常见虚拟磁盘加密软件如下所示 加密容器文件删除恢复难点 难点1:真加密 通过虚拟磁盘加密生成的容器文件是真加密,所有加密数据都是经过AES、Twofish、Serpent等加密算法的运算后的结果,目前无有效破解方法(穷举法除外)。 难点2:无明显特征 通过winhex等工具打开可以看到,通过虚拟磁盘加密生成的容器文件头尾及内部数据均无明显特征,对于该文件的删除恢复造成了极大的干扰。 经过统计分析后发现,该容器文件具有以下特征: ◆ 整扇区对齐,并且在磁盘中连续存放; ◆ 该文件中的字符内容分布均匀,即每个字符的总个数≈文件大小÷256; ◆ 没有任意字符连续出现3次及以上。 加密容器文件删除恢复过程 1.准备工作 为了更直观的描述容器文件删除恢复过程,特此说明环境及准备工作。(以下数据也是判断是否完成恢复删除容器文件的重要依据) A. 文件系统NTFS,且找到其$BITMAP(说明:其他的系统也会有该功能的文件,在此仅以NTFS为例); B. 以VeraCrypt作为加密工具,本次示例就以恢复该工具下产生的容器文件; C. 容器文件大小设置为200M(容器在磁盘中的存储为200M连续空间); D. 使用$BITMAP元文件来统一管理卷上簇的使用情况。每一个bit位代表一个簇的使用情况,位高低顺序为:低位在前,高位在后。如$BITMAP中第一个字节代表该分区前8簇,第一个字节的第0位为分区第一簇,第1位为分区第二簇...以此类推管理整个分区。使用的簇标记为1,未使用的簇标记为0。 2.制作加密删除文件 使用VeraCrypt工具制作容器文件,并向其中放入待加密文件。 ①创建容器文件 ②加载容器文件 ③保存待加密文件 ④确定该文件在磁盘中是否连续存储,且记录删除前在磁盘的偏移位置:0x174E628000 ⑤删除前所在位图信息 ⑥删除容器文件,下图可看出加密容器文件被删除之后通过winhex是不能恢复的 3.删除加密容器文件恢复步骤 通过$Bitmap进行定位恢复步骤2中所删除的无特定特征的容器文件,具体操作过程如下: ①根据$Bitmap的特性,若该文件被删除,那么在$Bitmap中的位图也被置为0; 由已知的容器文件大小可以计算出该容器文件在$Bitmap中所占用的字节数: ◆ 容器文件字节数(byte)=200M*1024*1024 = 209715200; ◆ 容器文件扇区数(个)=209715200/512 = 409600; ◆ 容器文件簇数(个)=409600/8 = 51200; ◆ $Bitmap中所占用的字节数(byte)=51200/ 8 = 6400(0x1900); ②从$Bitmap文件的开始位置进行检索0x00(被删除的容器文件会出现在位图为0x00的区域),检索到0x00之后,判断从当前位置起,0x00的个数是否大于等于步骤①中所求的$Bitmap中所占用的字节数; 若是则进入步骤③,否则继续步骤②; ③根据步骤②中找到的$Bitmap中的起始位置,计算对应的删除文件在磁盘中的偏移位置,在该例中$Bitmap中的偏移为0x2E9CC5: 磁盘中的偏移位置(byte)= 0x2E9CC5*8*8*0x200 = 0x174E628000 ④根据步骤③中得到的文件偏移,跳转到该偏移去判断是否是被删除的容量文件,判断方法如下:(判断依据见准备工作中的B、C数据) A. 由于数据文件是连续存储的,所以从偏移位置起,获取已知被删除文件大小的数据块(即本例中的200M);

gradle 与 gradlew不是内部或外部命令,也不是可运行的程序或批处理文件的问题。

在编辑项目时遇到报错: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processDebugResources'. ...... 根据经验应该是项目里的资源文件问题,要想获取更详细的信息一般在命令行里执行: gradlew compileDebugSource --stacktrace -info 或gradlew assembleDebug --info 如果异常是: Execution failed for task ':app:compileDebugJavaWithJavac' 可以用 gradlew compileDebugJavaWithJavac命令来见证奇迹! 但是很意外的是我在执行这两条命令时提示"gradlew"不是内部或外部命令,也不是可运行的程序或批处理文件.甚至gradle命令也不好用了。于是重新添加了下gradle的全局变量。 首先项目中gradle-wrapper.properties的distributionPath=wrapper/dists,于是打开AS的Setting->Build,Execution,Deployment->Gradle。找到最下面一行“Service directory path“中设置的gradle的缓存路径。 然后,去该路径下的wrapper/dists文件件下到项目中用的gradle的版本(本项目用的是4.4-all)的bin文件夹:C:\.gradle\wrapper\dists\gradle-4.4-all\9br9xq1tocpiv8o6njlyu5op1\gradle-4.4\bin。将该url添加到环境变量path中。如果没有对应的gradle的版本就需要让AS自动下载或者自己手动去下载对应的gradle进行安装。 测试gradle在命令行是否好用。正常应该是好用的。 回到AS命令行中,发现gradle好用了 但是 gradlew还是不好用。于是在命令行中输入gradle wrapper。 终于gradlew好用了。