![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 71
小玉IU
平时工作没时间看CSDN,如果有空看到了评论会回复的哈~
展开
-
《Java并发编程的艺术》-- Java并发机制的底层实现原理
前言:Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所致用的并发机制依赖于JVM的实现和CPU的指令。volatile的应用synchronized的实现原理与应用原子操作的实现原理...原创 2019-08-12 18:55:24 · 174 阅读 · 0 评论 -
Java -- 使用Awt、Swing实现一个简历
代码:package awt.second;import javax.swing.*;import javax.swing.border.Border;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;/** * @program: sadd * @...原创 2018-12-09 18:45:37 · 1506 阅读 · 0 评论 -
Java -- 枚举
**温馨提示 :所有自定义的枚举类都默认继承 java.lang.Enum 类,本节内容结合 java.lang.Enum 类进行讲解,切勿混淆**1、定义一个枚举类2、枚举类不可以产生实例对象,因为自定义的枚举,都默认继承 Enum 类,且 Enum 类是抽象类,所以不可以产生实例Enum 类举个例子:3、switch 支持枚举类型执行结果4、En...原创 2018-11-23 11:54:52 · 687 阅读 · 0 评论 -
Java --泛型
首先,我们来写一个通用的算法,找到数组当中的最大值;可以看出,编译期间报错,不允许比较,那我们来试一下 compareTo() 方法;有代码可见,传入的数组类型是 Object 类型的,Object 类是 Java 中所有的类的父类,查看了一遍 Object 类的源码,发现:Object 类中并没有 compareTo() 方法,所以我们要实现 Compareable 接口,重写 com...原创 2018-11-19 20:59:29 · 93 阅读 · 0 评论 -
Java -- 反射
参考 :https://blog.csdn.net/sinat_38259539/article/details/71799078原创 2018-11-14 15:24:37 · 142 阅读 · 0 评论 -
Java面向对象 -- 迷宫
题目:如图所示是一迷宫,“0”表示路,“1”表示墙,只有路可以走,入口为左上角,出口为右下角,请用面向对象的思想找出迷宫的路。原创 2018-11-14 14:16:18 · 395 阅读 · 0 评论 -
Java面向对象 -- 图书管理系统
题目:利用抽象类、接口等实现简单的图书管理系统。整体布局Test 类package user.action;import java.util.Scanner;public class Test { public void choose() { while (true) { System.out.println("----------...原创 2018-11-13 21:34:58 · 7748 阅读 · 6 评论 -
Java面向对象牛刀小试 --石头剪刀布
题目 : 编写一个程序,实现人和电脑的猜拳比赛,要求:三局两胜首先写一个 Person 类package test1.java.xiaoyu;public class Person { //定义 score 属性 public static int score = 0; /** * addScore() 用来记录 Person 的分数 */...原创 2018-11-05 11:14:40 · 1249 阅读 · 0 评论 -
Java -- 密封类、抽象类、接口
首先,什么是密封类?可能有同学会说 :密封类当然就是“蜜蜂”类啊!你是在跟我开玩笑吗!!!密封类是被 final 关键字所修饰的类,兄dei~密封类的特点1、密封类不能用作基类;2、就算派生类也被final所修饰也不可以,兄dei~既然有密封类,那么肯定就有密封方法,那么什么是密封方法呢 ?注意 :被 final 修饰的方法是不能被 override(重写) ...原创 2018-11-01 18:02:48 · 1177 阅读 · 2 评论 -
Java初级 --单例模式
什么是单例模式 ?单例模式(SingleTon Pattern)是最简单的一种设计模式。单例模式的英文原话是 :Ensure a class has only one instance,and provided a global point of access to it.意思是 :确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式有哪些要求?1、单例...原创 2018-10-31 15:24:34 · 212 阅读 · 0 评论 -
多线程小题 ——哲学家就餐问题
一、分析问题哲学家从不交谈分析:1、筷子相当于临界资源(在一段时间内只允许一个进程访问的资源,如打印机)2、产生死锁的原因主要有2点: 1是竞争资源 ; 2是进程推进顺序不当3、资源加锁,用来保证在某个时刻,资源只能被一个程序或一段代码访问4、用附加规则解决哲学家进餐问题:为了预防死锁的产生,我们添加一条竞争规则:所有哲学家先竞争奇数号筷子,获得后才能去竞争偶数号筷子(由于5号哲学...转载 2018-10-10 16:17:58 · 841 阅读 · 0 评论 -
多线程小题
题目:编写程序,开启 3 个程序,这 3 个线程的 ID 分别是 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出结果必须按 ABC 的顺序显示,如 ABCABC…以此递推代码:package train20181010;import java.util.concurrent.locks.Condition;import java.util.concurrent.lo...转载 2018-10-10 16:13:45 · 171 阅读 · 0 评论 -
多线程小题 —— 设计火车票模拟程序
题目 : 设计多线程程序:设计火车票模拟程序,假设火车站有100张票,6个售票窗口同时售票,用6个线程模拟6个窗口售票情况。要求打印:窗口 n (窗口编号 1~6 )出售车票编号 m( 1 ~ 100 )成功。代码:import java.util.Random;public class Ticket implements Runnable{ static int num; static...转载 2018-10-10 09:51:17 · 4634 阅读 · 3 评论 -
Java -- 字符串匹配算法
字符串匹配算法:就是给定两个串,查找另一个串是否在主串里面,在这里,我们讨论的时候主要用字符串来实现。什么是串?由零个或多个字符组成的有序序列:‘abcdef’串的长度:串中字符的数目成为串的长度空串:什么都没有;“ ”有空格的叫做空格串子串:子串包含空串和串本身子串在主串中的位置:一、BF算法https://blog.csdn.net/deepseazbw/...转载 2019-01-09 10:27:48 · 2765 阅读 · 0 评论 -
Java -- 银行家算法
参考:ttps://blog.csdn.net/u014634576/article/details/52600826一、测试类package operation.main;import java.util.Scanner;/** * @program: sadd * @description: 测试类 * @author: * @create: 2019-01-02 14:1...原创 2019-01-09 10:59:02 · 2543 阅读 · 3 评论 -
《剑指Offer》-- 链表中倒数第K个节点
题目:输入一个链表,输出该链表中倒数第k个结点。思路:判断头结点为空,或者k值小于等于 0,不符合,返回null;定义一个整型变量 count1 为 0,进行计数,计算链表长度;判断k值是否超过链表长度,若超过,则返回null;定义一个整型变量 count2 为 0,将cur重置为头结点,进行计数,一直遍历到(count2 - k +1)这正是倒数第k个节点;返回节点。图示:...原创 2019-03-20 20:19:56 · 199 阅读 · 0 评论 -
《Java并发编程的艺术》-- 并发编程的挑战
并发编程遇到的问题及解决方案:上下文切换问题:CPU通过给每个线程分配CPU时间片来实现多线程执行代码,时间片是CPU分配给各个线程的时间,由于时间片非常短,CPU不停的切换线程执行,让用户感到多个线程是同时执行的。当一个任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便再加载到这个任务时能继续执行。任务从保存到加载的过程,叫做上下文切换。结论1:上下文切换...原创 2019-08-07 14:47:03 · 437 阅读 · 0 评论 -
Linux -- 定位Java进程占用系统资源使用率高的问题(CPU和内存使用率)
首先我们来认识一些Linux命令:ps : 查看进程的PID号;top -p + PID号 :查看指定PID进程的资源使用情况;top -Hp + PID号 :查看指定PID进程里面所有线程的调用栈信息jstack + 进程PID号: 输出当前Java进程所有线程的调用栈信息;进行定位:使用top命令查看占用资源最高的是哪个进程,记录它的PID号;使用 top -Hp + PID...原创 2019-08-07 09:05:16 · 513 阅读 · 0 评论 -
Linux -- 解决死锁问题
使用管理员权限执行命令(因为我的.java文件是由管理员创建的);使用 jps 命令查询进程ID,jstack 命令查询进程的堆栈信息;找到 waiting 、wait for字段;根据指引找寻 .java文件中的对应行,并根据具体情况解决死锁总结:jstack打印java进程所有线程的调用栈信息+相应的源代码的分析;寻找 wait for… + 等待的锁资源的地址,wait...原创 2019-08-07 08:42:35 · 1524 阅读 · 0 评论 -
《剑指Offer》-- 数组中出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。**解题思路:**利用hashMap存储键值对的特性, key记录数字,value记录每个数字出现的次数,具体实现如下:代码实现:import java.util.HashM...原创 2019-07-07 09:25:45 · 124 阅读 · 0 评论 -
Java--线程池
【1】参考《Java并发编程的艺术》原创 2019-05-07 18:27:52 · 143 阅读 · 0 评论 -
Java -- ConcurrentHashMap相关的几个问题
注:前四题都是在JDK1.7的基础上进行解答,部分图是从一些大牛博客上参考的。参考资料:https://blog.csdn.net/jjc120074203/article/details/78625433《Java并发编程的艺术》 方腾飞 魏鹏 程晓明1、ConcurrentHashMap底层数据结构是什么?答:底层数据结构是:数组+数组+链表解释:底层结构图解(图1-1):...原创 2019-04-25 22:46:18 · 302 阅读 · 0 评论 -
Java -- IO流 之 SequenceInputStream
转载地址:https://mp.weixin.qq.com/s/C1a2ig6poXch4bdYocVStwhttps://mp.weixin.qq.com/s/_zWUFv_IZ5Jb8OUMmpO75ASequenceInputStream类在Java中IO流的体系结构图的位置为什么要引入SequenceInputStream类? 在软件的日常运行中,会生成一些日志文件,记录...转载 2019-03-28 21:11:50 · 410 阅读 · 0 评论 -
《剑指Offer》-- 从上往下打印二叉树
题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:将树分为若干个子树,每个子树都是由头节点和左右子节点构成;遍历一个小的子树,判断是否有头节点,再进行递归就可以了。import java.util.ArrayList;class TreeNode { int val = 0; TreeNode left = null; TreeNode ...原创 2019-03-31 11:41:50 · 133 阅读 · 0 评论 -
《剑指Offer》-- 旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。Java代码:import java.util.ArrayList;public class Solution...原创 2019-03-18 18:14:09 · 172 阅读 · 0 评论 -
《剑指Offer》-- 包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。Java 代码:import java.util.Stack;public class Solution { int usedSize = 0; int size = 10; int[] elem = new int[size]; publi...原创 2019-03-17 16:50:20 · 167 阅读 · 0 评论 -
《剑指Offer》-- 矩形覆盖
**题目:**我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?由图和数学归纳法可推断出:f(n)来表示种类总数,则f(n) = f(n-1) + f(n-2);通过对公式进行递归,可得出结果。代码:public class Solution { public int RectCover(int targe...原创 2019-03-17 15:56:20 · 149 阅读 · 0 评论 -
《剑指Offer》-- 调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路:创建 数组1 和 数组2;遍历整个 array数组,模2判断奇偶,奇数存在 数组1中,偶数存在数组2中;先将 数组1中的奇数放在 array数组 中,数组2 中的偶数排在后边;用 len1 len2 分别...原创 2019-03-20 20:37:59 · 243 阅读 · 0 评论 -
Java -- 多线程文件复制
题目描述:实现文件复制功能多线程实现文件从一个目录复制到另一个目录@param sourceFile : 给定源文件路径名@param desPath : 复制点文件路径代码:package fileio20180924;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFo...转载 2018-09-25 16:03:33 · 693 阅读 · 0 评论 -
Synchronized、 Volatile、ReentrantLock
Synchronized的实现原理:synchronized 的使用方式有如下几种:线程状态及状态转换:synchronized实现何时使用了自旋锁?在线程进入 ContentionList 时,即第一步操作前,线程在进入等待队列时首先进行自旋锁尝试获得锁,如果不成功再进入等待队列。synchronized原理-Java虚拟机的同步(Synchronization)是基于进入和退...转载 2018-09-19 15:57:32 · 1244 阅读 · 0 评论 -
Java--堆排序
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。大根堆: 给一组序列...原创 2018-05-18 14:09:17 · 121 阅读 · 0 评论 -
Java---内部类
Java内部类Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类。内部类就像一个实例成员一样存在于外部类中。内部类又分为:静态内部类、实例内部类、本地内部类、匿名内部类四种。静态内部类 当一个内部类前面用static修饰时,我们称之为静态嵌套类或静态内部类。package ZaiJiaYou;class OuterClass1{ private i...原创 2018-04-27 16:31:02 · 130 阅读 · 0 评论 -
Java--快速排序优化:聚集元素法
找基准、第一次快速排序;//找基准 public static int partion(int[] array,int low,int high){//一次快排 int tmp=array[low]; while(low < high){ //从后找 w...原创 2018-05-18 13:09:44 · 623 阅读 · 0 评论 -
Java -- 链式队列和优先队列
链式队列 什么是链式队列? 数据结构的基本问题。队列 是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。一般队列的存储结构是顺序存储,当队列的存储结构是链式存储结构时(即队列中每个元素都包含一个指向其后继的指针,最后一个元素指针为null),就是链式队列,和...原创 2018-05-11 18:17:20 · 288 阅读 · 0 评论 -
Java--快速排序
**快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。**输入为:public static void main...原创 2018-05-17 16:30:24 · 153 阅读 · 0 评论 -
Java--循环队列
队列的特点:先进先出。 1、循环队列完整代码:package ShunXuZhan;/* * 循环队列 * 先进先出 * 浪费一个数据单元 来判断是否为满 * * */class QueueLink{ int elem[];//创建一个数组变量 int front;//队头 int rear;//队尾 int usedSize=0;//当前队...原创 2018-05-09 14:44:51 · 269 阅读 · 0 评论 -
Java -- 中缀表达式转后缀表达式
中缀表达式 转 后缀表达式 举例示意图: 全部代码:package ShunXuZhan;import java.util.Arrays;class Constant { /** * 表示加法 */ public static final int OPERATORS_PRIO_PLUS_IN = 4; //栈内加法 public s...原创 2018-05-09 12:37:28 · 1090 阅读 · 0 评论 -
Java 链表结点插入
PS:链表是一种数据结构,而数据结构就是一种存放数据的方式。为什么需要链表? 我们知道,数组也可以存储数据,那么为什么还需要链表呢?接下来,我们来看看数组 和链表的区别: 1、数组就像身上编了号站成一排的人,要找第10个人很容易,根据人身上的编号很快就能找到。但插入、删除慢,要往某个位置插入或删除一个人时,后面的人身上的编号都要变。当然,加入或删除的人始终末尾的也快。2、链表就...原创 2018-05-01 15:18:48 · 10160 阅读 · 1 评论 -
Java 一维数组
数组为什么特殊? 数组与其他种类的容器之间的区别有三方面:效率、类型和保存基本类型的能力。Java中,数组是一种效率最高的存储和随机访问对象引用序列的方式。数组就是一个简单的线性序列,这使得元素访问非常快速。 一维数组的三种定义方式: int[] array1={1,2,3,4,5,6,7,8,9}; int[] array2=new int[]{1,2,3,4,5};...原创 2018-04-13 16:58:04 · 193 阅读 · 0 评论 -
Java 操作符
PS:在最底层,Java中的数据是通过使用操作符来操作的。操作符的使用及其优先级 以下为完整代码(1):package cxcf;public class Day3 { public static boolean fun1(int val){ System.out.println("val<1"); return val<...原创 2018-04-07 13:37:17 · 148 阅读 · 0 评论