自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 博客系统的实现(前端+后端+测试)

想要实现完整的博客系统,需要实现前端的页面(博客列表页+博客详情页+登录页+博客编辑页)和后端代码(部署到服务器+连接到数据库)。并且对博客系统的登录页进行功能测试和性能测试,对博客编辑页和博客详情页进行功能测试。

2023-10-09 13:49:39 664

原创 Junit基础

Junit是一个在Java环境使用的一个单元测试框架。Selenium是实现了写自动化测试用例的功能,而Junit是实现了管理已经编写好的测试用例的功能。

2023-09-17 15:15:53 142

原创 Tomcat

Tomcat是Java最知名,最广泛使用的http服务器。我们在浏览器中下载并安装:我们下载tomcat的版本,和后续学习servlet是有相关性的,此处下载tomcat 8,对应的servlet就是3.1。下载压缩包,解压缩。要注意的一点是,tomcat是基于java实现的,我们的电脑上需要安装jdk才能让tomcat运行起来。下载好之后找到对应的文件夹:bin代表可执行的程序,tomcat就在这里启动。conf代表配置,比如想修改一下tomcat的端口号就需要在这里执行。

2023-09-04 15:58:58 131

原创 Linux基础

学习Linux的目的,主要是要对工作中的程序进行部署,这个部署不是指的部署在内网ip上,而是部署在云服务器上。云服务器通常都是Linux系统。那么什么是Linux呢,Linux是一个操作系统,和Windows属于并列的关系,日常人们用的都是Windows,公司用的都是Linux。对于桌面端,Linux是落后于Windows很多的,而在服务器端,Linux属于独一家的存在,在移动端仍是Linux独大,对于一些嵌入式设备,也是Linux主导。所以,Linux是当今的第一大操作系统。

2023-09-04 15:56:05 45

原创 Selenium介绍

Selenium是用来做web自动化测试的框架。

2023-09-03 16:49:55 273

原创 JVM基础

JVM是Java虚拟机简称,目前最主流使用的JVM叫HotSpot VM,Oracle官方的jdk以及开源的openjdk都是使用了这个JVM。JVM属于Java中比较底层的东西,如果想系统的深入学习JVM,一定要阅读JVM的源码,JVM的源码是用C++写的,这篇博客主要针对面试中的一些重点,通过JVM的内存区域划分,类加载机制,垃圾回收机制来简单介绍一下JVM。

2023-08-11 22:31:50 55

原创 前端基础扫盲

web开发主要分为前端开发和后端开发,当前我们主要对前端开发的基础进行扫盲。

2023-06-10 11:58:55 189

原创 HTTP协议

HTTP属于应用层最广泛使用的协议之一,诞生于1991年。浏览器获取到网页就是基于http。1.1版本是HTTP的最常见版本。我们平时打开一个网站,就是通过HTTP协议来传输数据的。当在浏览器上输入一个网址(URL)的时候,浏览器就会根据这个URL构造出一个HTTP请求,发送给服务器,然后服务器就会返回一个HTTP响应(包含了html,css,js,图片等等),浏览器再把得到的html等数据显示出来(渲染)。

2023-05-18 10:52:50 95

原创 网络原理基础

因为当前的软件要解决的业务场景是错综复杂的,不同的公司有不同的业务,不同的业务有不同的流程。因此,很难有一个通用的协议来满足所有的业务需求。

2023-04-30 12:12:18 148

原创 网络编程基础

传输层里我们也知道,提供过了两个最核心的协议,UDP和TCP,因此,socket api也提供了两种风格,UDP TCP(准确的来说还有一种风格叫unix域套接字,不过没有人用这个了)。而回显服务器(echo server)省略了其中的“根据请求计算响应”这一步,请求是啥,返回的就是啥,这个代码没有实际的业务,只是为了展示socket api的基本用法。而在客户端这边,是代码中构造的。需要注意的是,TCP不需要一个类来表示“TCP数据报”,TCP不是以数据报为单位进行传输的,而是以字节的方式,流式传输。

2023-03-28 13:08:57 80

原创 网络原理初识

协议是网络通信中最核心的概念,可以理解为一个约定,商量好数据是以什么样的格式进行传输的,有了这个约定,才能让双方相互理解对方的含义。一个协议,可能简单也可能复杂。如果这个协议太复杂了,那么学习成本,使用成本,理解成本都会很高,因此,采取实际的做法,是针对这个复杂的大协议,拆分成若干个相对简单的小协议。随着把协议拆分成一些小的协议(每个协议负责一部分功能),此时就发现,某些协议之间,起到的功能和作用是类似的,就针对这些小协议,再进行分层,就好比代码拆分出很多类,有些类,功能差不多,就可以放到同一个包里。

2023-03-21 12:33:21 82

原创 文件IO操作

Java中一般习惯性的做法,是把输入的信息作为参数,输出的信息作为返回值,但是也有少数情况,是使用参数来返回内容的,这一点在C++是很常见的。这是一张图片,在硬盘上的路径叫做d:/cat.jpg(在windows上也可以写作为d:\cat.jpg)表示一个文件的具体位置路径,就可以使用/来分割不同的目录级别,例如:d:/tmp/111/aaa 最前面的d,代表盘符,c、d、e这样的盘符是通过硬盘分区来的,每个盘符可以是一个单独的硬盘,也可以是若干个盘符对应一个硬盘。当前所在的目录,称为工作目录。

2023-03-13 16:00:10 138

原创 JUC、多线程环境下使用ArrayList和HashMap

JUC全称:java.util.concurrent 我们熟悉的各种集合类都是在java.util下的,比如scanner,random等等。concurrernt就是java.util下的一个子包,翻译过来就是“并发的”,其中放了并发编程(多线程)相关的组件。类似于Runnable,Runnable用来描述一个任务,描述的任务没有返回值。Callable也是用来描述一个任务,描述的任务是有返回值的。如果需要使用一个线程单独的计算出某个结果来,此时使用Callable是比较合适的。

2023-02-23 14:38:00 195

原创 常见的锁策略、CAS、以及synchronized原理

进行加锁的时候,首先会进入到偏向锁状态,偏向锁,并不是真正的加锁,而只是占个位置,有需要再真正加锁,没需要就算了。所以synchronized的时候并不是真正的加锁,而是先偏向锁状态,做一个标记(这个过程是非常轻量的)如果整个使用锁的过程中,都没有出现锁竞争,在synchronized执行完之后,取消偏向锁即可。锁消除指的是,编译器会智能的判定,看当前的代码是否真的需要加锁,如果这个场景不需要加锁,程序猿也加了,就会自动把锁消除。ABA的问题就在于,买手机的时候,可能买到的是新机,也有可能买到的是翻新机。

2023-02-21 13:07:05 220

原创 多线程中的wait、notify以及单例模式的实现

由于线程最大的问题是抢占式执行和随即调度,所以对于程序员来说,写多线程的代码时是不喜欢随机,喜欢确定的事情。由此发明了一些办法,来控制线程之间的执行顺序。虽然线程在内核里的调度是随机的,但是也可以通过一些api让线程来主动阻塞。比如,t1和t2两个线程,我希望t1先干活,当干的差不多的时候t2再来干,就可以让t2先阻塞(wait),等t1干的差不多了,再通过notify通知t2,把t2唤醒,让t2接着干。不禁让人产生疑问,为什么不能使用join和sleep配合来控制呢?

2023-01-24 20:06:09 140

原创 多线程安全问题

在多线程编程中,线程安全问题是比较难,非常重要的问题。不管是在面试过程中还是在实际的工作中,也都是经常出错的地方。因此本篇文章着重介绍一下线程的安全问题。

2022-12-22 19:50:46 711

原创 多线程编程基础

一个线程也是通过一个PCB来描述的,在之前介绍的PCB中的状态,上下文,优先级等,都是每个线程拥有自己的一份信息,但是同一个进程里的PCB之间, pid是一样的,内存指针,文件描述符表也是一样的。由于创建,销毁,调度一个进程的开销是比较大的,线程便应运而生,所以线程也叫做“轻量级进程”,就是在解决并发编程问题的前提下,让创建,销毁,调度的速度更快一些!答案是:操作系统在调度线程的时候,采用的是“抢占式执行”的方法,具体哪个线程先执行,哪个线程后执行都是不确定的,这取决于操作系统调度器的具体实现策略。

2022-12-17 21:24:52 163

原创 操作系统基础

这篇文章主要讲解操作系统相关知识。

2022-12-01 20:52:56 340 1

原创 MySQL 索引和事务

MySQL数据库索引、事务详解

2022-11-28 13:00:08 260

原创 MySQL查询操作进阶

MySQL数据库查询操作进阶详解

2022-11-26 14:14:52 521 1

原创 MySQL数据库操作拓展

MySQL数据库操作:数据库约束、数据库表的设计

2022-11-21 10:08:53 398 1

原创 MySQL数据库基本操作详解(数据库概述、基本操作、增删改查等)

初学数据库必备!超全!MySQL数据库基本操作详解(数据库概述、基本操作、增删改查等)

2022-11-18 19:15:07 6514 3

原创 C语言的基本内容(3)

1.结构体结构体是⼀种集合,他里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员。简单的结构体示例如下:struct stu 1{char *name; //姓名int num; //学号int age; //年龄char group; //所在学习⼩组float score; //成绩那么,当我们想读取结构体成员时,就要用到.操作符 例如:printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", s

2022-04-11 11:27:35 983 1

原创 C语言的基础内容(2)

C语言的重要性我们可想而知 ,那么对于刚接触C语言的同学来说,掌握其基础内容尤为重要。经过我的学习,我想在下面总结几点重要的基础内容和易错点,如有错误,欢迎指正。1.基本的自定义函数在VS中,库中有大量的函数供用户们使用,但是使用时我们需要引用其对应的头文件。有的函数并不能满足用户的需求,那么VS给予了用户自己创造函数的功能,也就是用户们可以自定义函数。其优点是快速方便,一个函数在代码中可以多次引用,避免占用大量空间。简单的自定义函数例子如下:int add(int x, int y){..

2022-04-07 21:14:51 1186

原创 C语言的基础内容(1)

C语言的重要性我们可想而知 ,那么对于刚接触C语言的同学来说,掌握其基础内容尤为重要。经过我的学习,我想在下面总结几点重要的基础内容和易错点,如有错误,欢迎指正。1.数据类型char(字符型)——以%c进行打印short(短整形)——以%d进行打印int(整形)——以%d进行打印long(长整型)——以%d进行打印long long(长长整形)——以%d进行打印float(单精度浮点型)——以%f进行打印double(双精度浮点型)——以%lf进行打印我们经常接触到的可能

2022-04-04 11:09:53 1101 1

空空如也

空空如也

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

TA关注的人

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