<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[BORRISEE6的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/BORRISEE6</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; BORRISEE6]]></copyright><item><title><![CDATA[https是如何验证证书的有效性的]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/117410514</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/117410514</guid><author>BORRISEE6</author><pubDate>Mon, 31 May 2021 10:59:51 +0800</pubDate><description><![CDATA[证书验证的过程是使用非对称加密的，客户端对服务器端发起请求，服务器返回一个证书，客户端验证这个证书的合法性，如果这个证书是合法的，那么就生成一个随机值，利用这个随机值作为对称加密的钥匙


一个数字证书通常包含了：- 公钥；- 持有者信息；- 证书认证机构（CA）的信息；- CA 对这份文件的数字签名及使用的算法；- 证书有效期；- 还有一些其他额外信息；


为了让服务端的公钥被大家信任，服务端的证书都是由 CA （Certificate Authority，证书认证机构）签名的，CA 就是网络世界里的.]]></description><category></category></item><item><title><![CDATA[系统的TPS不达标，此时如何优化]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/116610801</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/116610801</guid><author>BORRISEE6</author><pubDate>Mon, 10 May 2021 21:14:22 +0800</pubDate><description><![CDATA[对系统进行压测，比如每秒压个几百请求到几千请求，甚至上万请求，此时发现死活压不上去，压来压去，你的系统最多每秒就处理几百个请求，根本到不了几千个请求，此时就发现系统的TPS不达标。
这个时候，如果发现TPS不达标，通常是说明你系统肯定是每个请求处理时间太长了，所以就导致你单位时间内，在有限的线程数量下，能处理的TPS就少了，这个时候往往要先优化性能，再提TPS。
假设你一共有200个线程，结果你每个请求要耗费500ms，每个线程每秒就只能处理2个请求，200个线程每秒只能处理400个请求，比期望的单机处理5]]></description><category></category></item><item><title><![CDATA[NIO笔记（1）]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/115398840</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/115398840</guid><author>BORRISEE6</author><pubDate>Tue, 13 Apr 2021 17:37:46 +0800</pubDate><description><![CDATA[NIO（同步非阻塞）基本架构


Selector、Channel、Buffer


每一个Channel对应一个Buffer，Channel是双向的
程序切换到Channel是由事件决定的，Event是一个重要的概念
Selector对应一个线程，一个线程对应多个Channel
Selector根据不同的事件，在各个通道上进行切换
Buffer就是一个内存块，是双向的，底层是有一个数组
数据的读写是通过Buffer

理解非阻塞的概念（关注的是程序在等待调用结果(消息，返回值)时的状态）
从上图理解非阻塞]]></description><category></category></item><item><title><![CDATA[tail命令]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/115664219</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/115664219</guid><author>BORRISEE6</author><pubDate>Tue, 13 Apr 2021 13:57:15 +0800</pubDate><description><![CDATA[查看文件内容

现有itbilu.log日志文件，查看其后5行：


$ tail -n -5 itbilu.log
// 或
$ tail -n 5 itbilu.log
// 或
$ tail -5 itbilu.log


查看第100行至文件末尾：


$ tail -n +100 itbilu.log
// 或
$ tail +100 itbilu.log


配合head命令，实现查看文件的第10到20行：


$ head -20 itbilu.log | tail -10

实时查看日志

]]></description><category></category></item><item><title><![CDATA[postman 中 form-data、x-www-form-urlencoded 的区别]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/115654556</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/115654556</guid><author>BORRISEE6</author><pubDate>Tue, 13 Apr 2021 09:42:52 +0800</pubDate><description><![CDATA[form-data
就是 http 请求中的 multipart/form-data, 它会将表单的数据处理为一条消息，以标签为单元，用分隔符分开。既可以上传键值对，也可以上传文件。当上传的字段是文件时，会有 Content-Type 来说明文件类型；content-disposition，用来说明字段的一些信息；
由于有 boundary 隔离，所以 multipart/form-data 既可以上传文件，也可以上传键值对，它采用了键值对的方式，所以可以上传多个文件。


x-www-form-url..]]></description><category></category></item><item><title><![CDATA[SpringBoot结合Netty实现WebSocket推送功能]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/115354114</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/115354114</guid><author>BORRISEE6</author><pubDate>Thu, 01 Apr 2021 17:06:37 +0800</pubDate><description><![CDATA[文章目录Http协议WebSocket代码演示总结：
Http协议

无状态，使得HTTP服务轻量级-
HTTP消息冗长：HTTP消息包含消息头，消息体，换行符等。且大多采用文本传输。所以HTTP消息会有很多冗余消息并且消息占用字节数大，消耗过多的带宽
半双工通信：同一时刻，数据只能往同一方向传输。比如向服务器发送消息时，服务器此时不可以向客户端发送消息。（不过目前HTTP2已经支持了全双工通信）
1、WebSocket可以由tomcat和netty进行实现，这里选择用netty进行实现

WebSocke]]></description><category></category></item><item><title><![CDATA[多生产多消费者问题]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/115248333</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/115248333</guid><author>BORRISEE6</author><pubDate>Fri, 26 Mar 2021 17:39:26 +0800</pubDate><description><![CDATA[注意事项：

保证生产者不会在缓冲区满的时候继续向缓冲区放入数据，而消费者也不会在缓冲区空的时候，消耗数据
	当缓冲区满的时候，生产者会进入休眠状态，当下次消费者开始消耗缓冲区的数据时，生产者才会被唤醒，开始往缓冲区中添加数据；当缓冲区空的时候，消费者也会进入休眠状态，直到生产者往缓冲区中添加数据时才会被唤醒
应用场景

任务的处理时间比较长的情况下：比如上传附件并处理，那么这个时候可以将用户上传和处理附件分成两个过程，用一个队列暂时存储用户上传的附近，然后立刻返回用户上传成功，然后有专门的线程处理队列中的]]></description><category></category></item><item><title><![CDATA[记录下自己搜索日志]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/113847888</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/113847888</guid><author>BORRISEE6</author><pubDate>Thu, 18 Feb 2021 16:07:49 +0800</pubDate><description><![CDATA[这是在打开陈浩网站跳出来的一个方框，再次看陈浩老师的文字被他深深的震撼了

大家好，我是陈皓，网名左耳朵耗子（很多人问我为什么要叫这个“一只耳”的名字，你们猜），对了，我真的不是高手，我也不是牛人，离他们的距离还很大。我从2003年开始在网上记录一些自己的技术知识和想法，今天我还在努力学习希望能成长一个高手，因为，面对生活在今天这样技术日新月异的时代，我们每个人都是一个新人。

我很幸运出生在这个时代——第三次工业革命的时代，也很幸运选对了专业，所以，可以算是一只“风口上的猪”了，就是运气好，赶上了这...]]></description><category></category></item><item><title><![CDATA[手写LRU算法]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/113811686</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/113811686</guid><author>BORRISEE6</author><pubDate>Sun, 14 Feb 2021 22:11:43 +0800</pubDate><description><![CDATA[https://zhuanlan.zhihu.com/p/350761093

]]></description><category></category></item><item><title><![CDATA[idea开启远程调试]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/113588964</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/113588964</guid><author>BORRISEE6</author><pubDate>Wed, 03 Feb 2021 10:58:59 +0800</pubDate><description><![CDATA[在线上的环境和本地开发的环境不一样，当线上出现问题时

idea开启远程调试这个技能在工作中还是很实用的，首先需要在服务器上按这行命令启动


​
java -jar -Xms512m -Xmx512m  -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 jar --server.port=9030

​

然后再idea以debug方式启动就行了
...]]></description><category></category></item><item><title><![CDATA[堆排序]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/113526046</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/113526046</guid><author>BORRISEE6</author><pubDate>Mon, 01 Feb 2021 18:03:20 +0800</pubDate><description><![CDATA[public class HeapSort {

    public static void main(String[] args) {
        int[] arr={2,3,1,4,7,5};
        new HeapSort().sort(arr);
    }

    public void sort(int[] arr){
        int n=arr.length;
        for(int i=n/2-1;i&gt;=0;i--){
            he.]]></description><category></category></item><item><title><![CDATA[实现一个简单的hashmap]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/113525653</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/113525653</guid><author>BORRISEE6</author><pubDate>Mon, 01 Feb 2021 17:46:53 +0800</pubDate><description><![CDATA[/**
 * 实现hashmap
 */
public class MyHashMap {
    private final int N=10000;
    private Node[] arr;
    public MyHashMap(){
        arr=new Node[N];
    }
    public static void main(String[] args) {
        MyHashMap hm=new MyHashMap();
        hm.put(1.]]></description><category></category></item><item><title><![CDATA[跨域的问题排查]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/110873396</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/110873396</guid><author>BORRISEE6</author><pubDate>Fri, 22 Jan 2021 15:41:54 +0800</pubDate><description><![CDATA[刚入职的第一天，就碰到了一个问题就是跨域加上权限认证的问题，排查了一天的问题，最后通过


import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
im]]></description><category></category></item><item><title><![CDATA[删除链表中重复的的数字]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/110748644</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/110748644</guid><author>BORRISEE6</author><pubDate>Mon, 11 Jan 2021 15:57:21 +0800</pubDate><description><![CDATA[在一个排序的链表中，存在重复的结点，请删除该链表中重复的结点，重复的结点不保留，返回链表头指针。 例如，链表1-&gt;2-&gt;3-&gt;3-&gt;4-&gt;4-&gt;5 处理后为 1-&gt;2-&gt;5



这是我面试美团时候考的题目，在牛客网J56，对于链表在我们大学的第一次学数据结构就接触了，但是不能说处理这种题目很容易。面试就是这种套路，当面试官觉得你的项目没什么亮点时，就会考察你的算法能力。



废话少说，先上代码


public class Solution {
   ..]]></description><category></category></item><item><title><![CDATA[ABC三个线程如何顺序打印ABC]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/112200671</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/112200671</guid><author>BORRISEE6</author><pubDate>Mon, 04 Jan 2021 20:32:45 +0800</pubDate><description><![CDATA[package com.macro.mall.demo.xiancheng;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class C {
    public static void main(String[] args) {
        Data3 data.]]></description><category></category></item><item><title><![CDATA[Spring 操作Mongo 进行增删改查]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/111743897</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/111743897</guid><author>BORRISEE6</author><pubDate>Sun, 27 Dec 2020 12:12:24 +0800</pubDate><description><![CDATA[首先先贴上一个我在查阅资料时参考的一个链接，https://www.jianshu.com/p/a576499769ae，这篇文章大概讲解了如何利用Spring 操作Mongo进行增删改查。但是笔者在实际的开发过程中，遇到了多对多的模型设计，当然笔者第一时间也在互联网搜索了相关的资料，最终采用的设计，是存一个List集合。


  "_id" : ObjectId("5ea132115cbf0e0d3a5d5578"),
    "Self" : {
        "PersonId" : "1",
 .]]></description><category></category></item><item><title><![CDATA[spring操作mongo进行增删改查]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/111694061</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/111694061</guid><author>BORRISEE6</author><pubDate>Fri, 25 Dec 2020 17:29:57 +0800</pubDate><description><![CDATA[https://www.jianshu.com/p/a576499769ae
]]></description><category></category></item><item><title><![CDATA[JVM调优]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/111693859</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/111693859</guid><author>BORRISEE6</author><pubDate>Fri, 25 Dec 2020 17:26:20 +0800</pubDate><description><![CDATA[https://blog.youkuaiyun.com/qq_40368860/article/details/84494124
]]></description><category></category></item><item><title><![CDATA[实现分布式id]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/111693733</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/111693733</guid><author>BORRISEE6</author><pubDate>Fri, 25 Dec 2020 17:24:44 +0800</pubDate><description><![CDATA[如何实现分布式id，搜索相关的资料，一般会给出这几种方案：

使用数据库自增Id
	使用reids的incr命令
	使用UUID
	Twitter的snowflake算法
	利用zookeeper生成唯一ID
	MongoDB的ObjectId
]]></description><category></category></item><item><title><![CDATA[开发工具]]></title><link>https://blog.youkuaiyun.com/BORRISEE6/article/details/110467436</link><guid>https://blog.youkuaiyun.com/BORRISEE6/article/details/110467436</guid><author>BORRISEE6</author><pubDate>Sat, 12 Dec 2020 22:47:59 +0800</pubDate><description><![CDATA[1、开启热部署

2、开启rundashborad

https://blog.youkuaiyun.com/sheinenggaosuwo/article/details/86624759?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&amp;depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogC]]></description><category></category></item></channel></rss>