![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
Sweetie77
keep coding
展开
-
synchronized修饰方法和修饰代码块
一. 概念类锁和对象锁的区别类锁:所有对象一把锁对象锁:一个对象一把锁,多个对象多把锁同步问题同步是对同一把锁而言的,同步时在多线程竞争同一把锁的时候才能实现,如果多个线程竞争不同的锁,那么线程是不能同步的两个线程,一个取对象锁,一个取类锁,则不能同步两个线程,一个取a对象锁,一个取b对象锁,不能同步二. synchronized作用用来完成多线程条件下同步工作的若没有同步...原创 2019-08-29 17:25:41 · 462 阅读 · 0 评论 -
内存优化--内存抖动
内存抖动是指内存频繁的分配和回收, 而频繁的gc会导致卡顿, 严重时和内存泄漏一样会导致OOM垃圾回收在对对象进行回收前需要对垃圾进行采集, 不同的虚拟机实现可能使用不同的垃圾收集算法, 不同的手机算法的实现也不尽相同, 不同的算法各有各的优劣势常用的收集算法有:1. 标记-清除算法 Mark-Sweep算法分为标记和清除两个阶段, 首先标记出所有需要回收的对象, 在标记完成后统一回收被...原创 2019-07-09 13:02:26 · 2982 阅读 · 0 评论 -
Java中的守护线程和非守护线程
Java中有两类线程: User Thread(用户线程) Daemon Thread(守护线程)守护线程也叫后台线程, 指的是程序在运行的时候后台提供一种通用服务的线程, 比如jvm中垃圾回收线程, 这种线程并不属于程序中不可或缺的部分. 因此当所有非守护线程结束时, 程序也就终止了, 同时会杀死进程中所有的守护线程. 反过来说, 只要有任何非守护线程在运行, 程序就不会终止.守护线程...原创 2019-06-17 20:29:26 · 584 阅读 · 0 评论 -
链表和数组的区别
数组是由下标索引和data两部分组成链表是由data和指向下一个数据的指针地址两部分组成数组和链表的区别如下:数组静态分配内存, 链表动态分配内存; 数组在内存中连续, 链表不连续; 数组元素在栈区, 链表元素在堆区; 数组利用下标定位, 时间复杂度O(1), 链表定位元素时间复杂度O(n) 数组插入或删除元素的时间复杂度O(n), 链表的时间复杂度O(1)数组的特点:...原创 2019-06-11 19:59:31 · 476 阅读 · 0 评论 -
一道关于Integer的笔试题
面试题://有如下4条语句:Integer i01 = 59;int i02 = 59;Integer i03 =Integer.valueOf(59);Integer i04 = new Integer(59);以下输出结果为false的是:A. System.out.println(i01== i02);B. System.out.println(i01== ...原创 2019-06-11 09:43:40 · 563 阅读 · 0 评论 -
设计模式之结构型模式
结构型模式中最体现扩展性的模式是 ()A. 装饰模式B. 合成模式C. 桥接模式D. 适配器这个题选A1. 适配器模式 (Adapter)适配器模式是将一个类的接口转换成客户希望的另外一个接口. 适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.两个成熟的类需要通信, 但是接口不同, 由于开闭原则, 我们不能去修改这两个类的接口, 所以就需要一个适...原创 2019-05-30 17:00:15 · 109 阅读 · 0 评论 -
Java中super和this关键字的使用
在使用super和this关键字时, 以下描述正确的是()A. 在子类构造方法中使用super()显示调用父类的构造方法, super()必须写在子类构造方法的第一行, 否自编译不通过B. super() 和 this() 不一定要放在构造方法内的第一行C. this() 和 super() 可以同时出现在一个构造函数中D. this() 和 super() 可以在static 环境中使用...原创 2019-05-23 14:18:17 · 5542 阅读 · 1 评论 -
编译出错和运行出错的区别
要区分编译时错误和运行时错误, 先要明白什么是编译什么是运行首先来看这张图编译期就是将我们写的java源代码交给编译器执行的过程, 起翻译的作用...原创 2019-05-26 17:03:32 · 7637 阅读 · 3 评论 -
假设A类又如下定义, 设a是A类的一个实例, 下列哪个调用是错误的?()
假设A类又如下定义, 设a是A类的一个实例, 下列哪个调用是错误的?()public class A{public int i;static String s;void method1(){}static void method2(){}}A. System.out.println(a.i);B. a.method1();C. A.method1();D. A.method2...原创 2019-05-22 15:35:47 · 6459 阅读 · 0 评论 -
堆 栈 方法区中存放的是什么 ?
首先来看一道题 :单选题 : 方法通常存储在进程中的哪个区 ?A. 堆区B. 栈区C. 全局区D. 方法区这个题我们要注意的是题干的问题, 是问 " 进程 " 中的哪个区, 而不是JVM中的哪个区. 答案是D堆区存储的是一切new出来的对象栈区存储基本数据类型的值和对象引用.每个栈中的数据( 基础数据类型和对象引用 )都是私有的,其他栈不可以访问.栈分为三个部分 : 基本...原创 2019-05-22 15:20:36 · 7807 阅读 · 10 评论 -
Java之访问权限修饰符
Java中共有四种权限修饰符 : public, protected, default, private修饰类时 : 当访问权限修饰符修饰类的时候, 只能使用默认的修饰符和public修饰符, 在不适用public的时候在不同的包中不可以访问到这个类, 在Java这种面向对象编程的语言来说, 应该将类设置为 public 的类, 使用了public修饰的类可以导入到任何类中, 而不修饰的类只...原创 2019-12-16 11:49:19 · 192 阅读 · 0 评论 -
java中关于try, catch, finally中的细节分析
首先来看一个程序(finally块中有return) public static int test(){ int i = 0; try{ i = 1; System.out.println("try i= "+i); return i; }catch (Excepti...原创 2019-07-16 14:48:57 · 125 阅读 · 0 评论 -
浅谈String str = new String()和==比较
首先明确一下常量池这个概念, 它可以用来存储字符串常量先来看一个程序public class StringDemo1 { // A.3 B.4 C.5 D.6 public static void main(String[] args) { String str1 = new String("abc"); String str2 = new St...原创 2019-07-16 16:12:40 · 280 阅读 · 0 评论 -
JDBC
JDBC操作数据库的步骤注册数据库驱动建立数据库连接创建一个statement执行SQL语句处理结果集关闭数据库连接Connection connection = null;Statement statement = null;ResultSet resultSet = null;try{ /** * 加载驱动有两种方式 * 1. 会导致驱动会...原创 2019-08-22 22:15:50 · 80 阅读 · 0 评论 -
List, Set, Map的区别
list和set都是实现了collection接口list:a) 可以允许重复的对象b) 可以插入多个null值c) 有序容器,保证了每个元素的插入和输出顺序d) 常用的实现类有ArrayList(索引的随机访问),LinkedList(list中添加或删除元素)和Vectorset:a) 不允许重复对象b) 只允许一个null值c) 无序容器。TreeSet通过Co...原创 2019-08-17 22:43:12 · 85 阅读 · 0 评论 -
JVM类加载机制
一. 类加载机制JVM类加载分为5个过程:1.1加载加载主要是将.class文件(并不一定是.class,可以是zip包,网络中获取)中的二进制字节流读入到JVM中。在加载阶段,JVM需要完成三件事:1. 通过类的全限定名获取该类的二进制字节流2. 将字节流所代表的静态存储结构转化为方法区的运行时数据结构3. 在内存中生成一个该类的java.lang.Class对象,作为方法区这个...原创 2019-08-21 23:10:15 · 78 阅读 · 0 评论 -
Swing基础概念
Swing是一个为Java设计的GUI工具包Swing是Java基础类的一部分Swing包括了图形用户界面GUI器件,如:文本框,按钮,分隔窗格和表Swing提供了许多比AWT更好的屏幕显示元素,用纯Java写成。JFrame:Java的GUI程序的基本思路是以JFrame为基础,它是屏幕上Window的对象,能够最大化,最小化,关闭。JPanel:Java图形用户界面GUI工具包swi...原创 2019-08-19 20:44:23 · 334 阅读 · 0 评论 -
Java Swing图形化界面
步骤:1. 定义你需要使用的面板,按钮,文本,标签。2. 对这些进行实例化。3. 把面板放在界面上。import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JPasswordField;im...原创 2019-08-19 19:58:43 · 349 阅读 · 0 评论 -
浅谈Redis
简介Redis是一个用C编程的key-value存储数据库, 用来缓存事件, 发布订阅, 高速队列等场景, 支持丰富的数据类型Redis为什么这么快纯内存操作. 但是在有需要的时候需要手动持久化到键盘中单线程. 避开了多线程中上下文频繁切换的操作数据结构简单, 对数据的操作也简单使用底层模型不同, 底层实现方式与客户端间通信的应用协议不同. Redis构建了VM机制,不用浪费时间去移...原创 2019-08-09 20:10:49 · 182 阅读 · 0 评论 -
统计回文
import java.util.Scanner;public class HuiWen { /** * 思路: * 首先将用户输入的字符串变为一个个的char * 两个指针同时遍历, 一个从前面开始, 一个从后面开始 * * 查找插入的位置: * 将第二个字符串从第一个字符串第一个位置开始尝试插入 *...原创 2019-07-21 17:53:07 · 100 阅读 · 0 评论 -
Java中哪个关键字可以对对象加互斥锁
A. synchronizedB. volatileC. serializeD. static答案是A, synchronized关键字是同步代码块关键字, 对对象加互斥锁详解:synchronized:用来给对象和方法或者代码块加锁. 当它锁定一个方法或者一个代码块的时候, 同一时刻最多只有一个线程执行这个段代码volatile:用来确保将变量的更新操作通知到其他线程, 当把变...原创 2019-07-30 14:51:31 · 23241 阅读 · 0 评论 -
执行如下程序, 输出结果是()
class Test { private int data; int result = 0; public void m() { result += 2; data += 2; System.out.print(result + " " + data); }}class ThreadExample extends Thread { private Test mv; pu...原创 2019-07-30 11:29:56 · 2472 阅读 · 0 评论 -
假设 A 类有如下定义,设 a 是 A 类的一个实例,下列语句调用哪个是错误的?()
假设A类有如下定义, 设a是A类的一个实例, 下列语句调用哪个是错误的?()public class A{ public int i; static String s; void method1(){} static void method2(){}}A. System.out.println(a.i);B. a.method1();C. A.m...原创 2019-07-30 11:10:42 · 8566 阅读 · 1 评论 -
Java之代码块的运行顺序
首先来看一道简单的题定义了一个Java的Test类, 当在new Test()实例化的时候, 运行结果正确的是public class Test { { System.out.println("A"); //静态代码块 } static{ System.out.println("B"); ...原创 2019-04-25 11:30:19 · 126 阅读 · 0 评论 -
Java面试题之 -- HashMap常见面试题总结
1. 你用过HashMap吗, 什么是HashMap? 为什么用到它?用过, 然后可以接着回答一些HashMap的特性, 比如HashMap可以接收null键值和值, 而HashTable则不能, HashMap是非synchronized的; HashMap很快, 以及HashMap存储的是键值对等.2. 你知道HashMap的工作原理吗? 你知道HashMap的get() 方法的工作原...原创 2019-04-26 12:22:20 · 4445 阅读 · 0 评论 -
链表OJ题之移除链表元素 (leetcode力扣 203)
题目 : 删除链表中等于给定值val的所有结点示例 : 输入 : 1 -> 2 -> 6 -> 3 -> 4 ->5 -> 6 val = 6 输出 : 1 -> 2 -> 3 -> 4 -> 5先来分析一下这道题, 简单理一下思路我们可以依次遍历链表中的每一个结点, 如果结点的值不是val, 就把结...原创 2019-04-08 23:14:29 · 169 阅读 · 0 评论 -
java类之String类
一. String类简介String类在java.lang包中, java使用String类创建一个字符串变量, 字符串变量属于对象.String类对象创建后不能修改. 二. 实例化方式及其区别1. 直接赋值String str = "hello";System.out.println(str);2. 传统方法: 构造法String str = new Stri...原创 2019-02-18 17:50:19 · 250 阅读 · 0 评论 -
java类之包装类
Object类可以接收所有引用数据类型, 然而在java中, 数据类型分为基本数据类型和引用数据类型, 但是基本数据类型不支持面向对象编程, 因为基本类型的数据不具备"对象"的特性--不携带属性,没有方法可以调用. 那么基本数据类型如何处理呢?一. 基本类型对应的包装类基本类型 包装类型 byte Byte int Integer short Short...原创 2019-02-17 12:39:22 · 95 阅读 · 0 评论 -
java类之Object类
Object类简介Object是java默认提供的一个类. java里面除了Object类, 所有的类都是存在继承关系的. Object是所有类的父类, 任何类都默认继承Object. 由于所有的类都继承在Object类, 因此省略了extends Object关键字. 该类的主要方法有 : clone(), toString(), getClass(), finalize(), equa...原创 2019-02-05 22:11:12 · 136 阅读 · 0 评论 -
滴滴笔试题: System.out.println(11+1l) & 数据类型转换
此题中 l 表示1的数据类型为long , 此题是计算int型 + long型 , 结果是long型 , println打印时long型转化为字符串类型 , 所以答案是12. 在数学计算中, 范围小得数据类型可以自动变为数据范围大的数据类型 数据范围大的数据类型只有强制转换才能转为数据类型小的数据类型大的数据类型转为小的类型, 必须强转, 但有时会丢失内容比如 :long num...原创 2019-01-31 17:20:10 · 310 阅读 · 0 评论 -
java异常(二) 异常框架
java异常架构图 Throwable Throwable是java语言中所有错误或异常的超类Throwable包含两个子类 : Error 和 Exception 他们通常用于指示发生了异常情况Throwable包含了其线程创建时线程执行堆栈的快照, 它提供了printStackTrace()等接口用于获取堆栈跟踪数据等信息 RuntimeException ...原创 2019-01-26 19:36:55 · 277 阅读 · 2 评论 -
java异常(一) 异常简介
java异常简介java异常是java提供的一种识别及响应错误的一致性机制java异常机制可以使程序中的异常代码和正常业务代码分离, 保证程序代码更加准确, 提高程序的健壮性. java异常机制用到的几个关键字 : try, catch, finally, throws, throwtry : 用于监听, 将要被监听的代码放在try语句块内, 当try语句块内发生异常时, 异常就被...原创 2019-01-25 20:08:31 · 89 阅读 · 0 评论 -
java中 equals() 和 == 的区别( String为例 )
一. "==" 操作符的作用 :比较基本数据类型 : byte, short, char, int, long, float, double, boolean比较的是他们的值 比较引用数据类型 : 判断是否指向堆内存的同一块地址 ( 这种情况下, 除非是同一个new出来的对象, 否则他们的比较结果都为false, 因为每new一次, 都会重新开辟新的堆内存空间 )二. equals的作用 ...原创 2019-01-24 22:01:30 · 141 阅读 · 0 评论 -
java的四种引用(强引用, 弱引用, 软引用, 虚引用)
强引用(StrongReference)强引用是使用最普遍的引用, 如果一个对象有强引用, 那 垃圾回收器绝不会回收它.Object o=new Object(); // 强引用当内存空间不足时, java虚拟机宁愿抛出OutOfMemoryError错误, 使程序异常终止, 也不会靠随意回收具有强引用的对象来解决内存不足的问题. 如果不使用, 要通过如下方式来弱化引用 :o=...原创 2019-01-23 18:44:52 · 147 阅读 · 0 评论 -
java抽象类(abstract class)与接口(interface)的区别
在面向对象编程中, 抽象是其的一大特征之一. 在java中,通过抽象类和接口来体现OOP的抽象, 要提高程序的复用率, 增加程序的维护性和扩展性, 就必须是面向抽象的编程, 面向接口的编程. 正确的使用接口和抽象类就变得非常重要. 这两者有很多相似的地方,也有很多的不同. 让我们一起了解一下吧~本文将先介绍抽象类和接口, 再谈及其区别如果有错误欢迎指正.抽象类 : 首先来了解一下抽...原创 2018-12-06 16:16:32 · 337 阅读 · 1 评论 -
重载(overload)和覆写(override)的区别, 只要会中文就能看懂( 必看 !!!)
网上已经有很多大佬们很详细很专业的对两者区别的描述了, 我就用最简单易懂的语言来解释一下~ 如果有不恰当的地方, 可以随时交流, 大家一起进步 ! 覆写就是再写一遍, 重载就是再多一个覆写 : 父类里有, 子类模仿它再写一个重载 : 自己类里面有, 觉得不够再写一个 重载 over...原创 2018-12-04 17:14:29 · 133 阅读 · 0 评论 -
java数据存储(内存分配)
当程序运行时,对象是怎么进行放置安排的呢? 或者说内存是如何被Java划分的?有五个不同的地方可以存在数据: 1、寄存器。 这是最快的存储区,因为它位于不同存储器的地方— 处理器内部。但是寄存器的数量及其有限,所以寄存器根据需要进行自动分配,您不能直接控制,同样不能在程序中感觉到寄存器的存在。 2、栈:位于通用RAM(随机访问存储器)中,但通过 “堆栈指针” 可以从...原创 2019-02-19 16:05:59 · 238 阅读 · 0 评论 -
值类型和引用类型的区别
值类型和引用类型并不是不好区分. 我们常见的解释是这样的 -- 值类型保存的是具体的值, 引用类型保存的是值的地址.之前看到一位大佬的解释, 觉得非常直白易懂. 值类型就是现金, 要直接引用; 引用类型是存折, 要用还得先去银行取现.声明一个值类型变量, 编译器会在栈上分配一个空间, 这个空间对应着该值类型变量, 空间里存储的就是该变量的值.引用类型的实例分配在堆上, 新建一个引用类型...原创 2019-02-20 15:58:08 · 285 阅读 · 0 评论 -
ThreadLocal类详解
一. 简介ThreadLocal是一个本地线程副本变量工具类, 主要是在每个线程中都创建一个副本, 那么每个线程可以访问自己本部的副本变量下图为ThreadLocal的内部结构图可以看出ThreadLocal的核心机制 :每个Thread线程内部都有一个Map Map里面存储线程本地对象(key)和线程的副本变量(value) Thread内部的Map是由ThreadLo...原创 2019-03-28 16:44:18 · 308 阅读 · 0 评论 -
HashSet删除重复元素
一. 定义public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.SerializableHashSet继承AbstractSet类, 实现Set, Cloneable, Serializable接口, 其中Abstract...原创 2019-04-11 11:15:06 · 361 阅读 · 0 评论