JAVA
文章平均质量分 71
编程小白AA
热爱编程、热爱生活!
展开
-
Shiro
Shiro基础权限管理1.1 什么是权限管理?基本上涉及到用户的系统都需要进行权限管理, 权限管理属于系统安全的范畴, 权限管理实现对用户访问系统的控制按照安全规则或则是安全策略, 控制用户可以访问且只能访问自己被授权的资源权限管理包括用户身份验证和授权两部分, 简称认证授权, 对用户进行身份认证,认证通过后才可以访问可以访问的资源起步<dependency> <groupId>org.apache.shiro</groupId&g原创 2021-01-17 22:22:42 · 2230 阅读 · 0 评论 -
Java线程安全问题
线程安全1. 什么时候数据在多线程并发的条件下会存在线程安全问题?1.1. 多线程并发环境下1.2. 数据共享1.3. 涉及数据的修改操作2. 如何解决线程安全问题?线程排队执行,不能并发,也就是"线程同步机制"3. 线程同步涉及到两个模型:异步编程模型: 线程t1和线程t2各自执行,多线程并发执行,这种称为"异步编程模型"同步编程模型:线程t1和线程t2在执行时,t1需要等待t2执行结束,才能执行,或者t2需要等待t1执行结束才能执行,线程之间存在了等待原创 2020-09-02 15:28:28 · 235 阅读 · 0 评论 -
Java多线程的常用方法
1. 获取线程的名字:String name = currentThread.getName();2. 设置线程的名字:currentThread.setName(“t1”);3. 获取当前线程:Thread currentThread = Thread.currentThread();4. 唤醒线程t.interrupt();package Demo;public class ThreadMethod { public static void mai原创 2020-09-01 21:13:13 · 191 阅读 · 0 评论 -
Java多线程
多线程1. 什么是进程? 什么是线程?进程是一个应用程序线程是一个进程中的执行场景/执行单元一个进程可以启动多个线程进程和进程之间的内存不共享在Java种,线程和线程之间,堆内存和方法区共享,栈内存独立,一个线程一个栈空间多线程可以提高应用程序的执行效率2. 实现多线程的两种方式① 继承java.lang.Thread类,重写run方法package Demo;public class Thread01 { public static vo原创 2020-09-01 15:21:43 · 177 阅读 · 0 评论 -
Java IO
什么是IO流?I: InputO: Output通过IO流可以完成硬盘的读写操作IO流的分类按照流的方向进行分类读入内存: 输入(Input)写到硬盘: 输出(Output)按读取方式进行分类字节流: 按字节方式,一次读取1个字节(8个二进制位),这种流是万能的,能读文本,视频,音乐等字符流: 按照字符方式读取数据,一次读取1个字符,这种流只能读取文本文件综上所述,流分为:输入流、输出流、字节流、字符流Java的四大流原创 2020-08-30 08:59:45 · 179 阅读 · 0 评论 -
Java HashMap
HashMapHashMap的key就是HashSet集合,无序、不可重复HashMap底层是一个Hash表,属性有key,value,hash,next数组中每个元素中的单向链表的每个节点的hash值是相同的,该hash值就是该单向链表所在的元素的 下标,hash值是通过调用key的hashCode()方法经过hash算法得到的.HashMap的put(k,v)方法实现原理:1. 当调用put(k,v)时,会将传入的key和value封装到Node对象中2.再调用key的hashCod原创 2020-08-26 17:06:18 · 402 阅读 · 0 评论 -
Java集合特性及继承结构图
Java集合特性ArrayList: 底层是数组LinkedList: 底层是双向链表Vector: 底层也是数组,但是是线程安全的,效率低,使用少HashSet: 在创建HashSet时,底层其实是new了一个HashMap,往HashSet中添加数据,等同于添加到了HashMap的key中TreeSet: 底层是TreeMap,往TreeSet中添加数据,等同于添加到了TreeMap中HashMap: 底层是Hash表HashTable: 底层也是Hash表,但原创 2020-08-23 20:16:38 · 227 阅读 · 0 评论 -
Java自定义异常
自定义异常StackExceptionpackage simulationStack;public class StackException extends Exception{ public StackException() {super();} public StackException(String message) {super(message);}}模拟pop方法弹栈,当栈为null时抛出自定义异常StackExceptionpublic Object pop().原创 2020-08-22 17:14:19 · 163 阅读 · 0 评论 -
Java Random
package Demo;import java.util.Arrays;import java.util.Random;public class MyRandom { public static void main(String[] args) { //创建随机数对象 Random random = new Random(); //生成int取值范围内的随机数nextInt() System.out.println(random.nextInt()); .原创 2020-08-22 11:02:37 · 200 阅读 · 0 评论 -
Java BigDecimal
BigDecimal属于大数据,精度极高,多用于处理财务软件面试题:处理大数据或财务数据用什么类型?BigDecimalpackage Demo;import java.math.BigDecimal;/** * * BigDecimal属于大数据,精度极高,多用于处理财务软件 * * 面试题: * 处理大数据或财务数据用什么类型? * BigDecimal */class MyBigDecimal { public stat..原创 2020-08-22 10:35:49 · 158 阅读 · 0 评论 -
Java包装类型
关于装/拆箱 //int -> Integer: 装箱 Integer integer = new Integer(100); //Integer -> int: 拆箱 integer.intValue();基本数据类型包装类型bytejava.lang.Byteshortjava.lang.Shortintjava.lang.Integerlongjava.lang.Longfloatjava.lang.Float原创 2020-08-20 22:44:06 · 205 阅读 · 0 评论 -
Java StringBuffer
如果需要大量的字符串拼接,建议使用JDK的:java.lang.StringBufferjava.lang.StringBuilderStringBuffer底层StringBuffer底层是byte数组,String底层其实也是byte数组但是被final修饰,不可变,而StringBuffer是可变的,如果容量不足将会进行扩容操作(数组copy)如何优化StringBuffer的性能:在创建StringBuffer的时候尽量给一个初始化容量,减少底层数组的扩容,估计一原创 2020-08-20 21:55:14 · 240 阅读 · 0 评论 -
Java String常用方法
package Demo;public class CommonMethd { public static void main(String[] args) { //返回指定索引位置的字符 //char charAt(int index) String str1 = "我是中国人"; System.out.println(str1.charAt(1)); //是 //当前面的字符串包含指定的char值序列时返回true。 //boolean contains(原创 2020-08-20 20:48:00 · 208 阅读 · 0 评论 -
Java选择排序
选择排序:首先找到元素中最小的那个元素,其次,将它和第一个元素交换位置,再次,在剩下的元素中找到最小的元素和数组中第二个元素交换位置,如此往复,直到数组排序(每次从待排序元素中选择最小者或最大者)。package sortAlg;import java.util.Arrays;public class SelectionSort { public static void main(String[] args) { int[] array = {5,8,44,12,6,77,4};原创 2020-08-18 12:00:01 · 169 阅读 · 0 评论 -
Java冒泡排序
冒泡排序两层for循环的含义第一层: 控制排序的轮数第二层: 控制每一轮里的每一个元素比较基本理念: 将两个相邻的元素进行对比(以从大到小为例), 如果前面的元素大于后面的元素, 那么将两个元素互换位置,以此类推,最后形成一个有序列表列如, 有一个array数组{3,5,1}, 需要将3和5进行比较, 3<5不需要交换位置,再比较5和1, 5>1,交换位置形成{3,1,5},此时进入第二轮循环,3>1交换位置,3<5不变排序完成最终得出: {1,3,原创 2020-08-17 03:46:22 · 228 阅读 · 0 评论 -
Java数组
一维数组1. Java数组是一种引用数据类型,不属于基本数据类型,其父类时Object2. 数组是一个容器,可以容纳多个元素3. 数组可以存储“基本数据类型”,也可以存储“引用数据类型”4. 因为数组时引用数据类型,所以是存储在“堆”内存当中5. 如果数组中存储的是Java对象,那麽实际存储的是“引用(内存地址)”6. Java中数组一旦创建,长度不可变7. 数组有一维数组、二维数组、多维数组8. 所有数组对象都有length属性,其作用是返回该数组的长度原创 2020-08-16 22:09:51 · 173 阅读 · 0 评论 -
Java访问控制权限
访问控制权限访问控制权限都有哪些?publi 公开的protected 受保护的默认private 私有的范围修饰符本类中同包下子类(继承关系)任意位置public√√√√protected√√√×默认√√××private√××× <tr> <td>public</td> <td>√</td> <td>原创 2020-08-16 10:22:49 · 156 阅读 · 0 评论 -
mybatis缓存
Mybatis一级缓存1、一级缓存的生命周期有多长?1. 一级缓存只作用于SqlSession中,SqlSession关闭,缓存消失,缓存底层是map集合,key是sqlid和sql语句value是查询的数据,mybatis第一次执行查询,如果缓存没数据,会去数据库查询,并且将查出的数据写入到缓存,第二次再查询时,根据sqlid和sql语句和map的key进行判断缓存中是否有数据,如果sqlid与sql语句与底层的key相对应,那么就取出map的value(value就是数据),如果value为nu原创 2020-08-14 21:21:39 · 186 阅读 · 0 评论 -
mybatis多对多查询
多对多表结构studnetcoursemiddle实体-科目package com.chuangmei.mybatis.beans;import java.util.Set;public class Course { //Commodity private Integer cid; private String cname; //关联属性 private Set<Student> students; /** *原创 2020-08-14 21:07:37 · 159 阅读 · 0 评论 -
mybatis自连接
表结构实体类package com.chuangmei.mybatis.beans;import java.util.Set;public class NewsLabel { //新闻栏目 private Integer id; private String name; //关联属性 private Set<NewsLabel> children; /** * @return the id */ public Integer getId() { ret原创 2020-08-14 20:56:05 · 742 阅读 · 1 评论 -
mybatis一对多连接查询
实体countrypackage com.chuangmei.Mybatis.Stu;import java.util.Set;public class Country { private Integer cid; private String cname; //关联属性 private Set<Minister> ministers; /** * @return the cid */ public Integer getCid() { return原创 2020-08-14 20:39:12 · 377 阅读 · 0 评论 -
mybatis多对一查询
多方:ministerminister中有country的关联属性一方:country查询:<!-- 连接查询 --> <resultMap type="Minister" id="MinisterMapper"> <id column="mid" property="mid"/> <result column="mname" property="mname"/> <association p原创 2020-08-14 20:25:54 · 162 阅读 · 0 评论 -
Java接口和抽象方法
抽象方法抽象类的子类必须重写/覆盖/实现抽象类中的抽象方法,否则编译无法通过问题: 没有方法体的都是抽象方法吗?错误 Object中的public native int hashCode();native: 表示调用本地JVM程序(C++的动态链接库(dll))public abstract void abstractMethod();没有方法体,以分号结尾在修饰符后面用abstract进行修饰抽象方法必须出现在抽象类中,但是抽象类中不一定存在抽象方原创 2020-08-09 21:11:21 · 298 阅读 · 0 评论 -
抽象方法
抽象方法1. 抽象类的子类必须重写/覆盖/实现抽象类中的抽象方法,否则编译无法通过问题: 没有方法体的都是抽象方法吗?错误 Object中的public native int hashCode();native: 表示调用本地JVM程序(C++的动态链接库(dll))public abstract void abstractMethod();没有方法体,以分号结尾在修饰符后面用abstract进行修饰抽象方法必须出现在抽象类中,但是抽象类中不一定存在抽象原创 2020-08-06 21:35:18 · 495 阅读 · 0 评论