<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Nicholas___的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Nicholas___</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Nicholas___]]></copyright><item><title><![CDATA[CSS3中的margin和padding]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/120849862</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/120849862</guid><author>Nicholas___</author><pubDate>Tue, 19 Oct 2021 18:02:53 +0800</pubDate><description><![CDATA[最近关于margin和padding有很多困惑，找了一些资料实践一下，做了一些笔记，后面如果忘记了也能很快回忆起来。
1. 小试牛刀
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head lang="en"&gt;
    &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
    &lt;title&gt;&lt;/title&gt;
    &lt;style&gt;
 ]]></description><category></category></item><item><title><![CDATA[async/await]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/120763519</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/120763519</guid><author>Nicholas___</author><pubDate>Sat, 16 Oct 2021 12:56:21 +0800</pubDate><description><![CDATA[公司的前端工程使用了ES6语法，最近看代码的时候还是有很多疑惑的，记录一下async/await相关知识
1. async function
使用谷歌浏览器开发者工具写脚本进行测试

按F12打开开发者工具
点击Source
在左侧选择Snippets，点击New snippets创建一个新文件

输入以下代码

async function add(x) {
    let a = 1;
    return x + a;
}
add(10);


运行此脚本，在控制台可以看到有结果输出

返回的结果是一]]></description><category></category></item><item><title><![CDATA[Vue axios]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/120403367</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/120403367</guid><author>Nicholas___</author><pubDate>Tue, 21 Sep 2021 17:54:22 +0800</pubDate><description><![CDATA[1. 准备工作

npm install axios

2. 示例代码
&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initia]]></description><category></category></item><item><title><![CDATA[Vue路由]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/120403020</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/120403020</guid><author>Nicholas___</author><pubDate>Tue, 21 Sep 2021 16:50:38 +0800</pubDate><description><![CDATA[1. 初始化npm项目

npm init -y

执行此命令后生成了package.json文件，此文件类似于spring项目中的pom文件
2. 安装vue、vue-router

npm install vue
npm install vue-router

3. 简单示例代码
&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equ]]></description><category></category></item><item><title><![CDATA[Vue 计算属性和侦听器]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/120392825</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/120392825</guid><author>Nicholas___</author><pubDate>Mon, 20 Sep 2021 17:21:17 +0800</pubDate><description><![CDATA[本文讨论一下计算属性和侦听器相关的用法
直接上代码
1. 计算属性
	&lt;!-- HTML --&gt;
	&lt;div id="app"&gt;
        我的购物车：&lt;br&gt;
        &lt;ul&gt;
            &lt;li v-for="(item, index) in cart" :key="index"&gt;
                商品名称：{{item.name}} 商品单价：{{item.price}} 商品库存：{{item.st]]></description><category></category></item><item><title><![CDATA[Vue插槽]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/120271070</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/120271070</guid><author>Nicholas___</author><pubDate>Mon, 13 Sep 2021 18:16:36 +0800</pubDate><description><![CDATA[前言：学习本章需要对Vue的组件有一定了解
Vue组件基础：https://cn.vuejs.org/v2/guide/components.html
1、基本示例
定义一个全局组件名为 navigation-link，props中为可传递进来的属性，props中的元素通过v-bind绑定到template中，可作为属性。如果不需要绑定为属性，直接使用双层花括号引用即可
	Vue.component('navigation-link', {
		props: ['url', 'name', 'title']]]></description><category></category></item><item><title><![CDATA[JS修改数组中对象属性名称]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/120270763</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/120270763</guid><author>Nicholas___</author><pubDate>Mon, 13 Sep 2021 17:06:07 +0800</pubDate><description><![CDATA[后端响应给前端的数组中对象属性名称不是我们想要的，可通过此方法进行转换。
转换过后，原响应体并未发生改变。
当数据量巨大可考虑将响应体转换为JSON，替换字符串即可
	const data = {
		totalEmelents: 100,
		list: [
		   { id: 0, name: "a" },
		   { id: 1, name: "b" },
		   { id: 2, name: "c" },
		]
	}
	
	const myList = data.list.map(item ]]></description><category></category></item><item><title><![CDATA[synchronized和volatile]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/120011610</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/120011610</guid><author>Nicholas___</author><pubDate>Tue, 31 Aug 2021 11:07:33 +0800</pubDate><description><![CDATA[1、synchronized

当多个线程同时访问一个对象的同步方法时，同一时间只能有一个线程得到执行，其他线程必须等待当前线程执行完之后再依次执行。
当有线程正在执行一个对象的同步方法时，其他线程仍可访问此对象的非同步方法。
当有线程正在执行一个对象的同步方法时，其他线程不能访问此对象的任意一个同步方法。因为当有线程开始执行一个对象的同步代码块或同步方法，它就获取到了此对象的对象锁，此时其他线程对该加锁对象的所有同步代码部分的访问都将被阻塞。



2、volatile
对于并发编程来说，线程间通信和线程]]></description><category></category></item><item><title><![CDATA[Windows使用RocketMQ和RoctetMQ-Console]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/115669108</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/115669108</guid><author>Nicholas___</author><pubDate>Tue, 13 Apr 2021 16:11:20 +0800</pubDate><description><![CDATA[1. 配置并启用RocketMQ
下载并配置
RocketMQ下载：
http://rocketmq.apache.org/dowloading/releases/

本文使用的是4.3.0版本
下载地址：http://rocketmq.apache.org/release_notes/release-notes-4.3.0/
下载 rocketmq-all-4.3.0-bin-release.zip

解压压缩包，得到文件夹

将此文件夹更名为 rocketmq

配置环境变量

启动RocketMQ

]]></description><category></category></item><item><title><![CDATA[BeanPostProcessor的简单使用]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/115323718</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/115323718</guid><author>Nicholas___</author><pubDate>Tue, 30 Mar 2021 14:21:17 +0800</pubDate><description><![CDATA[日常使用到 BeanPostProcessor 的场景不多，因此不是特别熟悉，查阅了一些资料，写了个Demo，记录下来，遇到问题希望能提供一些解决的思路。
简介
接口定义如下：
public interface BeanPostProcessor {
	@Nullable
	default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		return bean;
	}]]></description><category></category></item><item><title><![CDATA[CommandLineRunner和ApplicationRunner]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/115307021</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/115307021</guid><author>Nicholas___</author><pubDate>Mon, 29 Mar 2021 18:11:59 +0800</pubDate><description><![CDATA[用途
测试Spring Boot应用程序时，有的人习惯写测试用例，有的人习惯写Controller，手动去调用进行测试。有时候我会使用 CommandLineRunner 或 ApplicationRunner 进行测试。测试的方法很简单，直接让带有 @SpringBootApplication 的类实现 CommandLineRunner 并实现它的方法，运行项目即可。
CommandLineRunner 示例如下：
@SpringBootApplication
public class DemoAppl]]></description><category></category></item><item><title><![CDATA[Spring Init method 和 destroy method 的几种使用方式]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/115296808</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/115296808</guid><author>Nicholas___</author><pubDate>Mon, 29 Mar 2021 14:38:56 +0800</pubDate><description><![CDATA[1、@Bean注解方式
public class TestBean {
    public TestBean() {
        System.out.println("constructor");
    }

	/**
	* 初始化的方法名称不一定要使用init，
	* 使用init主要是为了使类结构更清晰，并且不会让人误以为此方法是一个普通方法
	*/
    public void init() {
        System.out.println("init");
    }

	/**]]></description><category></category></item><item><title><![CDATA[RocketMQ中MessageExt属性]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/108689772</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/108689772</guid><author>Nicholas___</author><pubDate>Sun, 20 Sep 2020 09:54:26 +0800</pubDate><description><![CDATA[brokerName：broker名称
queueId：记录MessageQueue编号，消息在Topic下对应的MessageQueue中被拉取
storeSize：记录消息在Broker存盘大小
queueOffset：记录在ConsumeQueue中的偏移
sysFlag：记录一些系统标志的开关状态，MessageSysFlag中定义了系统标识
bornTimestamp：消息创建时间，在Producer发送消息时设置
bornHost：记录发送改消息的producer地址
storeTimestam]]></description><category></category></item><item><title><![CDATA[固态硬盘安装系统]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/108298780</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/108298780</guid><author>Nicholas___</author><pubDate>Sat, 29 Aug 2020 21:04:34 +0800</pubDate><description><![CDATA[下载操作系统
下载操作系统镜像在MSDN下载，下载的系统很干净
https://msdn.itellyou.cn/
或者百度搜索MSDN
做PE
PE (Preinstallation Environment) 预安装环境
比较好用的软件是微PE工具箱
wepe.com.cn
下载好后，电脑插上U盘。把微PE工具箱安装到U盘中即可，安装的时候使用推荐设置就可以，不用修改
拆机，安装固态硬盘
固态硬盘分区
GPT+UEFI

开机按F12选择U盘启动
打开DiskGenius
选择固态硬盘，点击快速分区
选择]]></description><category></category></item><item><title><![CDATA[HashMap和Hashtable的区别]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/104370692</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/104370692</guid><author>Nicholas___</author><pubDate>Tue, 18 Feb 2020 10:37:54 +0800</pubDate><description><![CDATA[HashMap允许用null作为键值对的键或值。Hashtable不允许，在存键为null或值为null的键值对时会抛出NullPointerException
HashMap为线程非安全。Hashtable为线程安全，Hashtable的方法用synchronized修饰
HashMap循环遍历只有一组方法，这个两个方法是由Map接口提供的。keySet()返回键的Set集合  values()...]]></description><category></category></item><item><title><![CDATA[类访问修饰符]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/104370275</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/104370275</guid><author>Nicholas___</author><pubDate>Tue, 18 Feb 2020 10:21:04 +0800</pubDate><description><![CDATA[类内部    同一个包    子类    任何地方
public		y	     y	      y	       y
protected	y	     y	      y
default		y	     y
private		y

public和protected都可以作用于子类，即被子类重写。
父类和子类存在同名静态方法时访问的是父类的方法，子类并不能覆盖父类的方法

...]]></description><category></category></item><item><title><![CDATA[牛客网刷题]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/104370229</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/104370229</guid><author>Nicholas___</author><pubDate>Tue, 18 Feb 2020 10:15:08 +0800</pubDate><description><![CDATA[2019年9月nowcoder刷题记录
关于负数取余的运算，结果的符号和被除数相同
———————————————————————————————————
构造方法名必须与类名相同。方法名可以与类名相同
———————————————————————————————————
关于构造方法的调用：
在类的其他构造方法中可以用this()的方式调用本类中其他构造方法
在一个类的子类中可以通过super...]]></description><category></category></item><item><title><![CDATA[网络编程]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/104324987</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/104324987</guid><author>Nicholas___</author><pubDate>Sun, 16 Feb 2020 12:10:29 +0800</pubDate><description><![CDATA[Socket：计算机操作系统用于网络通讯的端点
传输层实现端到端的通信，因此，每一个传输层连接有两个端点。那么，传输层连接的端点是什么呢？不是主机，不是主机的IP地址，不是应用进程，也不是传输层的协议端口。传输层连接的端点叫做套接字（socket）。根据RFC793的定义：端口号拼接到IP地址就构成了套接字。套接字实际上是一个通信端点。例如，如果IP地址是210.37.145.1，而端口号是23，...]]></description><category></category></item><item><title><![CDATA[快速排序]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/104308535</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/104308535</guid><author>Nicholas___</author><pubDate>Fri, 14 Feb 2020 14:52:48 +0800</pubDate><description><![CDATA[static int i = 1;
	
    public static void main(String[] args) {
        int[] arr = new int[] {9, 5, 7, 2, 6, 4};
        quickSort(arr, 0, arr.length - 1);
        System.out.println(Arrays.toStri...]]></description><category></category></item><item><title><![CDATA[选择排序]]></title><link>https://blog.youkuaiyun.com/Nicholas___/article/details/104298831</link><guid>https://blog.youkuaiyun.com/Nicholas___/article/details/104298831</guid><author>Nicholas___</author><pubDate>Thu, 13 Feb 2020 17:38:14 +0800</pubDate><description><![CDATA[int[] nums = new int[]{3, 36, 22, 5, 87};

for (int i = 0; i &lt; nums.length - 1; i++) {
     int minIndex = i;
     for (int j = i + 1; j &lt; nums.length; j++) {
         if (nums[j] &lt; nums[minI...]]></description><category></category></item></channel></rss>