- 博客(65)
- 收藏
- 关注
原创 Char和Varchar的区别
1、定长和变长char 长度固定,varchar长度可变。char如果插入的长度小于定义长度时,则用空格填充;varchar小于定义长度时,还是按实际长度存储,插入多长就存多长。因为其长度固定,char的存取速度还是要比varchar要快得多,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以会占据多余的空间,可谓是以空间换取时间效率。varchar则刚好相反,以时间换空间。2、存储的容量不同char ,最多能存放的字符个数 255,和编码无关。varchar.
2021-07-25 13:50:37
438
原创 ArrayList和LinkedList区别(面试标准答案)
查询:如果是指定下标的查询,arraylist的速度是快于linkedList的;因为链表的话他需要遍历我们这个链表查询指定的元素。但我们linkedList查询第一个和最后一个元素的速度还是比较快的,因为在linkedlist的内部有2个属性first 和last,一直记录着我们这个链表第一个和最后一个元素的位置在哪里。添加:arrylist把元素添加到尾部,但可能会涉及扩容,所以数组添加的时候不一定是最快的。还有就是添加一个元素到指定的位置,会涉及数组元素位置的移动。添加的时候整体的性能还...
2021-07-25 10:05:54
358
3
原创 hashmap和concurrenthashmap源码分析(1.7/1.8)
JDK 1.8 HashMap 的 hash 方法源码: static final int hash(Object key) { int h; // key.hashCode():返回散列值也就是hashcode // ^ :按位异或 // >>>:无符号右移,忽略符号位,空位都以0补齐 return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16)
2021-07-25 10:02:28
238
3
原创 数据结构与算法02-稀疏数组的介绍转换以及Java代码实现
了解:基本介绍:当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:记录数组一共有几行几列,有多少个不同的值。 把具有不同的值的元素的行列及值记录在一个小规模的数组(稀疏数组)中,从而缩小程序的规模。看到这里没关系咱们继续往下看!!!现在稍微清楚了吧!!!稀疏数组转换的思路分析:二维数组转稀疏数组的思路:遍历原始的二维数组,得到有效数据的个数sum 根据sum就可以创建稀疏数组sparseA...
2021-02-20 22:03:35
146
原创 数据结构与算法01-线性结构和非线性结构
线性结构:线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。 线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式存储结构(链表)。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续(地址连续)的。 链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放 数据元素以及相邻元素的地址信息。 线性结构常见的有:数组,队列,链表和栈。非线性结构:常见的有:二维数组,多维 数组,广义表,树结构,图结构。...
2021-02-20 20:36:54
77
原创 校招面试之单例模式
Singleton:在java中即指单例设计模式。单:唯一;例:实例。一、要点:一是某个类只能有一个实例 (构造器私有化) 二是它必须自行创建这个实例(含有一个该类的静态变量来保存这个唯一的实例) 三是它必须自行向整个系统提供这个实例(对外提供获取实例对象的方法:(1)直接暴露(2)用静态变量的get方法获取)二、几种常见形式:饿汉式:直接创建对象,不存在线程安全问题。1.直接实例化饿汉式(简洁直观)://饿汉式://在类初始化的时候直接创建实例对象,不管你是否需要这个对象/
2021-02-15 18:21:43
152
2
原创 SpringBoot-配置
一、Spring Boot 入门MAVEN设置;给maven 的settings.xml配置文件的profiles标签添加<profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <prope...
2021-02-03 15:18:22
175
原创 面向对象部分
一.三大特征封装 继承 多态:程序中允许出现重名现象,多态体现:重载+重写。重载与重写的区别:1)重写:发生在父子类中,方法名相同,参数列表相同,返回值相同,权限修饰符不能小于被重写方法的修饰符。遵循“运行期”绑定,根据引用指向对象的类型调用方法。运行时确定如何调用称为动态绑定(晚绑定)多态体现(动态绑定)2)重载:发生在一个类中,方法名相同,参数列表不同(参数个数,参数类型),方法体一般也不同,与返回值无关,与权限修饰符无关。遵循“编译期”绑定,根据引用的类型调用方法。编
2020-11-26 16:37:40
88
原创 String的特性
一.finalfinal修饰变量:变量的地址不能被改变(不能被重新赋值)。final修饰方法:该方法不能被重写。final修饰类:该类不能被继承。二.String为什么被设计为不可变的String的源码:public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {/** The value is used for character .
2020-11-23 15:55:33
186
1
原创 JAVA中重载与重写的理解
1.重写(Override)字面意思上来看,就是在子类中把父类的方法重写一遍,子类继承了父类的原有的方法,但子类有时候不想原封不动的继承父类的方法,所以在方法名,参数列表和返回值类型相同的条件下对方法体进行修改即重写。注意子类函数的访问修饰权限不能少于父类的。public class Father { public static void main(String[] args) { Son s = new Son(); s.eat();.
2020-11-22 11:26:43
123
原创 线程与多线程
一.线程与进程1.并发与并行并发:指两个或多个事件在同一时间段内发生的。(交替执行)并行:指两个或多个事件在同一时刻发生的。(同时执行)2.线程与进程进程:指正在运行中的应用程序,每个进程都有一个独立的额内存空间,进程是程序的一次执行过程,是系统运行程序的基本单位。每当用户启动一个进程时,操作系统为该进程分配一个独立的内存空间,让进程在这个独立内存空间运行。线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。3.主线程:jvm执行main方.
2020-11-18 18:26:31
98
原创 java中值传递和引用传递区别
一:基本数据类型和引用数据类型1.基本类型的变量保存原始值,即变量就是数据本身。常见的基本数据类型:byte,short,char,int,long,float,double,boolean.2.引用数据类型的变量保存引用值,引用值就是对象所在内存空间的“首地址”,通过对这个引用值来操作对象。常见的引用类型:类类型,接口类型,数组。二.值传递和引用传递1.值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。publi.
2020-11-17 17:15:09
433
2
原创 JAVA中装箱和拆箱的理解
装箱:是通过调用包装器类的valueOf方法实现的。例:int 装箱的时候会自动调用Integer的valueOf(int)方法拆箱:是通过调用包装器类的xxx.value方法实现的,xxx代表对应的基本数据类型。例:Integer拆箱的时候会自动调用Integer的intValue方法。注意:Integer integer100=null;int int100=integer100;解析:能通过编译但运行时会抛出空指针异常。integer100为Intege...
2020-11-17 16:46:29
226
原创 Object方法
java中Object(java.long)主要的方法如下:1.clone 返回的对象为浅拷贝clone()方法是一个被声明为native 的方法,不是java的原生方法,具体的实现由c/c++实现。目的就是创建并返回此对象的一个副本。形象点说:这有一副漂亮的画,你也想要个一模一样的,就可以调用此方法像变魔术一样变出来一模一样的画。但从此刻起,之前的那副画如果进行了新的改动,与你克隆出来的画没有任何关系了。你克隆出来的对象变不变完全取决于你对克隆出来的画有没有进行过什么操作。...
2020-11-15 11:47:22
240
原创 java八大基本数据类型
Java的八大数据类型:字符类型:char (2个字节,16位,存储Unicode码) 对应的封装器类:Character布尔类型:boolean(1个字节,只有true和false两个取值) 对应的封装器类:Boolean数值类型:byte:(1个字节,8位,存放的数据范围-128-127) 对应的封装器类:Byteshort:(2个字节,16位) ...
2020-11-14 22:43:05
90
原创 动态数组(数据结构与算法)
线性结构(要保证元素的连续性)+顺序结构 最终的实现类可以是:线性表 栈 双端栈 队列 循环队列 双端队列 JAVA内置数组的特点:数组的长度一旦确定则不可更改 数组只能存储同一类型的数据 数组中每个存储空间地址是连续且相等的 数组提供角标来访问元素将静态数组封装成动态数组,就可以创建对象,通过add(),remove(),get(),set()...等方法 对数组进行操作。动态数组就是顺序存储结构聚义实现的核心思想。...
2020-11-09 15:47:14
122
原创 Get请求和Post请求的区别
标准答案 但不是面试官想要听到的答案:GET在浏览器回退时是无害的,而POST会再次提交请求。 GET产生的URL地址可以被Bookmark,而POST不可以。 GET请求会被浏览器主动cache,而POST不会,除非手动设置。 GET请求只能进行url编码,而POST支持多种编码方式。 GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。 GET请求在URL中传送的参数是有长度限制的,而POST么有。 对参数的数据类型,GET只接受ASCII字符,而POST没有限.
2020-08-06 18:38:38
129
原创 Servlet的生命周期
Servlet生命周期就是servlet从创建到销毁的过程: 创建servlet实例,当servlet实例化后,将调用这个对象的init()方法进行初始化,再调用对象的service()方法来处理请求,并返回处理结果,在调用service之前,需保证init初始化已被成功执行,当需要释放servlet的时候,调用对象的destroy()方法来结束,并释放资源。Servlet的生命周期有以下四个阶段:加载和实例化 初始化 请求处理 服务终止1.加载和实例化Servlet...
2020-08-06 17:48:29
116
原创 Mybatis从创建到获取Mapper的源码分析
mybatis从SqlSessionFactoryBuilder构建SqlSessionFactory,再通过SqlSessionFactory获取SqlSession,再获取Mapper对象过程。1.获取传入的xml文件先调Resources的getResourceAsStream方法,传入mybatis-config.xml文件 然后调用getResuorceAsStream(ClassLoader loader,String resource)方法 这个方法里面再调用cla..
2020-08-02 22:23:12
154
原创 使用maven自动生成代码实现多表(四表)联查
User类 一个user对应一个roleRole类 一个role对应多个userRole 和 menu是多对多关系Menu类 一个menu 对应 多个funFuns类 funs对应一个menu 多对一使用maven自动生成代码之后,只需改动如下地方:db.propertiesjdbc.driverClassName=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/testjdbc.userna..
2020-07-30 11:41:39
682
原创 (Mysql)行级锁,表级锁,乐观锁,悲观锁
总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。
2020-07-19 12:56:57
521
原创 PreparedStatement通用的查询方法
java代码实现:public <T> T query(Class<T> clazz,String sql,Object...args) { T entity =null; PreparedStatement ps=null; try { conn=JDBCUtils.getConnection(); ps=conn.prepareStatement(sql); for(int i=0;i<args.length;i++) { .
2020-07-13 13:44:47
595
原创 Statement 和PreparedStatement 的区别与联系
联系:PreparedStatement 继承自 Statement区别:PreparedStatement 是预编译的,比Statement 的效率高PreparedStatement的优点:①效率高.使用PreparedStatement执行SQL命令时,命令会被数据库编译和解析,并放到命令缓冲区.以后每当执行同一个PreparedStatement对象时,预编译的命令就可以重复使用②代码可读性和可维护性好③安全性好....
2020-07-10 15:01:01
121
原创 抽象类为甚不能创建对象以及接口与抽象类的异同
因为抽象类多用于在同类事物中有无法具体描述的方法的场景,所以不能通过创建对象来实例化这个事物。什么是抽象类:如果一个类中包含抽象方法,那么这个类就是抽象类(abstract class)。注意:只要包含一个抽象方法的类就必须声明成抽象类。 抽象类可以声明方法的存在而不去实现它,被声明的抽象方法不能包含方法体。 抽象类在使用过程中不能被实例化,但是可以创建一个对象使其指向具体子类的一个实例。说到抽象类我们必然想到了接口,那么为甚要有接口?引入接口是因为java中不支...
2020-07-10 14:37:49
704
原创 SQL语句中 查询语句关键字的执行顺序
书写顺序:SELECT--->FROM--->JOIN--->ON--->WHERE--->GROUP BY--->HAVING--->ORDER BY--->LIMIT即SELECT 查询列表.FROM 表 1 【连接类型】 JOIN 表2 ON 连接条件WHERE 筛选条件GROUP BY 分组列表HAVING 分组后的筛选条件ORDER
2020-07-07 16:43:17
339
原创 JDBC代码封装和优化以及JavaBean代码
代码封装:package com.openlab.web;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;//1.使用DriverManager 进行加载驱动 Driver//2.通过驱动的加载拿到连接对象 Connection//3.通过connectio.
2020-07-07 11:21:49
122
原创 数据库sql查询语句练习
1.上述表的建表语句2.给出相应的INSRET语句完成题中给出数据的插入3.以class降序输出student的所有记录(student表全部属性)命令:select * from student order by class desc;4.列出教师所在的单位depart(不重复)。命令: select distinct depart from teacher;5.列出student表中所有记录的name、sex和class列命令: sele...
2020-07-07 11:14:25
593
原创 数据库语句和数据库表常用的操作命令
Mysql的启动与关闭启动 net start mysql 关闭 net stop mysql显示当前服务器版本 SELECT NERSION(); 显示当前的日期 SWLECT NOW(); 显示当前用户 SELECT USER();数据库语句(DDL)查看数据库 show databases;创建数据库 create database demo;查看警告信息 show warnings;查看数据库的编码格式 show create database ...
2020-07-01 20:03:51
235
原创 希尔排序
希尔排序:是第一个突破O(n^2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。时间复杂度:O(n^1.3) 空间复杂度:O(1) 稳定性:不稳定基本思路:(1)先从长度的一半进行分gap=5,表示间距为5.如图所示,(2)因为arr[j-gap]>arr[j],所以交换这两个值。交换之后j往前移动,j-gap也跟着移动,但此时arr[j-gap]处的值为空,接下来该怎么办呢?如图所示(3).
2020-06-29 19:48:29
94
原创 JAVA中ArrayList(线性表)相关方法的实现
package part01.动态数组;import 数据结构接口.List;import java.util.Arrays;import java.util.Comparator;import java.util.Iterator;public class ArrayList<E> implements List<E> { //线性表的默认容量 private static int DEFAULT_CAPACITY = 10; //线性表存.
2020-05-19 17:46:22
147
原创 876.链表中的中间节点(JAVA实现)
分析:定义两个指针,分别为fast和slow指针,fast每次向后走两步,slow 每次向后走一步,直到fast走完,slow下标所对应位置的数就是要返回节点的数。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ...
2020-03-23 21:26:15
122
原创 桶排序(java实现)
简单的桶排序:有限个数字m,每个数字的大小都在1与n之间,则我们可以假设有n个桶,遍历m个数字,将其存入对应的桶中(如数字的值为3,就存入3号桶,桶的值对应存入数字的个数桶号 1 2 3 4 5计数 1 1 2 0 1按照桶的序号将数字倒出来:桶的倒出顺序 数字队列5号桶倒出1个5 54号桶倒出0个4 53号桶倒出2个...
2020-03-17 11:49:30
158
原创 LeetCode编程题汇总(java实现)
26.删除排序数组中的重复项java代码:class Solution { public int removeDuplicates(int[] nums) { int a=0; for(int i=1;i<nums.length;i++){ if(nums[a]!=nums[i]) { ...
2020-03-14 18:52:33
458
原创 辗转相除法java实现
/* * 最大公约数 */ public static int GCD(int a,int b){ int c=a%b; if (c==0) { //如果c=0,直接返回较小的值b return b; }else{ return GCD(b,c); } }...
2020-03-12 22:01:00
1724
原创 JAVA中 面向对象的三大特性
一:封装封装性就是尽可能的隐藏对象内部细节,对外形成一道边界,只保留有限的接口和方法与外界进行交互。封装的原则是使对象以外的部分不能随意的访问和操作对象的内部属性,从而避免了外界对对象内部属性的破坏。可以通过对类的成员设置一定的访问权限,实现类中成员的信息隐藏。A.访问修饰符 private:类中限定为private的成员,只能被这个类本身访问。如果一个类的构造方法声明为p...
2020-03-10 17:58:07
117
原创 LeetCode27.移除元素(JAVA实现)
class Solution { public int removeElement(int[] nums, int val) { int i=0; for(int j=0;j<nums.length;j++){ if(nums[j]!=val){ nums[i]=nums[j]; ...
2020-03-01 15:33:55
76
原创 LeetCode905.按奇偶排序数组(java实现)
题目:代码:class Solution { public int[] sortArrayByParity(int[] A) { int left=0; int right=A.length-1; while(left<right){ if(A[left]%2==1&&A[right...
2020-03-01 15:30:26
118
原创 LeetCode121.卖股票的最佳时期(JAVA实现)
题目:代码:class Solution { public int maxProfit(int[] prices) { int maxProfit=0; for(int i=0;i<prices.length-1;i++){ for(int j=i+1;j<prices.length;j++){ ...
2020-03-01 15:24:54
173
原创 LeetCode1.两数之和(JAVA实现)
题目:代码:class Solution { public int[] twoSum(int[] nums, int target) { if (nums == null || nums.length <= 1) { return null; } for(int i=0;i<...
2020-03-01 15:22:55
115
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人