JDK

<java泛型>java泛型Generics

▼魔方 西西 提交于 2020-11-08 15:12:38
what 泛型:一般类型,也就是说可以为任何类型. 泛型的本质是“参数化类型”,也就是说: 所操作的数据类型 被指定为一个 参数, 传输 。泛型是在JDK1.5中引入的特性。 why 泛型提供了 编译时 类型安全检测机制,该机制允许程序员在编译时检测到非法的类型,而不是在运行时才出现错误。 使用泛型有以下好处: 编译时强类型检查 无需手动进行类型转换 可以实现复用,编写通用算法 how 泛型类 ArrayList<E> public class Tool<E> { private E e; public Tool(E e1){ this.e = e1; } public E getE() { return e; } public void setE(E e) { this.e = e; } } 泛型方法 1)使用泛型类定义参数类型(常用) 如泛型类Tool<AA>,它的泛型参数即为AA。那么泛型方法可以这样写: public class Tool<AA>{ public void show(AA aa){ } } 2)自定义的参数类型 public <AA> void show(AA aa){ } 注:静态方法不能访问类的泛型,如果需要泛型,我们只能使用方法2(自定义的参数类型) 泛型接口 假设有泛型接口interf<AA>,它的实现类是Tool。 1)确定实现的泛型接口的参数类型

别再在finally里面释放资源了,解锁个新姿势!

本小妞迷上赌 提交于 2020-11-08 13:50:21
版权说明: 本文由博主原创,转载请注明出处。 原文地址: https://blog.csdn.net/qq_38688267/article/details/109511716 在我们编码过程中,不可避免的会用到于文件操作 IO 流、数据库连接等开销比较大的资源,用完之后需要通过 close 方法将其关闭,否则资源一直处于打开状态,可能会导致内存泄露等问题。 拿文件操作流举例,我们在使用时要 try catch ,用完了在 finally 中关闭,而关闭的时候还需要再 try catch ,可以说是非常麻烦了!代码如下: /**传统写法**/ BufferedReader br = null ; try { br = new BufferedReader ( new FileReader ( "" ) ) ; String line ; while ( ( line = br . readLine ( ) ) != null ) { System . out . println ( line ) ; } } catch ( IOException e ) { // DO something } finally { if ( br != null ) { try { br . close ( ) ; } catch ( IOException e ) { // DO

2014年第五届蓝桥杯javaB组 试题 答案 解析

混江龙づ霸主 提交于 2020-11-08 13:02:59
1.武功秘籍 小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!当然是伪造的)。他注意到:书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上。 小明只想练习该书的第81页到第92页的武功,又不想带着整本书。请问他至少要撕下多少张纸带走? 这是个整数,请通过浏览器提交该数字,不要填写任何多余的内容。 热身题 public class Main { public static void main(String[] args) { for(int i = 10; i < 100; i += 2){ System.out.println("本页包括 : " + i + " 和 " + (i + 1)); } } } 答案 : 7 2.切面条 一根高筋拉面,中间切一刀,可以得到2根面条。 如果先对折1次,中间切一刀,可以得到3根面条。 如果连续对折2次,中间切一刀,可以得到5根面条。 那么,连续对折10次,中间切一刀,会得到多少面条呢? 答案是个整数,请通过浏览器提交答案。不要填写任何多余的内容。 我把它看成是一道考二叉树的题. 考的是第k层的结点个数, 但是最后要加1, 这个1可以理解成头结点. 拿张纸条切一切和二叉树的图对比一下即可. public class Main { public static void main(String[] args) {

为了面上阿里,花费2个月终于整理出这份大厂Java面试资料

China☆狼群 提交于 2020-11-08 09:50:07
前言 先做个自我介绍,本人之前一直在外包公司做增删改查,做了两年,实在太累了!就想趁着金九银十这个好机会看能不能实现自己的阿里梦,没想到被虐了个干干净净! 不过没关系,通过这次面试,我也认识到自己确实有很多不足的地方,通过这篇文章,和大家分享一下,最后也把我整理的面试资料分享给大家,希望有人替我圆了阿里梦 阿里一面 1.自我介绍 2.说一下BIO 和NIO 3.你说到多路复用,多路复用什么意思,为什么可以做到多路复用 4.这个select函数你说一下,底层怎么保证效率的,如果请求很多怎么办 5.我看你用到了Zookeeper ,说一下他可以干什么 6.只有一个Zookeeper 行不行?怎么保证他的可用性 7.服务器和客户端连接,多个连接会不会出问题? 8.Zookeeper 如果每次消费都连接,会不会效率太低? 怎么解决? 9.说一下它的底层算法吧,说你知道的 10.我看你实现了这几种序列化机制,都说一下吧 11.为什么hessian,和kyro速度更快呢? 12.了解spring吗? 说一下ioc和aop 13.aop底层怎么实现的 14.说一下spring ioc创建和销毁? (我有点懵,问是不是要回答bean的生命周期,面试官说 不是,然后我就随便说了 ) 15.Java的类加载过程 16.了解mysql吗,说一下innodb底层 17.有没有搭过服务器? 18

高级并发编程系列九(Lock接口分析)

谁说胖子不能爱 提交于 2020-11-08 04:52:15
1.考考你 许多朋友在入门java并发编程的时候,如果说到控制线程安全,一定对 synchronized 关键字非常熟系。synchronized关键字表示同步加锁,就是我正在用,你得等我用完后再来的意思。 比如在 高级并发编程系列七(锁入门) 这一篇,我们对add_i变量自增操作,同步加锁一样,让add_i变量在同一时刻,只会被一个线程操作,从而线程安全。 /** * addI方法,实现add_i变量自曾操作 */ public synchronized static void addI (){ add_i ++ ; } 这么说,你可能就会有疑问了: 既然synchronized关键字可以实现加锁,保障线程安全了。那么java的设计者为什么还要在juc包中提供锁接口Lock,以及Lock接口的相关实现呢 ?这不是既生瑜、何生亮吗?不好,难道周瑜孔明的故事还要再演一遍! 其实不是的,虽然有了synchronized关键字,我们说再有Lock接口和实现并不多余,那么接下来我们就一起来说道说道。 之所以有了synchronized关键字,还需要提供Lock接口,主要基于这么几个因素: synchronized同步加锁内部由jdk控制,是非公平锁。实际应用中,有时候我们需要公平锁,但是它做不到。 一句话概括:不够灵活 synchronized同步加锁内部由jdk控制,不可中断

Jumpserver高可用集群部署:(七)RDP代理模块guacamole部署并实现系统服务管理

五迷三道 提交于 2020-11-08 04:20:46
1、配置防火墙 firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.255.200.1/30" port protocol="tcp" port="8081" accept" firewall-cmd --reload 2、下载guacamole cd /sas/src/ wget -O docker-guacamole-v2.3.2.tar.gz https://github.com/jumpserver/docker-guacamole/archive/master.tar.gz mkdir /sas/src/docker-guacamole tar -xf docker-guacamole-v2.3.2.tar.gz -C /sas/src/docker-guacamole --strip-components 1 rm -rf /sas/src/docker-guacamole-v2.3.2.tar.gz cd /sas/src/docker-guacamole wget http://download.jumpserver.org/public/guacamole-server-1.2.0.tar.gz tar -xf guacamole-server-1.2.0

图文并茂,HashMap经典详解!【文末送书】

那年仲夏 提交于 2020-11-07 17:21:33
什么是HashMap? HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 HashMap的数据结构 在Java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。 文字描述永远要配上图才能更好的讲解数据结构,HashMap的结构图如下。 从上图中可以看出,HashMap底层就是一个数组结构,数组中的每一项又是一个链表或者红黑树。当新建一个HashMap的时候,就会初始化一个数组。 下面先通过大概看下HashMap的核心成员。 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { // 默认容量,默认为16,必须是2的幂 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 最大容量,值是2^30 static final int MAXIMUM_CAPACITY = 1 << 30 // 装载因子

java和JavaScript的区别

孤街浪徒 提交于 2020-11-07 15:54:23
java和JavaScript的区别 java是SUN公司推出的面向对象的程序设计语言 javaScript是Netscape公司推出可嵌入Wed页面中的基于对象和事件驱动的解释性语言(脚本语言) java主要在服务端运行 javascript主要运行在客户端浏览器中 java语言需要先编译在运行 javascript语言在程序运行中被逐行地解释 java采用强类型变量检查,即所有变量在编译前必须作声明 javascript语言采用弱类型,即在使用前不需要声明,而是浏览器解释器在运行时检查数据类型(console.log(typeof a);中的typeof在浏览器的控制台返回数据类型) java运行时需要main方法,@注解,web服务器来启动 javascript语言可以在页面上监听事件 java语言的代码是一种HTML没有关系的语言 javascript语言的代码是一种文本字符格式,可以直接嵌入HTML文档中,并且可动态加载 java语言可以访问本地的硬盘调用硬盘上的数据 javascript语言不可以访问本地的硬盘,不能把数据存入服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互 java语言依赖于jdk编程 javascript语言依赖于浏览器,与操作系统无关 Java的基本数据类型 1)四种整数类型(byte、short、int、long):

这可能是全网最详细的 Java 并发锁知识点剖析了!

不问归期 提交于 2020-11-07 12:36:16
花了几天时间熬夜整理出来的并发锁知识点,我说是全网最详细就是全网最详细,不允许反驳~ 话不多说直接开始,开始之前,为方便大家记忆,记得点赞收藏加关注哦 ,需要下载PDF版本的朋友可以点一点下方链接找我免费领取 链接: 1103806531 暗号:CSDN 1. 并发锁简介 确保线程安全最常见的做法是利用锁机制(Lock、sychronized)来对共享数据做互斥同步,这样在同一个时刻,只有一个线程可以执行某个方法或者某个代码块,那么操作必然是原子性的,线程安全的。 在工作、面试中,经常会听到各种五花八门的锁,听的人云里雾里。锁的概念术语很多,它们是针对不同的问题所提出的,通过简单的梳理,也不难理解。 1.1. 可重入锁 可重入锁,顾名思义,指的是线程可以重复获取同一把锁。即同一个线程在外层方法获取了锁,在进入内层方法会自动获取锁。 可重入锁可以在一定程度上避免死锁。 ReentrantLock 、ReentrantReadWriteLock 是可重入锁。这点,从其命名也不难看出。 synchronized 也是一个可重入锁。 【示例】synchronized 的可重入示例 synchronized void setA ( ) throws Exception { Thread . sleep ( 1000 ) ; setB ( ) ; } synchronized void

浅谈数据结构

跟風遠走 提交于 2020-11-07 09:56:22
数据结构分类 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。 常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示: 每一种数据结构都有着独特的数据存储方式,下面为大家介绍它们的结构和优缺点。 1、数组 数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。例如下面这段代码就是将数组的第一个元素赋值为 1。 int[] data = new int[100];data[0] = 1; 优点: 1、按照索引查询元素速度快 2、按照索引遍历数组方便 缺点: 1、数组的大小固定后就无法扩容了 2、数组只能存储一种类型的数据 3、添加,删除的操作慢,因为要移动其他的元素。 适用场景: 频繁查询,对存储空间要求不大,很少增加和删除的情况。 2、栈 栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是: 先进后出 ,或者说是 后进先出 , 从栈顶放入元素的操作叫压栈,取出元素叫弹栈 。 栈的结构就像一个集装箱,越先放进去的东西越晚才能拿出来,所以,栈常应用于实现递归功能方面的场景,例如斐波那契数列。 3、队列 队列与栈一样,也是一种线性表,不同的是,队列可以在一端添加元素,在另一端取出元素,也就是:先进先出