- 博客(39)
- 收藏
- 关注
原创 HTML基础
英文全称中文全称为超文本标记语言。超文本标记语言是标准通用标记语言下的一个应用,也是一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分。网页文件本身是一种文本文件,通过在文本文件中添加标记符,可以告诉浏览器如何显示其中的内容(如:文字如何处理,画面如何安排,图片如何显示等)。浏览器按顺序阅读网页文件,然后根据标记符解释和显示其标记的内容,对书写出错的标记将不指出其错误,且不停止其解释执行过程,编制者只能通过显示效果来分析出错原因和出错部位。
2023-08-29 10:58:55 147
原创 ThreadLocal的实现原理
ThreadLocal是什么ThreadLocal,即线程本地变量。如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地拷贝,多个线程操作这个变量的时候,实际是操作自己本地内存里面的变量,从而起到线程隔离的作用,避免了线程安全问题。ThreadLocal内存结构图由内存结构图可以看出:每一个Thread对象中都持有一个ThreadLocalMap的成员变量。ThreadLocalMap内部维护了一个Entry数组,每个Entry代表一个完整的对象,ke
2021-10-07 15:08:43 177
原创 Java字符串和字符串池
String的特性不变性常量池优化final关键字修饰String的不可变String是不可变的,对于已经存在的String对象的修改都是重新创建一个新的对象然后把值保存进去。String为什么要设计成不可变的?便于实现字符串池。使多线程安全。避免安全问题。加快字符串处理速度。String的常量池优化JVM为了减少内存开销和提升性能,避免字符的重复创建,其维护了一块特殊的内存空间,即字符串池。当需要使用字符串时,先去字符串池中查看该字符是否存在,如果存在则直接使用;若不存在
2021-09-18 19:52:19 127
原创 Spring集成Mybatis
创建步骤1.新建maven项目2.加入maven的依赖1)spring的依赖2)mybatis的依赖3)MySQL的驱动4)spring的事务的依赖5)mybatis和spring集成的依赖:mybatis官方提供的,用来在spring项目中创建mybatis的SqlSessionFactory dao对象的3.创建实体类4.创建dao接口和mapper文件5.创建mybatis配置文件6.创建service接口和实现类,实现类的属性是dao7.创建spring的配置文件:声明myb
2021-09-17 09:56:31 153
原创 初识AOP
什么是AOP?在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP的术语连接点:类里的哪些方法可以被增强,这些方法被称为连接点。切入点:实际被增
2021-09-15 23:38:29 213
原创 Spring注解
在配置文件中添加组件扫描器在Spring配置文件beans.xml中加入组件扫描器,代码如下:<context:component-scan base-package="cqucc.pojo" />base-package属性对应值为需要扫描的包名。类上添加注解在类上添加注解,可以让组件扫描器发现添加注解的类,Spring容器即可创建对应类的对象。类上添加的注解如下:@Componet:基本注解,标识了一个受Spring管理的组件。@Respository:标识持久层的组件。
2021-09-14 18:10:34 123
原创 初识Spring
什么是SpringSpring是Java EE编程领域的一个轻量级开源框架,该框架由一个叫Rod Johnson的程序员在 2002 年最早提出并随后创建,是为了解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架。Spring是一个开源容器框架,它集成各类型的工具,通过核心的Bean factory实现了底层的类的实例化和生命周期的管理。在整个框架中,各类型的功能被抽象成一个个的 Bean,这样就可以实现各种功能的管理,包括动态加载和切面编程。Spring的特点是什么(1)方便解耦,简化开发通过
2021-09-13 19:35:42 251 1
原创 jQuery的选择器
选择器选择器允许用户对HTML中的元素组或单个元素进行操作,它可以让开发者使用CSS语法快速地对页面进行设置。合理地使用jQuery选择器,可以提高我们的开发效率。基本选择器1.标签选择器:根据给定标签名匹配元素。$("标签名")2.类选择器:根据给定的标签的class匹配元素。$(".类名")3.id选择器:根据给定的标签的id匹配元素。$("#id名")4.并集选择器:同时匹配多个标签元素,多个元素用 , 分隔。$("元素1,元素2...")5.交集选择器:匹配指定的cla
2021-09-07 20:35:18 127
原创 JavaScript实现简易计算器
完成样式完成样式如图,计算器支持一般的加减乘除。C:清屏<-:退格+/-:正负转换H:历史记录(暂未完善)实现函数和界面此计算器中不包括历史记录,需要实现以下函数:clickBtn():用于传递当前按键值的函数。display():用于显示输入字符和显示结果的函数。clearRes():用于清空结果和已输入字符的函数。backSpace():用于实现退格操作的函数。convert():用于实现反转正负的函数。在此计算器中,每一个按键都是一个div,数字按键、小数点按
2021-09-06 19:17:23 703 1
原创 JavaScript实现复选框全选
复选框全选在JavaScript中,我们可以利用标签属性name可以重复的特性来实现批量修改name属性值相同的标签属性值。这是因为有着重复name属性的标签是使用一个数组来表示的,只需要获取到该数组,再对数组进行遍历,然后改变每一个数组元素的checked状态即可实现复选框全选。运行如图,当选中第一个全选的选项时,其它选项也会被选中;当取消选中时,其它选项也会一同取消选中。代码如下:<!DOCTYPE html><html> <head> <me
2021-09-06 18:51:00 1110
原创 JSP+Servlet实现上传文件
准备工作1.使用Maven下载commons-fileupload组件和commons-io依赖(也可直接导入jar包)。commons-fileupload:<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --><dependency> <groupId>commons-fileupload</groupId> <arti
2021-09-03 14:39:34 349
原创 MySQL索引优化
有索引但未被用到的情况尽量避免Like的参数以通配符开头,否则数据库引擎会放弃使用索引而进行全表扫描。where条件需要符合最左前缀原则。尽量避免使用 != 或 <>操作符,否则数据库引擎会放弃使用索引而进行全表扫描。使用 < 或 > 会比较高效。尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描。应尽量避免在where子句中使用or来
2021-08-23 21:42:59 141
原创 Hash冲突
什么是Hash冲突在Hash表中,Hash函数进行计算时,对应不同的关键字可能获得相同的Hash地址,即 key1≠key2,但是f(key1)=f(key2)。这种现象就是冲突,而且这种冲突只能尽可能的减少,不能完全避免。为了解决这种冲突,我们常用四种方法来解决:开放地址法再哈希法链地址法建立公共溢出区法开放地址法所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。开放地址法公式为:fi(key) = (f(key)+
2021-08-16 20:42:05 90
原创 数据库三范式
数据库三范式为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构清晰的。要想设计一个结构合理的关系型数据库,必须满足一定的范式。关系型数据库:指采用了关系模型来组织数据的数据库,关系模型可以简单理解为二维表格模型,用户通过查询来检索数据库中的数据。第一范式:确保每列的原子性第一范式是最基本的范式,如果数据表中所有字段值都是不可分解的原子值,表名数据库满足了第一范式。第一范式的要
2021-08-14 21:33:34 97
原创 Java线程池原理
线程池适用场景Java中经常需要用到多线程来处理一些业务,我们非常不建议单纯使用继承Thread或者实现Runnable接口的方式来创建线程,那样势必有创建及销毁线程耗费资源、线程上下文切换问题。同时创建过多的线程也可能引发资源耗尽的风险,这个时候引入线程池比较合理,方便线程任务的管理。线程池涉及到的几个核心类及接口包括:Executor、Executors、ExecutorService、ThreadPoolExecutor、FutureTask、Callable、Runnable等。使用线程池的优
2021-08-09 21:56:31 110
原创 Java的强引用、软引用、弱引用和虚引用
强引用Java中的最普遍的一个引用,我们使用的大部分引用实际上都是强引用。一个对象如果具有强引用,只要这种引用还存在,就不会被垃圾回收器所回收。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误使程序异常终止,也不会随意回收具有强引用的对象来解决内存不足问题。如:String s = "abc";List<String> list = new ArrayList<>();list.add(s);Object obj = new Object();
2021-08-07 14:47:31 71
原创 Java浅拷贝和深拷贝
对象拷贝Java中的对象拷贝(Object Copy)指的是将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去。假设有一个类S,它有两个对象A和B,分别具有属性a和b,则对对象A进行拷贝操作赋值给对象B就是:B.a = A.a;B.b = A.b;浅拷贝对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据。对于数据类型是引用数据类型
2021-08-04 21:49:34 110
原创 Java引用传递和值传递
值传递在方法的调用过程中,实参把它的实际值传递给形参,此传递过程就是将实参的值复制一份传递到函数中,因为实参和形参再内存上是两个独立的变量,所以方法执行中形式参数值的改变不影响实际参数的值。简单来说值传递中传递的参数是值的拷贝传递。基本数据类型是值传递引用传递在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。实际参数是对象(或数组),这时形参和实参在内存上指向的是同一地址,对形参的改变会影响实参。对形式参数的操作实际上就是对实际参数的操作,这个结果
2021-08-03 20:35:51 84
原创 LeetCode.350:两个数组的交集II
题目思路对于两个数组的交集,其实就是寻找两个数组的相同元素,所以可以使用双指针。将两个数组分别进行排序,然后定义指针i和j,分别指向nums1和nums2的第0个位置。当i所指向的位置元素大于j指向的位置时,i不动,j+1;反之j不动,i+1。当i和j指向的位置元素相等时,证明此数字是两个数组的交集之一,则将它添加进用于存放结果的动态数组。因为两个数组是经过排序的,所以若i和j其中有一个的值大于数组的长度,则退出循环,表示无交集。代码public int[] intersect(int[] nu
2021-08-01 21:29:46 76
原创 LeetCode.11:盛最多水的容器
题目思路定义一个left指针和一个right指针,分别指向数组的第0个元素和最后一个元素,此时right - left就是容器的长。此时我们有了容器的长,如果想让容器的面积更大,则选取的高应该也要尽量更大。left和right指针指向的数组元素就是容器的高。如果left指向的数组元素小于right指向的数组元素,则代表此时right当作容器的高所求出来的面积比left当作容器的高所求出的面积大,则保留right,将left + 1,反之则right - 1。即每次循环都比较left和right的大小
2021-07-29 21:50:27 99
原创 算法:全排列
全排列编写一个函数求解某字符串中所有字符的排列(不包括重复)。例如字符串“ABC”,它的全排列有:ABC ACB BAC BCA CAB CBA思路全排列实际上只需要以下步骤:选择“老大”,即将字符串中的其中一个字符移至字符串最前面,当作此字符串的“老大”。在除了“老大”字符之外的字串中再选择一个“老大”。重复上述步骤,直到字串只有一个字符时,返回上一层,将“老大”更换成没有当过“老大”的字符。如子串中的字符都当过“老大”,则继续返回上一层。过程现在用图片进行举例,使用例子为字
2021-07-23 21:09:13 108
原创 算法:棋盘覆盖问题
棋盘覆盖问题在一个2的k次方乘2的k次方(k > 0)个方格组成的棋盘中,有一个特殊方格和其他的不同。棋盘覆盖问题要求使用4种不同形状的L型骨牌覆盖给定棋盘上除了特殊方格以外的所有方格,且任何L型骨牌不能重叠覆盖。如下图,灰色为特殊方格,其他颜色的L型骨牌加上特殊方格正好可以铺满整个棋盘。思路假设我们要考虑4x4大小的棋盘,且因为此题所给棋盘为正方形、边长一定为偶数,所以可以使用分治法将4x4大小的棋盘划分为4个2x2大小的棋盘来进行处理。此时,每个2x2大小的小棋盘都可以使用一个L型骨
2021-07-19 22:13:53 4464
原创 Java代码实现动态数组ArrayList
ArrayList简介ArrayList是Java集合框架中的一个重要的类,它继承于AbstractList,实现了List接口,是一个长度可变的集合,提供了增删改查的功能。集合中允许null的存在。ArrayList类还是实现了RandomAccess接口,可以对元素进行快速访问。ArrayList有如下特点:底层结构是动态数组线程不同步更擅长做随机访问(遍历)添加和删除元素速度比LinkedList慢定义接口ListList是线性结构的接口,里面定义了该线性结构的一些通用操作并支持泛型
2021-07-16 21:17:29 389
原创 LeetCode.剑指Offer 03.数组中重复的数字
题目解法一因为题目只要求返回其中一个重复元素,所以可以直接使用一层循环来解决问题。在循环前,可以先将数组进行排列,排列后重复元素必然相邻,用下标和下标+1表示两个元素,进行比对,若相等,则为重复元素,可以直接跳出循环进行输出。如下图:代码:class Solution { public int findRepeatNumber(int[] nums) { Arrays.sort(nums); //0 1 2 2 3 3 5 // i i+1
2021-07-12 20:09:15 65
原创 HashMap底层原理(JDK1.7)
HashMap简介HashMap是Java中最常用的集合类框架,是Java语言中非常典型的数据结构,也是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。键值对:Entry(Key , Value)HashMap在获取元素时,可以通过Key来获取Value。HashMap有如下特点:根据键的HashCode值存储数据只允许一条记录的键为null,允许多条记录的值为null(允许null值)线程不安全底层是HashTable(哈希表)遍历无序初始长度为16默认加载因子0.75
2021-07-11 21:48:47 144
原创 Java代码实现DOM解析XML
DOM概述DOM全称为Document ObjectModel,中文名为文档对象模型,是W3C组织推荐的处理可扩展置标语言的标准编程接口。它是一种与平台和语言无关的应用程序接口(API),它可以动态地访问程序和脚本,更新其内容、结构和www文档的风格。DOM是把整个XML文件看成是一个倒挂的树形结构来解析,其中使用的包是org.w3c.dom。XML文件现在有一个文件名为department.xml的XML文件,文件所在位置为Java文件所在的文件夹下,文件内容如下:<?xml ver
2021-07-10 21:22:32 183
原创 Java二叉排序树的代码实现
什么是二叉排序树二叉排序树,又称二叉查找树,是二叉树的一种。它要求:如根结点上有左结点,则左结点的值一定小于根结点如根结点上有右结点,则右结点的值一定大于根结点创建结点类Node创建结点类Node用于表示树内的每个结点。变量value用于存放数据Node类型的left表示左结点Node类型的right表示右结点创建构造方法用来初始化结点的数据域重写toString方法方便输出class Node { public int value; //数据域 public Nod
2021-07-08 22:06:41 150
原创 设计模式:工厂模式
工厂模式概述工厂模式(Factory Pattern)解决的是实例化对象的问题,在某些情况下,需要创建的对象的初始化操作十分复杂,放在构造函数中会影响代码的可读性;亦或是待一次性需要实例化的对象太多,直接实例化的代码会重复执行很多次,影响执行的效率,这时候如果定义一个形同工厂的类专门负责对象的实例化创建,便可以增加代码可读性和复用性。在任何需要生成复杂对象的地方,都可以使用工厂模式。较为简单的对象实例化没必要使用工厂模式,反而会增加系统的复杂度工厂模式分为三种:简单工厂模式工厂方法模式抽象
2021-06-12 16:39:20 70
原创 Java双端队列的代码实现
什么是顺序队列顺序队列是先进先出的数据结构,它是一种特殊的线性表,只能在队头front进行删除操作,只能在队尾rear进行插入操作,所以把进行插入操作的一端称为队尾,进行删除操作的一端称为队头。顺序队列的队头指针front指向队头元素,队尾指针rear指向下一个入队元素的存储位置由于入队和出队操作时头尾指针只会增加不会减小,当rear指向到分配的连续空间之外时,队列无法再插入新元素,被删除元素的空间永远无法被重新利用,这种情况叫队列的“假上溢”现象,即头尾指针前的空间没有使用,但是却显示队列已满。
2021-06-11 17:40:40 1478 1
原创 Java链表的代码实现
什么是链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn
2021-06-10 15:25:05 294 1
原创 Java栈的代码实现
什么是栈栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。(摘自百度百科)栈:先进后出,只在栈顶进行操作栈的基本操作push():将数据压入栈中pop():将栈顶元素弹出peek():不弹出获取栈顶元素isEmpty(
2021-06-09 23:02:26 381
原创 设计模式:单例模式的8种实现方式
定义单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。核心思想:构造方法私有化。原理单例模式的类中有且仅有一个实例被创建,其他的类要使用单例对象时都要通过这个类提供的特殊渠道来进行获取。如果不想有那么多的实例,可以使构造方法私有化。
2021-06-03 17:07:32 299 1
原创 关于Java异常处理中的try、catch、finally
各自用法try块:包含可能会有异常发生的代码catch块:当有异常发生的时候才会执行finally块:无论是否有异常发生都会执行基本格式try { //可能会有异常发生的代码 }catch(Exception e) { // 当有异常发生的时候,catch块被执行 }finally { //不管异常是否发生都要执行 }无异常
2021-06-02 23:49:31 286
原创 弹性布局Flex
什么是弹性布局弹性布局FlexboxFlexbox 是 flexible box 的简称(灵活的盒子容器),是 CSS3 引入的新的布局模式。它决定了元素如何在页面上排列,使它们能在不同的屏幕尺寸和设备下可预测地展现出来。为什么要使用弹性布局在弹性布局模型中,弹性容器的子元素可以在任何方向上排布,也可以“弹性伸缩”其尺寸,既可以增加尺寸以填满未使用的空间,也可以收缩尺寸以避免父元素溢出。子元素的水平对齐和垂直对齐都能很方便的进行操控。通过嵌套这些框(水平框在垂直框内,或垂直框在水平框内)可以在
2021-06-02 20:27:59 126
原创 LeetCode.9:判断回文数
题目给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如“123321”是回文,而“1234”不是。思路建立循环,不停比较整数左右两边是否相等,如果不相等直接返回false,循环正常执行结束则返回true。得到需要判断的数字时,把整数转换为字符串更加方便处理,循环中i的值对应字符串的左边第i个数字,字符串s的长度-1-i表示字符串从右起第i个数字。使用charAt(i)来获取位于第i个位置的字
2021-05-25 08:44:01 158 3
原创 Java类中构造函数、静态代码块、代码块的执行顺序
不包含子类时新建一个包含代码块和静态代码块的Animal类,代码如下:public class Animal { private String name; private int legs; static{ System.out.println("静态代码块"); } { System.out.println("代码块"); } public Animal(String name,int legs) { this.name=name; this.legs=
2021-05-23 20:29:37 365
原创 编写HTML页面的思路和心得
编写HTML页面的思路和心得布局制作HTML页面,首先需要确定布局,确定每个内容区域的位置。最基本的网页布局可分为header、menu、content、nav、footer五个区域,不同区域的位置会根据页面需求不同而有所差异。W3School使用的就是类似的布局结构。确定了布局之后,下一步是确定各区域的所在位置和尺寸,如导航(nav)在页面的上方还是右侧,内容(content)是在页面居中还是左对齐,它们各自占了多少空间等,然后使用div标签把确定的区域划分出来,最好添加边框或者背景颜色,让页
2021-05-08 22:02:36 1934 1
原创 HTML知识点复习
什么是HTML英文全称Hyper Text Markup Language,中文全称为超文本标记语言。超文本标记语言是标准通用标记语言下的一个应用,也是一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分。网页文件本身是一种文本文件,通过在文本文件中添加标记符,可以告诉浏览器如何显示其中的内容(如:文字如何处理,画面如何安排,图片如何显示等)。浏览器按顺序阅读网页文件,然后根据标记符解释和显示其标记的内容,对书写出错的标记将不指出其错误,且不停止其解释执行过程,编制者只能通过显示效果来分析
2021-04-25 17:47:17 4852 15
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人