JavaSE
文章平均质量分 84
Java知音_
欢迎微信搜索【Java知音】关注我的公众号,号内回复“后端面试”,送你一份精心准备的Java面试题(提纲+解析),Java知音每天推送精选好文,已经有十几万开发者关注,欢迎加入我们,共同交流,纠错
展开
-
Java中引入泛型的好处
泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数。这种类型参数可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 在没有泛型的情况下,通过对类型Object的引用来实现参数的转换,这种转换是需要显式地强制类型转换,对于强制类型转换错误的情况,编译器可能不提示错误,而在运行时候却又通不过,这是一个安全隐患。可能给我们的开发带来了麻烦,难以找到运行时错误,增加不必要原创 2016-12-13 10:57:33 · 8182 阅读 · 1 评论 -
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子,假如兔子都不死,问每个月的兔子总数为多少?
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子,假如兔子都不死,问每个月的兔子总数为多少?兔子增长的总数规律符合斐波那契数列,即从第三个月起,本月兔子的数量等于上一个月的加上 上上一个月的兔子数量之和。即f(n)=f(n-1)+f(n-3)代码如下:public class TuZi { public static v原创 2017-03-25 16:42:15 · 4061 阅读 · 0 评论 -
求101-200以内的素数
素数就是除了它本身以及1之外不能被其他数整除基本思路是,循环101-200之间的数字,让每一个数字都去循环除以2到它本身的数字,设定条件,这样一个循环后,总会取模为0,(任何数除以它本身都能整除),取模为0后进行判断,如果使它等于0的数是它本身,那么意味着除了2和它本身,不能被其他数整除,那么这个数就是素数。代码如下:public class Sushu { public st原创 2017-03-25 16:38:45 · 1697 阅读 · 1 评论 -
多线程的学习
子线程循环十次,接着主线程循环一百次,接着又回到子线程循环十次,然后主线程再循环一百次,如此循环往复,循环五十次。原创 2017-01-31 11:26:03 · 637 阅读 · 0 评论 -
Java中的垃圾回收原理
用户程序(mutator)会修改还堆区中的对象集合,从存储管理器处获取空间,创建对象,还可一引入和消除对已有对象的引用。当mutator不能“达到”某些对象的时候,这些对象就成了垃圾。目的:找到不可达的对象,并将这些对象交给跟踪空闲空间的存储管理器,收回他们所占的资源。一些基本概念类型安全:任何数据分量的类型都是可确定的。可以在编译时刻确定数据的转载 2017-01-30 10:38:09 · 1160 阅读 · 0 评论 -
Java爬虫实践--爬取CSDN网站图片为例
实现的效果,自动在工程下创建Pictures文件夹,根据网站URL爬取图片,层层获取。在Pictures下以网站的层级URL命名文件夹,用来装该层URL下的图片。同时将文件名,路径,URL插入数据库,便于索引。第一步,创建持久层类,用来存储文件名,路径以及URL。package org.amuxia.demo;import java.sql.Connection;import jav原创 2017-06-26 19:47:36 · 5216 阅读 · 10 评论 -
Java使用iText实现对PDF文件的操作
iText是著名的开放项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。http://itextpdf.com/版本:itextpdf-5.2.1.jar,文末附下载链接需要注意的是,IText使用的单位是pt而不是px,一帮情况下要想保持原来px的大小需要将px*3/41、生成一个PDF ...转载 2017-08-09 14:56:32 · 39747 阅读 · 6 评论 -
关于Calendar用法的一些总结
Calendar是一个抽象类,主要用来操作日历时间字段。在java.util.Calendar包中,Calendar在开发中基本都会使用得到,这里对经常使用到的做个总结,也可能有遗漏,遇到再补,慢慢完善。常用的方法abstract void add(int field, int amount) 此方法添加或减去指定的时间量,以给定日历字段,基于日历的规则原创 2017-07-27 21:49:03 · 3495 阅读 · 0 评论 -
Java面试题及答案
1、Java中的重载与重写有什么区别重载(Overload)是让类以统一的方式处理不同类型数据的一种手段,实质表现就是多个具有不同的参数个数或者类型的同名函数(返回值类型可随意,不能以返回类型作为重载函数的区分标准)同时存在于同一个类中,是一个类中多态性的一种表现(调用方法时通过传递不同参数个数和参数类型来决定具体使用哪个方法的多态性)。重写(Override)是父类与子类之间的多态性,实...原创 2018-07-30 11:04:21 · 615 阅读 · 0 评论 -
List集合的去重问题
面试中经常被问到的list如何去重,用来考察你对list数据结构,以及相关方法的掌握,体现你的java基础学的是否牢固。我们大家都知道,set集合的特点就是没有重复的元素。如果集合中的数据类型是基本数据类型,可以直接将list集合转换成set,就会自动去除重复的元素,这个就相对比较简单。如下示例:public class Test { public static void ...原创 2018-10-30 13:32:54 · 3744 阅读 · 0 评论 -
面试必会之ArrayList源码分析&手写ArrayList
简介ArrayList是我们开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据,ArrayList是线程不安全的,非常适合用于对元素进行查找,效率非常高。线程安全性对ArrayList的操作一般分为两个步骤,改变位置(size)和操作元素(e)。所以这个过程在多线程的环境下是不能保证具有原子性的,因此ArrayList在多线程的环境下是线程不安全的。...原创 2019-02-20 18:54:43 · 334 阅读 · 0 评论 -
面试必会之LinkedList源码分析
作者:Java知音-微笑面对生活概述LinkedList是一种可以在任何位置进行高效地插入和移除操作的有序序列,它是基于双向链表实现的,是线程不安全的,允许元素为null的双向链表。源码分析1. 变量/** * 集合元素数量 **/transient int size = 0;/** * 指向第一个节点的指针 * Invariant: (first == nu...原创 2019-02-20 18:57:01 · 302 阅读 · 0 评论 -
Java中NIO和IO的比较
NIO是为了弥补IO操作的不足而诞生的,NIO的一些新特性有:非阻塞I/O,选择器,缓冲以及管道。管道(Channel),缓冲(Buffer) ,选择器( Selector)是其主要特征。概念解释:Channel——管道实际上就像传统IO中的流,到任何目的地(或来自任何地方)的所有数据都必须通过一个 Channel 对象。一个 Buffer 实质上是一个容器对象。每一种基本 Jav原创 2017-04-26 22:24:01 · 9311 阅读 · 0 评论 -
根据实例详解Java中的反射机制
概念:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。作用:Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个原创 2017-05-03 21:22:26 · 2189 阅读 · 0 评论 -
List,Set和Map详解及其区别和他们分别适用的场景
Java中的集合包括三大类,它们是Set(集)、List(列表)和Map(映射),它们都处于java.util包中,Set、List和Map都是接口,它们有各自的实现类。Set的实现类主要有HashSet和TreeSet,List的实现类主要有ArrayList,Map的实现类主要有HashMap和TreeMap。Collection是最基本的集合接口,声明了适用于JAVA集合的通用方法,li原创 2017-02-07 12:32:15 · 7048 阅读 · 1 评论 -
String被设计成不可变和不能被继承的原因
String是所有语言中最常用的一个类。我们知道在Java中,String是不可变的、final的。Java在运行时也保存了一个字符串池(String pool),这使得String成为了一个特别的类。主要是为了 “ 效率 ” 和 “ 安全性 ” 的缘故。 若 String 允许被继承, 由于它的高度被使用率, 可能会降低程序的性能,所以 String 被定义成 final。 一:St原创 2017-02-17 22:31:12 · 11888 阅读 · 1 评论 -
抽象类详解
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。比如,在一个图形编辑软件的分析设计过程中,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是原创 2017-03-08 21:31:14 · 936 阅读 · 0 评论 -
Java冒泡,选择,插入排序算法
冒泡排序基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。 即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。 第一次比较排序的结果:会把其中最大的数据排到最大的索引处 第二次比较排序后的结果:因为第一次已经把最大的一个数据放到了最大的索引的地方,所以这次要进行比较的数据比数原创 2017-03-06 21:22:57 · 910 阅读 · 0 评论 -
Java中static变量作用和用法详解
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。 被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象转载 2017-02-27 18:12:51 · 2297 阅读 · 0 评论 -
iterator
定义与结构迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。 从定义可见,迭代器模式是为容器而生。很明显,对容器对象的访问必然涉及到遍历算法。你可以一股脑的将遍历方法塞到容器对象中去;或者根本不去提供什么遍历算法,让使用容器的人自己去实现去吧。这两种情况好像都能够解决问题原创 2016-12-22 12:52:08 · 740 阅读 · 0 评论 -
Java编程中“为了性能”尽量要做到的一些地方
最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了。 下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方。1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于转载 2017-02-27 18:07:45 · 842 阅读 · 2 评论 -
详解Java中的正则表达式
详解Java中的正则表达式,并列出常用的正则表达式语法和一些常用的场景。判断一个字符串是否是由数字组成:当不使用正则表达式的时候的实现代码:public class RegexDemo01 { public static void main(String[] args) { String s = "23432324"; char c[] = s.toCharArray();/原创 2017-03-09 21:17:33 · 1086 阅读 · 0 评论 -
Java中的Math类和日期类详解
Math类是定义了一系列的数学运算方法,是使用static修饰的方法,表示可以通过Math类直接访问。我们在开发中一般只需要关注两个: ·四舍五入: ·取得随机数四舍五入API文档中描述:roundpublic static int round(float a)返回最接近参数的 int。结果将舍入为整数:加上 1/2,原创 2017-03-10 20:12:48 · 1567 阅读 · 1 评论 -
简单的控制台五子小游戏棋程序(Java)
代码中注释很详细,不多做解释,直接上代码: /** * 简单的控制台五子棋程序 */public class Chess{ private static int BOARD_SIZE=30;//初始化数组长度,超过抛越界异常 //棋盘 private static char[][] board=new char[BOARD_SIZE][BOARD_SIZE];原创 2017-03-12 20:45:29 · 1203 阅读 · 0 评论 -
IO流详解
File是IO操作中,唯一可以代表磁盘本身类,File定义了一些与平台无关的操作方法来操作文件,比如说可以创建和删除文件等等。常用操作方法如下:·public File(String pathname):构造方法,构造一个有路径的文件(文件夹)目录·public boolean createNewFile() throws IOException: 创建文件·public原创 2017-03-14 19:36:05 · 1561 阅读 · 2 评论 -
面试必会之HashMap源码分析
简介HashMap最早出现在JDK1.2中,底层基于散列算法实现。HashMap 允许 null 键和 null 值,是非线程安全类,在多线程环境下可能会存在问题。1.8版本的HashMap数据结构:为什么有的是链表有的是红黑树?默认链表长度大于8时转为树结构Node是HhaspMap中的一个静态内部类 ://Node是单向链表,实现了Map.Entry接口stati...原创 2019-02-27 10:14:00 · 360 阅读 · 0 评论