![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java基础
SongYuxinZzz
啦啦啦啦,噜噜噜,咕咕咕咕!
展开
-
Synchronize与Lock的对比
1、Lock是显示锁(手动开启和关闭,别忘记关闭),synchronize是隐式锁,出了所用域自动释放。2、Lock只有代码块锁,synchronize有代码块锁和方法锁。3、使用Lock锁,JVM将花费较少的时间来调度线程,性能更好。并且具有更好的扩展性(提供更多的子类,比如:ReentrantLock)4、优先使用顺序:Lock>同步代码块(方法体中的代码块,分配了相应的资源)>同步方法(在方法体之外)...原创 2021-11-30 20:27:42 · 521 阅读 · 0 评论 -
产生死锁的四个必要条件
1、互斥条件:一个资源每次只能被一个进程使用。2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得资源保持不放。3、不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。...原创 2021-11-30 20:00:48 · 1023 阅读 · 0 评论 -
column下划线命名&&返回java实体是驼峰命名
#配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId)map-underscore-to-camel-case: true原创 2021-11-03 09:42:59 · 263 阅读 · 0 评论 -
Thread--run()与start()区别
1、调用 run方法时,只有主线程一条路径,先执行run,后执行main2、调用start方法时,多条路径,并行交替执行代码示例1:结果1:代码示例2:结果2:原创 2021-09-08 18:26:40 · 123 阅读 · 0 评论 -
自定义注解--
一、@Inherited:说明子类可以继承父类中的该注解二、@Retention:注解的保留位置@Retention(RetentionPolicy.SOURCE)这种类型的Annotations只在源代码级别保留,编译时就会被忽略,在class字节码文件中不包含。@Retention(RetentionPolicy.CLASS)这种类型的Annotations编译时被保留,默认的保留策略,在class文件中存在,但JVM将会忽略,运行时无法获得。@Retention(原创 2021-08-18 10:10:37 · 97 阅读 · 0 评论 -
自定义注解之----@Target
自定义注解之----@Target 注解的作用目标@Target(ElementType.TYPE)——接口、类、枚举、注解@Target(ElementType.FIELD)——字段、枚举的常量@Target(ElementType.METHOD)——方法@Target(ElementType.PARAMETER)——方法参数@Target(ElementType.CONSTRUCTOR) ——构造函数@Target(ElementType.LOCAL_VARIABLE)——局部变量@Ta原创 2021-08-18 10:02:58 · 1076 阅读 · 0 评论 -
Git学习——从无到有
目录Git 基本介绍 Git 介绍 Git 与 SVN 区别 Git 参考文档 Git 安装配置 Git 安装 Git 环境配置 Git 免密登录 Git 创建仓库 方式一 Git clone 方式二 Git init Git 分支管理 Git 原理分析 Git 基本结构 Git 工作流程。 Git 常用命令 基本命令 Git cherry-pick 命令 Git fetch 命令 git rebase 命令 git mer原创 2021-05-26 14:11:16 · 159 阅读 · 0 评论 -
10w行级别数据的Excel导入优化记录
需求说明项目中有一个 Excel 导入的需求:缴费记录导入由实施 / 用户 将别的系统的数据填入我们系统中的 Excel 模板,应用将文件内容读取、校对、转换之后产生欠费数据、票据、票据详情并存储到数据库中。在我接手之前可能由于之前导入的数据量并不多没有对效率有过高的追求。但是到了 4.0 版本,我预估导入时Excel 行数会是 10w+ 级别,而往数据库插入的数据量是大于 3n 的,也就是说 10w 行的 Excel,则至少向数据库插入 30w 行数据。因此优化原来的导入代码是势在必行的。转载 2021-04-15 11:17:02 · 255 阅读 · 0 评论 -
消息队列——1、为什么使用消息队列
面试官心理分析其实面试官主要是想看看:第一,你知不知道你们系统里为什么要用消息队列这个东西?不少候选人,说自己项目里用了 Redis、MQ,但是其实他并不知道自己为什么要用这个东西。其实说白了,就是为了用而用,或者是别人设计的架构,他从头到尾都没思考过。没有对自己的架构问过为什么的人,一定是平时没有思考的人,面试官对这类候选人印象通常很不好。因为面试官担心你进了团队之后只会木头木脑的干呆活儿,不会自己思考。第二,你既然用了消息队列这个东西,你知不知道用了有什么好处&坏处?你要是没考转载 2021-04-14 16:10:43 · 186 阅读 · 0 评论 -
设计模式概述-24种设计模式和七大设计原则
六大设计原则1、开闭原则(Open Close Principle) 定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。问题由来:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,...转载 2018-11-28 16:26:22 · 297 阅读 · 0 评论 -
Map的四种遍历方式
方式一 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。 1 2 3 4 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Integer> entry ...原创 2018-11-29 20:00:51 · 325 阅读 · 1 评论 -
面试题15——hashCode和equals方法的区别与联系
hashCode和equals方法的区别:1.equal()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的。 2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。 因为重写的equal()里一般比较的比较全面比较复杂,这样效率就比较低,而利用hashCode()进行对比,则只要...原创 2018-08-21 17:49:37 · 8373 阅读 · 0 评论 -
面试题23——HashSet与HashMap的区别
HashSet: HashSet实现了Set接口,它不允许集合中出现重复元素。当我们提到HashSet时,第一件事就是在将对象存储在HashSet之前,要确保重写hashCode()方法和equals()方法,这样才能比较对象的值是否相等,确保集合中没有储存相同的对象。如果不重写上述两个方法,那么将使用下面方法默认实现: public boolean add(Object o...原创 2018-08-24 15:13:42 · 640 阅读 · 0 评论 -
面试题22——HashMap的实现原理
HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散...原创 2018-08-24 14:38:47 · 435 阅读 · 0 评论 -
面试题21——HashTable和HashMap区别
1、继承的父类不同 Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。但二者都实现了Map接口。2、线程安全性不同 javadoc中关于hashmap的一段描述如下:此实现不是同步的。如果多个线程同时访问一个哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。 Hashtable 中的方...原创 2018-08-24 10:42:44 · 788 阅读 · 0 评论 -
面试题20——ArrayList 与 Vector 区别
区别:Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间...原创 2018-08-24 10:06:03 · 292 阅读 · 0 评论 -
15 个 Java 线程面试题和答案
15 个 Java 线程面试题和答案转自:http://www.importnew.com/29562.html总之不要考虑那么多,下面是各种投行,比如巴克莱银行(Barclays)、花旗银行(Citibank)、摩根史坦利投资公司(Morgan Stanley)等等,面试 Java 开发者时常问的 Java 多线程和并发问题。1. 现在有线程 T1、T2 和 T3。你如何确保 T2 ...转载 2018-08-28 14:22:30 · 813 阅读 · 0 评论 -
面试题19——ArrayList和LinkedList区别
区别:ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (LinkedList是双向链表,有next也previous) 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 对...原创 2018-08-23 16:32:03 · 340 阅读 · 0 评论 -
面试题10——自定义注解的场景及实现
一、元注解java中有四种元注解:@Retention、@Inherited、@Documented、@Target二、自定义注解使用场景类属性自动赋值。 验证对象属性完整性。 代替配置文件功能,像spring基于注解的配置。 可以生成文档,像java代码注释中的@see,@param等三、新建一个自定义注解@Retention(RetentionPolicy.RUNTI...原创 2018-08-20 16:48:45 · 3901 阅读 · 0 评论 -
面试题2——final、finally、finalize的区别
1、final修饰符(关键字)。被final修饰的类,就意味着不能再派生出新的子类,不能作为父类而被子类继承。因此一个类不能既被abstract声明,又被final声明。将变量或方法声明为final,可以保证他们在使用的过程中不被修改。被声明为final的变量必须在声明时给出变量的初始值,而在以后的引用中只能读取。被final声明的方法也同样只能使用,不能重载。2、finally是在异常处理...原创 2018-08-10 10:08:52 · 492 阅读 · 0 评论 -
HashMap介绍
HashMap简介:HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。HashMap 的实例有...原创 2018-08-06 10:36:48 · 377 阅读 · 0 评论 -
阿里面试交流总结
最近去阿里的菜鸟国际做了一次面试交流,发现大公司对于面试者的知识结构考核非常严谨,可以作为我们日常工作学习的指导。虽然很多人说面试问到的东西在实际工作中很少用到,甚至有「面试造火箭,工作拧螺丝」的说法。但从面试中,其实可以看得出来现在的公司对于面试者的知识体系要求。如果我们能在工作中就按着这样的要求去不断提升,那么在面试的时候必然也能游刃有余。一般来说,阿里的面试会有两轮的技术电面,分别交叉检...转载 2018-08-06 15:49:18 · 280 阅读 · 0 评论 -
面试题3——Exception异常中:Error、运行时异常与一般异常有何异同
下图是java异常类层次结构图 : 相同点:两种异常同属于Exception父类。不同点:(1)运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等。(2)一般异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。1、Jav...原创 2018-08-10 17:41:44 · 379 阅读 · 0 评论 -
面试题4——请写出5种常见到的runtime exception
常见RuntimeException:ArrayStoreException:试图将错误类型的对象存储到一个对象数组时抛出的异常ClassCastException:试图将对象强制转换为不是实例的子类时,抛出该异常IllegalArgumentException:抛出的异常表明向方法传递了一个不合法或不正确的参数IndexOutOfBoundsException:指示某排序索引(例...原创 2018-08-14 16:20:32 · 735 阅读 · 0 评论 -
面试题1——面向对象的特征:继承、封装和多态
三大特性之封装封装: 封装是面向对象的特征之一,是对象和类概念的主要特性。封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。一旦定义了一个对象的特性,则有必要决定这些特性的可见性,即哪些特性对外部世界是可见的,哪些特性用于表示内部状态。在这个阶段定义对象...原创 2018-08-07 10:08:35 · 1258 阅读 · 0 评论 -
面试题5——int 和 Integer 有什么区别,Integer的值缓存范围
一、int 和 Integer 区别1、Integer是int的包装类;int是基本数据类型;2、Integer变量必须实例化后才能使用;int变量不需要;3、Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ;4、Integer的默认值是null;int的默认值是0。二、Integer的值缓存范围Integer的值缓存范围是(-12...原创 2018-08-15 14:29:12 · 1443 阅读 · 0 评论 -
面试题4———请写出5种常见到的runtime exception
RuntimeException是java中所有运行时异常的父类,实际运行时出现的都是它的子类(可以查看上一篇文章)1, Object x = new Integer(0); System.out.println((String)x); 当试图将对象强制转换为不是实例的子类时,抛出该异常(ClassCastException)2, int a=5/0; 一个整数“除以零”时,抛出Arith...原创 2018-08-20 14:14:50 · 1131 阅读 · 0 评论 -
面试题16——什么是java序列化,如何实现java序列化?或者请解释Serializable接口的作用
我们有时候将一个java对象变成字节流的形式传出去或者从一个字节流中恢复成一个java对象,例如,要将java对象存储到硬盘或者传送给网络上的其他计算机,这个过程我们可以自己写代码去把一个java对象变成某个格式的字节流再传输,但是,jre本身就提供了这种支持,我们可以调用OutputStream的writeObject方法来做,如果要让java 帮我们做,要被传输的对象必须实现se...转载 2018-08-22 10:06:46 · 1492 阅读 · 0 评论 -
面试题17——JDK和JRE的区别
JDK和JREJDK,开发java程序用的开发包,JDK里面有java的运行环境(JRE),包括client和server端的。需要配置环境变量。JRE,运行java程序的环境,JVM,JRE里面只有client运行环境,安装过程中,会自动添加PATH。区别: Jre 是java runtime environment, 是java程序的运行环境。既然是运行,当然要包含jvm,也就是大家熟...原创 2018-08-22 15:03:42 · 764 阅读 · 0 评论 -
面试题6——String、StringBuilder、StringBuffer的区别
1、运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > StringString最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。以下面一段代码为例:String str...原创 2018-08-20 09:54:10 · 318 阅读 · 0 评论 -
面试题7——重载和重写的区别
一、方法重写(overriding): 1、也叫子类的方法覆盖父类的方法,要求返回值、方法名和参数都相同。 2、子类抛出的异常不能超过父类相应方法抛出的异常。(子类异常不能超出父类异常) 3、子类方法的的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)二、方法重载(overloading): 重载是在同一个类中的两个或两个以上的方法...原创 2018-08-20 14:08:40 · 1975 阅读 · 1 评论 -
面试题18——List 、 Set和Map 区别
List:可以允许重复的对象。 可以插入多个null元素。 是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。 常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。Set:不允许重复对象 无序容器...原创 2018-08-23 09:34:43 · 559 阅读 · 0 评论 -
面试题8——接口和抽象类的联系和区别
一 接口和抽象类的相似性1 接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。2 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。 二 接口和抽象类的区别1 接口里只能包含抽象方法,静态方法和默认方法,不能为普通方法提供方法实现,抽象类则完全可以包含普通方法。2 接口里只能定义静态常量,不能定义普通成员变量,抽...转载 2018-08-20 14:38:17 · 209 阅读 · 0 评论 -
面试题9——反射的用途及实现
反射的核心是JVM在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。一、Java反射框架主要提供以下功能:1.在运行时判断任意一个对象所属的类; 2.在运行时构造任意一个类的对象; 3.在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法); 4.在运行时调用任意一个对象的方法二、主要用途 :1、反射...原创 2018-08-20 15:58:36 · 6444 阅读 · 0 评论 -
Java基础需要都搞懂的名词
关于基础知识:你可以看看这些名词或知识点,看是否能说出个一二三四来。JavaSE----基本语法、数据类型、操作符等:int、long、Integer、Long、if、else、for、while----面向对象:class(类)、Object(对象)、instance(实例)、state(状态)、behavior(行为)、field、method、new、可见性(访问控制)、at原创 2017-08-07 09:59:51 · 490 阅读 · 0 评论