Entry

再议Java中的static关键字

a 夏天 提交于 2020-08-13 20:38:37
再议Java中的static关键字   java中的static关键字在很久之前的一篇博文中已经讲到过了,感兴趣的朋友可以参考:《 Java中的static关键字解析 》。   今天我们再来谈一谈static关键字,这次我们侧重讲述static关键字的一些使用场景和方式,以下是本文目录大纲:   一.static关键字使用场景   二.static变量和普通成员变量区别   三.类的构造器到底是不是static方法?   若有不正之处,希望谅解并欢迎批评指正。   请尊重作者劳动成果,转载请标明原文链接:   https://www.cnblogs.com/dolphin0520/p/10651845.html 一.static关键字使用场景   static关键字主要有以下5个使用场景: 1)静态变量   把一个变量声明为静态变量通常基于以下三个目的: 作为共享变量使用 减少对象的创建 保留唯一副本   第一种比较容易理解,由于static变量在内存中只会存在一个副本,所以其可以作为共享变量使用,比如要定义一个全局配置、进行全局计数。如: public class CarConstants {   // 全局配置,一般全局配置会和final一起配合使用, 作为共享变量   public static final int MAX_CAR_NUM = 10000; } public

Spring Boot 工厂加载机制 SpringFactoriesLoader

你。 提交于 2020-08-13 19:55:28
SpringFactoriesLoader 介绍 框架内部使用的通用工厂加载机制 从classpath下多个jar包特定的位置读取文件并初始化类 文件内容必须是kv形式,即properties类型 key是全限定名(抽象类|接口)、value是实现,多个用逗号分隔 SpringFactoriesLoader作用 SpringBoot框架中从类路径jar包中读取特定文件实现扩展类的载入 将所有Jar中的spring.factories(A.jar(spring.factories), B.jar(spring.factories), C.jar(spring.factories) ...... )载入 Spring Boot框架 SpringFactoriesLoader在什么时候加载系统初始化器呢? 查看源码 从启动类开始 SpringApplication.run(Sb2Application.class, args);    1、进入run方法 public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) { return run(new Class<?>[] { primarySource }, args); } public static

遍历Map中所有的键值对的方法。

孤者浪人 提交于 2020-08-13 18:29:21
在程序开发中,经常需要取出Map中所有的键和值,那么如何遍历Map中所有的键值对呢?有两种方式可以实现,第一种方式就是 先遍历Map集合中所有的键,再根据键获取相应的值 。 import java . util . * ; public class Ex11 { public static void main ( String [ ] args ) { Map map = new HashMap ( ) ; map . put ( "3" , "Lucy" ) ; map . put ( "2" , "Rose" ) ; map . put ( "1" , "Jack" ) ; Set keySet = map . keySet ( ) ; Iterator it = keySet . iterator ( ) ; while ( it . hasNext ( ) ) { Object key = it . next ( ) ; Object value = map . get ( key ) ; System . out . println ( key + ":" + value ) ; } } } 运行结果如图: 1 : Jack 2 : Rose 3 : Lucy 首先调用Map对象的keySet()方法,获得存储Map中所有键的Set集合

【关于ThreadLocal】你真的很了解ThreadLocal吗?

老子叫甜甜 提交于 2020-08-13 12:24:48
ThreadLocal的基本原理 ThreadLocal中有个静态内部类ThreadLocalMap,ThreadlocalMap里面包含一个Entry数组,Entry的定义如下 static class Entry extends WeakReference<ThreadLocal<?>> { Object value; Entry(ThreadLocal<?> k, Object v) { super(k); value = v; } } 那ThreadLocal是如何保证每个线程内有一份单独的变量呢?原因在于,Thread类内部持有ThreadLocalMap的引用 ThreadLocal.ThreadLocalMap threadLocals = null; 接下来我们就来看ThreadLocal提供的几个关键方法 set方法 public void set(T value) public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) map.set(this, value); else createMap(t, value); } 在执行set的时候,首先获取当前线程

Code-Helper:ZipHelper.cs

情到浓时终转凉″ 提交于 2020-08-13 10:32:59
ylbtech-Code-Helper:ZipHelper.cs 1. 返回顶部 1、 using System; using System.Text; using System.Collections; using System.Collections.Generic; using System.Data; using System.IO.Compression; using System.IO; using System.Diagnostics; using System.Xml; using ICSharpCode.SharpZipLib.BZip2; using ICSharpCode.SharpZipLib.Zip; using ICSharpCode.SharpZipLib.Zip.Compression; using ICSharpCode.SharpZipLib.Zip.Compression.Streams; using ICSharpCode.SharpZipLib.GZip; using ICSharpCode.SharpZipLib.Checksums; namespace Sp.DBUtility { public class ZipHelper { public void ZipFile( string fileToZip, string

快速搭建Kerberos服务端及入门使用

*爱你&永不变心* 提交于 2020-08-13 06:53:26
               快速搭建Kerberos服务端及入门使用                                            作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。      Kerberos是一种网络身份验证协议。 它旨在通过使用秘密密钥加密为客户端/服务器应用程序提供强身份验证。 麻省理工学院 可以免费实施该协议。Kerberos也可用于许多商业产品。    尽管有许多配置参数和设置,但配置一个受Kerberos管理的Hadoop集群还是相当简单的。只要清楚地了解在前面部分中介绍的Kerberos概念,就可以自信地使用Kerberos来保护集群。   总之,Kerberos是解决您的网络安全问题的解决方案。它通过网络提供身份验证和强大加密工具,帮助您保护整个企业的信息系统。 kerberos的官方地址: http://web.mit.edu/kerberos/ 。 一.搭建Kerberos服务器(node101.yinzhengjie.org.cn) 博主推荐阅读:   Kerberos的发布页面:https: // kerberos.org/dist/index.html   Kerberos的官方文档:http: // web.mit.edu/kerberos/krb5-1.17/doc/index.html  

Swagger文档转Word 文档

我的未来我决定 提交于 2020-08-13 06:30:07
GitHub 地址: https://github.com/JMCuixy/swagger2word 原创作品,转载请注明出处: http://www.cnblogs.com/jmcui/p/8298823.html 一、前言 为什么会产生这个需求呢? 我们公司作为乙方,老是被客户追着要一份API文档,当我们把一个 Swagger 文档地址丢给客户的时候。客户还是很不满意,嫌不够正式!!死活坚持要一份 word 文档 。然后领导给了个接口模板,就把这个活交给我了......我去,近10个微服务,几百个接口,这不得要了我的命啊(最后整理出来将近200页的 word 文档)。最后,还是领导有办法:要不我们把Swagger的 json文件转成word文档吧! 一直坚持一句话。作为使用者,人要迁就机器;作为开发者,要机器迁就人。 二、思路 领导提供了一个接口模板,类似下面这样,其实就是一个word的table页。想到 html 可以转 word ,那么问题就变成了 : 1、解析JSON 文件 2、把JSON文件的内容填充进html 的Table中 3、由html直接转成word 几百个接口,一气呵成!如下,还有一个简单的示例,就是请求参数 和 返回值 。怎么处理呢?在程序中写了 HTTP 的请求,封装了需要的参数去执行了一个请求,得到相应的返回值! 三、实现 1、封装对象

java 如何决定使用 HashMap 还是 TreeMap?

泄露秘密 提交于 2020-08-13 05:20:44
问:如何决定使用 HashMap 还是 TreeMap? 介绍 TreeMap<K,V>的Key值是要求实现java.lang.Comparable,所以迭代的时候TreeMap默认是按照Key值升序排序的;TreeMap的实现是基于红黑树结构。适用于按自然顺序或自定义顺序遍历键(key)。 HashMap<K,V>的Key值实现散列hashCode(),分布是散列的、均匀的,不支持排序;数据结构主要是桶(数组),链表或红黑树。适用于在Map中插入、删除和定位元素。 结论 如果你需要得到一个有序的结果时就应该使用TreeMap(因为HashMap中元素的排列顺序是不固定的)。除此之外,由于HashMap有更好的性能,所以大多不需要排序的时候我们会使用HashMap。 拓展 1、HashMap 和 TreeMap 的实现 HashMap: 基于哈希表实现。使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。 HashMap(): 构建一个空的哈希映像 HashMap(Map m): 构建一个哈希映像,并且添加映像m的所有映射 HashMap(int initialCapacity): 构建一个拥有特定容量的空的哈希映像 HashMap(int

WebStorm 2020.1.2 激活

六眼飞鱼酱① 提交于 2020-08-13 02:54:02
1 下载 没下载的先去 官网 下载。 2 安装 系统Linux,解压后直接运行 bin 下的 webstorm.sh 。 首先提示是否导入设置,如果以前安装过的话会默认选择第一项。 选UI主题: 是否创建Desktop Entry,类似于Windows上的桌面快捷方式。 是否创建启动脚本,创建后可以通过命令行启动。 选择插件: 先进入: 3 激活 戳 这里 下载jar补丁,提取里面的 jetbrains-agent.jar : 接着拖拽并重启: 提示安装: 重启即可看到激活: 来源: oschina 链接: https://my.oschina.net/u/4303145/blog/4325752

JAVA集合框架-线程安全( 二)[云图智联]

天涯浪子 提交于 2020-08-13 00:56:57
线程安全 - 就是当多线程访问时,采用了加锁的机制;即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到该线程读取完之后,其他线程才可以使用。防止出现数据不一致或者数据被污染的情况。 线程不安全 - 就是不提供数据访问时的数据保护,多个线程能够同时操作某个数据,从而出现数据不一致或者数据污染的情况。 对于线程不安全的问题,一般会使用synchronized关键字加锁同步控制。 线程安全 工作原理: jvm中有一个main memory对象,每一个线程也有自己的working memory,一个线程对于一个变量variable进行操作的时候, 都需要在自己的working memory里创建一个copy,操作完之后再写入main memory。 当多个线程操作同一个变量variable,就可能出现不可预知的结果。 而用synchronized的关键是建立一个监控monitor,这个monitor可以是要修改的变量,也可以是其他自己认为合适的对象(方法),然后通过给这个monitor加锁来实现线程安全,每个线程在获得这个锁之后,要执行完加载load到working memory 到 use && 指派assign 到 存储store 再到 main memory的过程。才会释放它得到的锁。这样就实现了所谓的线程安全。 1、线程安全的集合对象 Vector