<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[XPmai的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/XPmai</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; XPmai]]></copyright><item><title><![CDATA[博客系统的实现（前端+后端+测试）]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/131140466</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/131140466</guid><author>XPmai</author><pubDate>Mon, 09 Oct 2023 13:49:39 +0800</pubDate><description><![CDATA[想要实现完整的博客系统，需要实现前端的页面（博客列表页+博客详情页+登录页+博客编辑页）和后端代码（部署到服务器+连接到数据库）。并且对博客系统的登录页进行功能测试和性能测试，对博客编辑页和博客详情页进行功能测试。]]></description><category></category></item><item><title><![CDATA[Junit基础]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/132652053</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/132652053</guid><author>XPmai</author><pubDate>Sun, 17 Sep 2023 15:15:53 +0800</pubDate><description><![CDATA[Junit是一个在Java环境使用的一个单元测试框架。Selenium是实现了写自动化测试用例的功能，而Junit是实现了管理已经编写好的测试用例的功能。]]></description><category></category></item><item><title><![CDATA[Tomcat]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/130742931</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/130742931</guid><author>XPmai</author><pubDate>Mon, 04 Sep 2023 15:58:58 +0800</pubDate><description><![CDATA[Tomcat是Java最知名，最广泛使用的http服务器。我们在浏览器中下载并安装：我们下载tomcat的版本，和后续学习servlet是有相关性的，此处下载tomcat 8，对应的servlet就是3.1。下载压缩包，解压缩。要注意的一点是，tomcat是基于java实现的，我们的电脑上需要安装jdk才能让tomcat运行起来。下载好之后找到对应的文件夹：bin代表可执行的程序，tomcat就在这里启动。conf代表配置，比如想修改一下tomcat的端口号就需要在这里执行。]]></description><category></category></item><item><title><![CDATA[Linux基础]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/131947983</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/131947983</guid><author>XPmai</author><pubDate>Mon, 04 Sep 2023 15:56:05 +0800</pubDate><description><![CDATA[学习Linux的目的，主要是要对工作中的程序进行部署，这个部署不是指的部署在内网ip上，而是部署在云服务器上。云服务器通常都是Linux系统。那么什么是Linux呢，Linux是一个操作系统，和Windows属于并列的关系，日常人们用的都是Windows，公司用的都是Linux。对于桌面端，Linux是落后于Windows很多的，而在服务器端，Linux属于独一家的存在，在移动端仍是Linux独大，对于一些嵌入式设备，也是Linux主导。所以，Linux是当今的第一大操作系统。]]></description><category></category></item><item><title><![CDATA[Selenium介绍]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/132598130</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/132598130</guid><author>XPmai</author><pubDate>Sun, 03 Sep 2023 16:49:55 +0800</pubDate><description><![CDATA[Selenium是用来做web自动化测试的框架。]]></description><category></category></item><item><title><![CDATA[JVM基础]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/132172961</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/132172961</guid><author>XPmai</author><pubDate>Fri, 11 Aug 2023 22:31:50 +0800</pubDate><description><![CDATA[JVM是Java虚拟机简称，目前最主流使用的JVM叫HotSpot VM，Oracle官方的jdk以及开源的openjdk都是使用了这个JVM。JVM属于Java中比较底层的东西，如果想系统的深入学习JVM，一定要阅读JVM的源码，JVM的源码是用C++写的，这篇博客主要针对面试中的一些重点，通过JVM的内存区域划分，类加载机制，垃圾回收机制来简单介绍一下JVM。]]></description><category></category></item><item><title><![CDATA[前端基础扫盲]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/130563938</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/130563938</guid><author>XPmai</author><pubDate>Sat, 10 Jun 2023 11:58:55 +0800</pubDate><description><![CDATA[web开发主要分为前端开发和后端开发，当前我们主要对前端开发的基础进行扫盲。]]></description><category></category></item><item><title><![CDATA[HTTP协议]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/130586231</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/130586231</guid><author>XPmai</author><pubDate>Thu, 18 May 2023 10:52:50 +0800</pubDate><description><![CDATA[HTTP属于应用层最广泛使用的协议之一,诞生于1991年。浏览器获取到网页就是基于http。1.1版本是HTTP的最常见版本。我们平时打开一个网站，就是通过HTTP协议来传输数据的。当在浏览器上输入一个网址（URL）的时候，浏览器就会根据这个URL构造出一个HTTP请求，发送给服务器，然后服务器就会返回一个HTTP响应（包含了html，css，js，图片等等），浏览器再把得到的html等数据显示出来（渲染）。]]></description><category></category></item><item><title><![CDATA[网络原理基础]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/129814156</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/129814156</guid><author>XPmai</author><pubDate>Sun, 30 Apr 2023 12:12:18 +0800</pubDate><description><![CDATA[因为当前的软件要解决的业务场景是错综复杂的，不同的公司有不同的业务，不同的业务有不同的流程。因此，很难有一个通用的协议来满足所有的业务需求。]]></description><category></category></item><item><title><![CDATA[网络编程基础]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/129686382</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/129686382</guid><author>XPmai</author><pubDate>Tue, 28 Mar 2023 13:08:57 +0800</pubDate><description><![CDATA[传输层里我们也知道，提供过了两个最核心的协议，UDP和TCP，因此，socket api也提供了两种风格，UDP TCP（准确的来说还有一种风格叫unix域套接字，不过没有人用这个了）。而回显服务器（echo server）省略了其中的“根据请求计算响应”这一步，请求是啥，返回的就是啥，这个代码没有实际的业务，只是为了展示socket api的基本用法。而在客户端这边，是代码中构造的。需要注意的是，TCP不需要一个类来表示“TCP数据报”，TCP不是以数据报为单位进行传输的，而是以字节的方式，流式传输。]]></description><category></category></item><item><title><![CDATA[网络原理初识]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/129497247</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/129497247</guid><author>XPmai</author><pubDate>Tue, 21 Mar 2023 12:33:21 +0800</pubDate><description><![CDATA[协议是网络通信中最核心的概念，可以理解为一个约定，商量好数据是以什么样的格式进行传输的，有了这个约定，才能让双方相互理解对方的含义。一个协议，可能简单也可能复杂。如果这个协议太复杂了，那么学习成本，使用成本，理解成本都会很高，因此，采取实际的做法，是针对这个复杂的大协议，拆分成若干个相对简单的小协议。随着把协议拆分成一些小的协议（每个协议负责一部分功能），此时就发现，某些协议之间，起到的功能和作用是类似的，就针对这些小协议，再进行分层，就好比代码拆分出很多类，有些类，功能差不多，就可以放到同一个包里。]]></description><category></category></item><item><title><![CDATA[文件IO操作]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/129248978</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/129248978</guid><author>XPmai</author><pubDate>Mon, 13 Mar 2023 16:00:10 +0800</pubDate><description><![CDATA[Java中一般习惯性的做法，是把输入的信息作为参数，输出的信息作为返回值，但是也有少数情况，是使用参数来返回内容的，这一点在C++是很常见的。这是一张图片，在硬盘上的路径叫做d:/cat.jpg（在windows上也可以写作为d:\cat.jpg）表示一个文件的具体位置路径，就可以使用/来分割不同的目录级别，例如：d:/tmp/111/aaa   最前面的d，代表盘符，c、d、e这样的盘符是通过硬盘分区来的，每个盘符可以是一个单独的硬盘，也可以是若干个盘符对应一个硬盘。当前所在的目录，称为工作目录。]]></description><category></category></item><item><title><![CDATA[JUC、多线程环境下使用ArrayList和HashMap]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/129159539</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/129159539</guid><author>XPmai</author><pubDate>Thu, 23 Feb 2023 14:38:00 +0800</pubDate><description><![CDATA[JUC全称：java.util.concurrent 我们熟悉的各种集合类都是在java.util下的，比如scanner,random等等。concurrernt就是java.util下的一个子包，翻译过来就是“并发的”，其中放了并发编程（多线程）相关的组件。类似于Runnable，Runnable用来描述一个任务，描述的任务没有返回值。Callable也是用来描述一个任务，描述的任务是有返回值的。如果需要使用一个线程单独的计算出某个结果来，此时使用Callable是比较合适的。]]></description><category></category></item><item><title><![CDATA[常见的锁策略、CAS、以及synchronized原理]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/129111502</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/129111502</guid><author>XPmai</author><pubDate>Tue, 21 Feb 2023 13:07:05 +0800</pubDate><description><![CDATA[进行加锁的时候，首先会进入到偏向锁状态，偏向锁，并不是真正的加锁，而只是占个位置，有需要再真正加锁，没需要就算了。所以synchronized的时候并不是真正的加锁，而是先偏向锁状态，做一个标记（这个过程是非常轻量的）如果整个使用锁的过程中，都没有出现锁竞争，在synchronized执行完之后，取消偏向锁即可。锁消除指的是，编译器会智能的判定，看当前的代码是否真的需要加锁，如果这个场景不需要加锁，程序猿也加了，就会自动把锁消除。ABA的问题就在于，买手机的时候，可能买到的是新机，也有可能买到的是翻新机。]]></description><category></category></item><item><title><![CDATA[多线程中的wait、notify以及单例模式的实现]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/128694497</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/128694497</guid><author>XPmai</author><pubDate>Tue, 24 Jan 2023 20:06:09 +0800</pubDate><description><![CDATA[由于线程最大的问题是抢占式执行和随即调度，所以对于程序员来说，写多线程的代码时是不喜欢随机，喜欢确定的事情。由此发明了一些办法，来控制线程之间的执行顺序。虽然线程在内核里的调度是随机的，但是也可以通过一些api让线程来主动阻塞。比如，t1和t2两个线程，我希望t1先干活，当干的差不多的时候t2再来干，就可以让t2先阻塞（wait），等t1干的差不多了，再通过notify通知t2，把t2唤醒，让t2接着干。不禁让人产生疑问，为什么不能使用join和sleep配合来控制呢？]]></description><category></category></item><item><title><![CDATA[多线程安全问题]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/128362202</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/128362202</guid><author>XPmai</author><pubDate>Thu, 22 Dec 2022 19:50:46 +0800</pubDate><description><![CDATA[在多线程编程中，线程安全问题是比较难，非常重要的问题。不管是在面试过程中还是在实际的工作中，也都是经常出错的地方。因此本篇文章着重介绍一下线程的安全问题。]]></description><category></category></item><item><title><![CDATA[多线程编程基础]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/128252575</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/128252575</guid><author>XPmai</author><pubDate>Sat, 17 Dec 2022 21:24:52 +0800</pubDate><description><![CDATA[一个线程也是通过一个PCB来描述的，在之前介绍的PCB中的状态，上下文，优先级等，都是每个线程拥有自己的一份信息，但是同一个进程里的PCB之间， pid是一样的，内存指针，文件描述符表也是一样的。由于创建，销毁，调度一个进程的开销是比较大的，线程便应运而生，所以线程也叫做“轻量级进程”，就是在解决并发编程问题的前提下，让创建，销毁，调度的速度更快一些！答案是：操作系统在调度线程的时候，采用的是“抢占式执行”的方法，具体哪个线程先执行，哪个线程后执行都是不确定的，这取决于操作系统调度器的具体实现策略。]]></description><category></category></item><item><title><![CDATA[操作系统基础]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/128105396</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/128105396</guid><author>XPmai</author><pubDate>Thu, 01 Dec 2022 20:52:56 +0800</pubDate><description><![CDATA[这篇文章主要讲解操作系统相关知识。]]></description><category></category></item><item><title><![CDATA[MySQL 索引和事务]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/128053248</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/128053248</guid><author>XPmai</author><pubDate>Mon, 28 Nov 2022 13:00:08 +0800</pubDate><description><![CDATA[MySQL数据库索引、事务详解]]></description><category></category></item><item><title><![CDATA[MySQL查询操作进阶]]></title><link>https://blog.youkuaiyun.com/XPmai/article/details/127961925</link><guid>https://blog.youkuaiyun.com/XPmai/article/details/127961925</guid><author>XPmai</author><pubDate>Sat, 26 Nov 2022 14:14:52 +0800</pubDate><description><![CDATA[MySQL数据库查询操作进阶详解]]></description><category></category></item></channel></rss>