自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(112)
  • 收藏
  • 关注

原创 Spring Web MVC

在浏览器中访问不同的路径就是发送不同的请求,在发送请求时往往会进行参数传递。所以我们要学习如何传递参数到后端以及后端如何接收参数。传递参数就是浏览器的queryString部分,或者用postman,我们不用关注,主要就是关注如何接收参数。

2024-04-24 20:50:24 932 2

原创 Spring之AOP编程

切入点就是额外功能增加到位置目的:由程序员根据自己的需要,决定额外功能加到哪里简单测试:把所有方法都作为切入点,都加额外功能。配置如下:<aop:config>标签是告诉Spring哪些方法需要干什么(这个哪些方法与干什么都是在中间的aop标签中定义)<aop:pointcut>标签是说叫加切入点,其中的expression就是切入点表达式,告诉了Spring哪些方法要作为切入点。

2024-04-22 19:59:12 1117 2

原创 Spring(下)

简单对象就是可以直接new出来的,也就是直接调用构造方法创建所以复杂对象就是不能直接通过调用构造方法创建。就比如JDBC中的ConnectionFactoryBean是Spring种用于创建复杂对象的方式,也是Spring原生提供的在person类中,id是int类型,而Spring配置文件也是文件,它里面的内容就应该是字符串,那它怎么就把字符串赋值给了int类型呢?这是因为Spring中内置了类型转换器Converter,并且借助接口实现(为啥是接口?因为字符串要转换成不同的类型)

2024-04-21 18:52:10 965

原创 Spring(上)

EJB是一个重量级框架spring是一个轻量级的JavaEE的解决方案,整合了众多优秀的设计模式通过上面的讲解,我们就了解了工厂设计模式那么,我们接下来要学习的Spring,最本质的东西就是工厂。它的工厂有一个专门的实现类ApplicationContext,并且有一个专门的配置文件:applicationContext.xml1.这个别名可以不唯一,而且可以通过别名获取对象2.一个bean标签的别名可以有多个,中间通过逗号进行分割3.containsBeanDefinition()的参数只能是id。

2024-04-21 07:43:49 634

原创 简单了解JVM

总结一下:栈以及程序计数器是每个线程都有一份(比如:一个jvm进程中由10个线程,那么就有10个栈和程序计数器),但公用一份堆和方法区。

2024-04-11 21:13:31 833

原创 Linux基本使用和程序部署

Linux严格来说只是一个操作系统内核,一个操作系统=操作系统内核+配套的应用程序。有些公司/开源组织基于Linux内核,提供了不同的配套应用程序,构成了不同的发行版企业中最常使用的发行版是RedHat红帽,但是收费,免费的有CentOS(它是将RedHat发行的源代码去掉RedHat的logo商标,重新编译了一次得到的)

2024-04-08 20:56:35 737

原创 博客系统实现

1.创建项目,把前端写好的博客静态页面拷贝到webapp目录中2.引入依赖,这里主要用到servlet,mysql5.1.47,jacson2.15.03.找到右上角的edit configurations->smartTomcat->进行配置4.数据库设计:设计对应的表结构,并把数据库相关代码进行封装。如何设计表结构?首先确定实体,其次确认实体之间的关系。这里的实体就是博客和用户,所以就是一个blog表,一个user表。两者是一对多的关系->一个博客只能属于一个用户,然而一个用户可以拥有多篇博客。

2024-04-08 12:30:04 667

原创 Cookie和Session

上面说的每个患者的身份信息,都会存在医院的系统中。这些数据必然要存在数据库中,但又不单单是数据库中。在服务器代码的逻辑的执行过程中,这些数据也会被从库中查询出来,先临时保存到某个内存结构中,后续要是需要修改信息,就先修改该内存结构中的信息,再更新数据库。这个内存结构就是所谓的Session,即会话。会话的合集本质上就相当于是一个hash表,其中的key就是sessionID,value就是对应用户的身份信息。

2024-04-04 16:36:53 803

原创 Servlet

什么是Servlet?Servlet是一种实现动态页面的技术,是Tomcat提供给程序员的一组api。Servlet的工作就是让程序员自己写一些类,加载到Tomcat上,后续Tomcat收到来自浏览器的请求,就会执行上述代码,通过代码完成业务逻辑。

2024-04-03 08:27:04 662

原创 应用层协议之HTTP协议

它描述了某资源在网络上所处的位置,例如https://www.baidu.com。。格式如下:1.协议方案名:http://或https://2.登录(认证)信息:login:password。这是可选项,若非需求,可以不填。现在几乎不用了3.@分割符4.服务器地址:IP或域名5.服务器端口号:一个主机可能有很多端口号。假设这一项没有写,那么就会默认分配一个端口号。对于http请求,默认访问80;对于https请求,默认访问443.

2024-04-01 21:13:58 871

原创 数据链路层协议之以太网协议

以太网协议是通过网线/光纤进行通信。这和通过wifi(无线),通过移动流量(4G/5G)通信不一样。以太网,横跨数据链路层和物理层。

2024-03-27 18:26:49 827

原创 网络层协议之IP协议

网络层主要做两方面事情:1.地址管理:制定一系列规则,通过地址描述出网络上的一个设备的位置2.路由选择:网络环境复杂,从一个节点到另一个节点之间有很多条路径,这就需要通过路由选择来筛选/规划出更合适的路径进行传输。所以我们接下来讲解到IP协议,也是从这两方面进行展开。

2024-03-27 09:40:53 931

原创 传输层协议之TCP和UDP

例如:让孩子买菜,列了一个表,上面写着要买四种什么菜,为了提高买菜的准确度,还和孩子强调了要买4种菜,那么孩子要是发现买的菜不够时就会再看一眼清单,再去买。这里的四就想到于是校验和。只不过只有数量记录还不够,他可能买的是泗洪非清单上的菜,所以还要有其他数据再比如:背诵语文,我们常常采用首字背诵法,将首字拼接成一个对联或顺口溜,这一世校验和的例子。综上,校验和就是一个字符串,它的体积比原始数据小,是原始数据生成的。

2024-03-27 07:49:20 904

原创 应用层协议之DNS协议

键(就是key,就是这里的userid)固定使用字符串形式,也就是String类型,值可以是数字,可以是字符串,也可以是数组,还可以是json对象……但是打开发现其实里面没啥东西,因为这个机制现在基本上不用了,因为用hosts文件来维护域名与IP地址的映射真的很不方便,每次有一个新的IP地址,就得把每个用户电脑里面的hosts文件进行手动更新。请求:用户信息,位置信息,并使用文本的方式,用逗号分隔->10011,100E,30W。优势:二进制形式组织,占用带宽最低,传输效率最高,计算机的执行效率最高。

2024-03-27 07:48:20 507

原创 Java网络通信与网络编程

我们想要通过网络让两个主机之间能够进行通信,基于这样的通信来完成一定的功能。网络编程:就是需要操作系统提供API(API可指应用层和传输层之间的交互路径,也叫做Socket API)通过Socket API,就可以完成不同主机之间的通信。也就是网络上的主机,通过不同的进程,以编程的方式实现网络通信(或者说是网络数据传输)。

2024-03-22 07:20:06 590

原创 初识网络原理

物理层:描述网络通信的硬件设备(好比基础设施公路铁路),比如网线,光纤都是什么规格的。数据链路层:描述两个相邻节点间的数据传输情况网络层:描述路径规划传输层:关注数据传输的起点和终点应用层:应用程序如何使用该数据(这是程序员最需要关注的一点)比如我在淘宝上买衣服,商家只关注发件人地址/电话和收件人地址/电话(这就是传输层);快递公司进行路径规划,考虑从哪里到哪里经过哪里,考虑效率还是成本(这是网络层);接下来考虑每一步怎么走:从上海到北京是坐飞机还是坐车……(这是数据链路层);

2024-03-17 19:24:58 655

原创 文件操作--IO

直接将文件路径以字符串的形式来创建一个实例,该路径可以是绝对路径,也可以是相对路径注意写文件路径时,分隔符可以用反斜杠,也可以用正斜杠。注意用反斜杠时一定要写双斜杠,否则就成了转义了。而使用正斜杠时,只要写一个就可以。这是用父路径和子路径来创建file实例,如下:这是用父目录实例和子路径来创建,如下:这三种方法打印出来的结果都是D:\aaa\bbb。

2024-03-17 12:07:46 857

原创 多线程进阶

CAS是让这里的自增不要穿插进行,它是通过重试的方式避免穿插的,一旦发现oldval的值与内存中的值不相同,就说明有人穿插进来了。而要是加锁,就是通过阻塞来避免穿插执行。类比于线程池,线程池是优化了找“下一任”的效率,而偏向锁则是优化了“分手”的效率。比如我看上了一个小哥哥,立马就和他确立了情侣关系,但到了后期我不耐烦时,想要和他分手,就得考虑很多,还得找理由,这样的分手就低效;

2024-03-16 12:58:08 646

原创 多线程案例及常用模式

1.instance应该是static修饰的2.构造方法设为private3.getInstance设为static保证可以用类调用该方法4.饿汉模式不涉及到线程安全问题5.懒汉模式涉及到线程安全问题,解决方案:加锁;在加锁之前判断,避免反复加锁;使用volatile避免指令重排序生产者将生产的产品放到仓库中,消费者就从仓库中取产品。当产品放满仓库时,就会阻塞等待停止生产,直到有顾客开始取产品;当消费者把产品取完时,消费者就开始等,直到生产者生产出产品。

2024-03-11 18:18:37 580

原创 Java EE之wait和notify

由于多个线程执行是抢占式执行,就会导致顺序不同,同时就会导致出现问题,就比如俩个线程同时对同一个变量进行修改,我们难以预知执行顺序。但在实际开发中,我们希望代码按一定的逻辑顺序执行,希望可以协调多个线程的执行顺序。之前提到过join,会让调用它的线程进入阻塞等待,但有个缺陷就是,它必须得等那个线程完全执行完才能继续执行。怎么才能随意调度?可以用到wait和notify方法。

2024-03-10 07:28:03 902

原创 JavaEE之volatile关键字

计算机运行的程序/代码,往往需要访问数据。这些数据往往存在于内存中。cup使用此变量时,就会把内存中的数据先读出来,加载到cpu寄存器中,再去参与运算。但是,关键是cpu读取内存的速度非常慢。这是相对的,读内存比读取硬盘快成千上万倍,而读取寄存器又比读取内存快了成千上万倍。而这里,cpu计算时,就是涉及到读取内存和读取寄存器的操作。读取寄存器非常快,一旦涉及到读内存,cpu就慢下来了。

2024-03-07 20:58:50 288

原创 Java EE之线程安全问题

有些代码,在单个线程执行时完全正确,但同样的代码让多个线程同时执行,就会出现bug。例如以下代码:给定一个变量count,让线程t1 t2分别自增5000次,然后进行打印,按理说count应变成10000,但实际却小于1000:这是因为,count每增加一次,cpu都要执行三个指令:1.load:把数据从内存读取到cpu寄存器中;2.add:把寄存器中的数加一;3.save:把寄存器中的数保存到内存中。由于cpu的调度顺序随机,就可能导致有些调度顺序下,上述逻辑出现问题。

2024-03-07 19:54:49 982

原创 Java基础数据结构之队列

设置一个flag,初始值为false当入队时,rear向后移,flag=true;出队时front向后移,flag=false当队列为空时front=rear并且flag=false(因为最后一步操作肯定是出队)当队列为满时front=rear并且flag=true(因为最后一步操作肯定是入队)

2024-03-05 18:44:27 707

原创 JavaEE之多线程

引入多个进程的核心:实现并发编程(c++的CGI技术就是通过多进程的方式实现的网站后端开发)。因为现在是一个多核cpu的时代,并发编程就是刚需。多进程实现并发编程,效果理想。但很多进程进行编程的模式也有缺点:就是(创建一个进程,消耗的时间很多,销毁一个进程,调度一个进程,也都需要消耗时间小号空间等,也就是都消耗在申请资源上)。进程是资源分配的基本单位,它的分配主要是通过一定的数据结构。

2024-03-04 21:06:27 686

原创 JavaEE之操作系统

操作系统是一组做计算机资源管理的软件的统称,常见的由Windows系列,Linux系列,Android系列,iOS系列,鸿蒙系列。

2024-03-03 15:16:28 803

原创 CPU相关知识

主要是看主频和核心数1.主频就是1秒钟可执行的指令数目2.核心数核心就是一个能完成完整计算机功能的整体,是由很多计算单元组成的最初CPU只有一个核心(也称内核),所以当时要想提升cpu的速度,只能选择提高集成程度(也就是减小单个计算单元的体积,这增大了工艺难度)。当时就有摩尔定律,每个18个月,集成程度就提高一倍,计算效率就提高一倍,而且cpu成本就下降一半(因为所占面积小了一半)

2024-03-02 20:03:18 131

原创 Java基础数据结构之栈

栈是一种特殊的线性表,它只允许在固定的一端进行元素的添加与使用,且遵循先进后出的原则。添加取用元素的一端称为栈顶,另一端称为栈底。出栈和入栈都是操作栈顶元素。

2024-03-02 14:03:27 299

原创 Java基础数据结构之LinkedList与链表

这个是从后往前找。

2024-03-02 11:53:46 784

原创 Java数据结构之ArrayList与顺序表

1.它在Java.util包底下,使用时需要导入包2.它是一个普通的类,实现了List接口;3.而且他是一个泛型类,要存放什么类型的数据,就要对应传入其包装类,同时在使用时要创建对象4.它实现了Cloneable接口,表示它可以被克隆;实现了RandomAccess接口,表示可以被随机访问5.与Vector不同,它不是线程安全的,在单线程情况下可以使用,而在多线程情况下,一般不使用ArrayList6.它的底层是一个数组,并且可以动态扩容,是可以动态扩容的顺序表。

2024-02-29 16:08:43 663

原创 MySQL JDBC编程

jdbc即Java Database Connectivity,Java数据库连接,是一种用来执行SQL语句的JavaAPI,什么是api,api就是application programming interface(应用程序编程接口),是一组类/接口,用于提供给程序员去调用,完成一些功能jdbc编程是为了使用Java代码操作数据库。

2024-02-27 18:41:03 743

原创 MySQL事务

事务是指逻辑上的一组操作,组成这个操作的各个单元,要么全部成功,要么全部失败比如一个事务有a和b俩个操作,如果a成功执行了,但b由于某种原因被中断,那么之前执行的a也就会触发回滚机制,回到执行前的状态。

2024-02-27 11:00:09 553

原创 MySQL索引

索引是一种特殊的文件,包含着对数据表里的所有记录的引用指针。我们可以对表中的一列或多列创建索引并指定索引类型,各类索引有各自的数据结构实现方式。

2024-02-27 09:18:07 631

原创 MySQL表的增删查改进阶

创建某张表时,可以指定某一列不为空。

2024-02-27 07:09:53 739

原创 MySQL表的增删查改(基础)

全列单行插入insert into 表名 values(值,值……);也可以全列且多行插入insert into 表名 values (值,值……),(值,值……)……;

2024-02-13 08:31:27 859

原创 MySQL表的基础操作

create table 表名(列名 类型,列名 类型……)

2024-02-12 09:14:32 375

原创 数据库常用数据类型

bit(M)M指定位数,默认为1。M范围是1到64,所以存储的数据范围是0到2^64-1.

2024-02-12 07:23:28 353

原创 MySQL基本操作之数据库的操作

create database 数据库名;注意别忘记加分号。

2024-02-12 06:15:58 150

原创 Java基础数据结构之ArrayList源码分析

对于调用了无参构造方法的list,它的elementData指向了那个共享的空数组,长度为0,当第一次添加元素时,会进入如下方法:其中恰好可以进入if语句,所以会返回DEFAULT_CAPACITY即10,然后如下函数接收:然后1.5倍扩容在第二次添加时,elementData不再指向DEFAULTCAPACITY_EMPTY_ELEMENTDATA,所以calculateCapacity方法返回的是minCapacity即2,所以就不会进入grow方法。

2024-01-31 10:28:41 610

原创 Java基础数据结构之Map和Set

Set是Java集合框架中的一种,它代表着一组无序且独特的元素。这意味着Set中的元素不会重复,且没有特定的顺序。Set接口有多个实现类,如HashSet、LinkedHashSet和TreeSet。

2024-01-31 07:34:53 1255

原创 Java泛型进阶之通配符

通配符的上界不能进行写入数据,只可以读取数据通配符的下界,不能进行读取数据,只能写入数据。

2024-01-30 17:51:12 392

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除