<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[sinat_39336328的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/sinat_39336328</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sinat_39336328]]></copyright><item><title><![CDATA[effective java第二章]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/121203717</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/121203717</guid><author>sinat_39336328</author><pubDate>Mon, 08 Nov 2021 11:06:41 +0800</pubDate><description><![CDATA[用静态工厂替代构造函数
1、关于可以重复使用对象以及命名的优势理解，但是其中可以返回原返回类型的任何类型，而该返回可以是非公有的。
如下面的例子，unmodifiableSet本身对外声明的返回类型是set接口，但是实际返回的是UnmodifiableSet这样一个非共有的类型。
也就是其实对于静态的工厂函数可以返回一个接口，具体的返回可以是该接口的任何子类，甚至是非公有，这样通过返回类型就明确是什么类型，但是又不关系具体到底是哪个实现类，足够灵活。
    public static &lt;T&gt; ]]></description><category></category></item><item><title><![CDATA[SQL窗口函数]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/120957517</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/120957517</guid><author>sinat_39336328</author><pubDate>Mon, 25 Oct 2021 18:35:57 +0800</pubDate><description><![CDATA[现在存在一个成绩表，成绩表如下：

现在想要得到每个同学在所在班级的排名，这个是明显的窗口函数的应用。
窗口函数常用的语法：&lt;窗口函数&gt;  over (partition by &lt;用于分组的列&gt;  order by &lt;用于排序的列&gt;)
1、可以通过over确定一个窗口，即是该行数据所在的组以及将数据按照指定排序的列进行排序：
例如，以上，对于第一行数据得到的窗口就是包括001以及003的学号的数据，并按照成绩排名，而基于这个窗口进行相应的计算。
2、常见的窗口函数：
● ]]></description><category></category></item><item><title><![CDATA[leetcoed题目记录—142 环形链表（双指针）]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/113634018</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/113634018</guid><author>sinat_39336328</author><pubDate>Thu, 04 Feb 2021 11:49:03 +0800</pubDate><description><![CDATA[leetcoed题目记录—142 环形链表（双指针）
题目理解
这道题其实就是看一个链表是否是一个环，很容易想到的方法就是遍历，走过的记录一下，之后如果出现了走过的节点，那么这个节点就是入环节点，就直接返回即可。但是这种情况是需要O(n)的空间复杂度的。
因此看题解，使用快慢指针的方法。
快慢指针方法

如上图所示，首先，存在一个fast指针，每次走两个，存在一个low指针，每次走一个。
1.如果有环，必定相遇：因为每次fast比low多走一个，所以入环之后，fast一定可以追赶上low
2、并且在一个环内]]></description><category></category></item><item><title><![CDATA[LinkedHashMap与LRU]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/110946695</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/110946695</guid><author>sinat_39336328</author><pubDate>Thu, 10 Dec 2020 09:49:20 +0800</pubDate><description><![CDATA[HashMap
hashMap的元素其实是一个Entry。
1、put方法：其实我们一般用的就是put方法，但是对于HashMap的put方法存在有好几种，什么putIfAbsent等，其各种方法其实都是直接调用的putVal这个方法：
final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
               boolean evict) {
               ....}

其中除了key以及value之外，存在o]]></description><category></category></item><item><title><![CDATA[shrio]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/109490162</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/109490162</guid><author>sinat_39336328</author><pubDate>Wed, 04 Nov 2020 14:49:21 +0800</pubDate><description><![CDATA[shrio
shrio是做权限管理的，对比于spring security是很轻量级的，但是对于功能也会相对有限制。
shrio的功能
功能就是认证（登录实现）、资源权限管理、记住我、加密等

基本简介

首先shrio的内部架构就是三个部分，subject就是指当前的用户（不一定的人）是shrio和外部的jpa、securityManager是对subject进行管理的，相当于一个过滤器和控制器，然后realm是可以自定义的，就是需要的相关的数据，可以看成是一个datasource.之后会从多个角度描述，]]></description><category></category></item><item><title><![CDATA[GRPC]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/109445463</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/109445463</guid><author>sinat_39336328</author><pubDate>Mon, 02 Nov 2020 11:25:31 +0800</pubDate><description><![CDATA[GRPC
grpc是谷歌的rpc框架，通过一个小小的demo，理解一下其工作原理。构建一个java语言调度python语言组成的服务的这样一个demo，对grpc进行充分理解。
首先对于rpc其实之前有过学习,如下图所示：

服务端中的每个服务包含许多的方法，通过一个对外的IP以及端口对外提供服务，客户端即服务调用者在本地开放多个动态代理，在本地需要调度远程服务的时候，仅仅需要调度动态代理提供的服务，看起来貌似就是本地调用一样。。。
总得来说就是，服务端整合出一个服务模块对外提供服务，然后客户端通过动态代理]]></description><category></category></item><item><title><![CDATA[延迟任务-队列实现]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/109248534</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/109248534</guid><author>sinat_39336328</author><pubDate>Fri, 23 Oct 2020 19:44:05 +0800</pubDate><description><![CDATA[延时队列
延迟任务
延迟队列的出现就是为了延迟任务，所谓的延迟任务就是“在一个事件发生之后触发”，并且就执行一次，不具备周期执行的特征。因此延迟任务具备的特征：
1、发起事件的不确定性
2、执行的一次性
常见的延迟任务：
（1）淘宝对于订单生成之后，存在30min的延迟时间，在30min未支付则需要取消订单，因此取消订单就是一个延迟任务。
定时扫描数据库
对于未支付的订单，需要进行定期扫描，判断其产生时间有没有超过固定的时间，如果超过则取消订单。这样做，很明显很垃圾，因为：
（1）你说你扫描数据库，你知道在]]></description><category></category></item><item><title><![CDATA[Java垃圾回收机制]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/108599646</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/108599646</guid><author>sinat_39336328</author><pubDate>Tue, 15 Sep 2020 14:55:28 +0800</pubDate><description><![CDATA[Java内存机制
java内存主要分成两类，一种是栈内存，一种是堆内存。
补充：
按照一个例子来：
public class Person {
    private String name;
    private int age;
    private static int eyesNum;


    public static void main(String[] args){
        Person p=new Person();
    }
    public static int g]]></description><category></category></item><item><title><![CDATA[Java以及网络编程（InetAddress、InetSocketAddress、 NetworkInterface）]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/108589755</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/108589755</guid><author>sinat_39336328</author><pubDate>Mon, 14 Sep 2020 22:35:50 +0800</pubDate><description><![CDATA[InetAddress以及InetSocketAddress
InetAddress是一个Java中的类，这个类种有很多方法，且这些方法都是静态的，因此可以利用类直接进行引用。这个类是封装Ip的，可以获得本机的ip以及本机的主机名，同时这个类支持将将域名转换。而相对的InetSocketAddress是封装ip以及端口的，这个类是有构造函数的，而InnetAddress是不存在构造函数的，而InetSocketAddress的构造函数的属性存在有（String hostname, InetAddress a]]></description><category></category></item><item><title><![CDATA[RPC的小demo]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/108445449</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/108445449</guid><author>sinat_39336328</author><pubDate>Mon, 07 Sep 2020 12:02:04 +0800</pubDate><description><![CDATA[RPC的小demo
理论
RPC其实就是远程程序调用，即Remote Procedure Call,相对于远程程序调用，其实最常见的调用就是本地函数调用，比如main函数中调用两数相加的函数，实现两数相加，这种形式在单体应用中，当然是很常见的，但是对于在分布式的场景下，就无法满足了，比如主机A总是想要主机B上的某些服务，就可以利用远程调用的方式。
但是很容易想到的是，我们可以直接HTTP请求啊，但是利用httpclient需要对于参数这些的设定，无法将模块抽象出来，而RPC则就是要解决远程调用像在本地调用一]]></description><category></category></item><item><title><![CDATA[mybatis-generator]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/107943661</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/107943661</guid><author>sinat_39336328</author><pubDate>Tue, 11 Aug 2020 20:17:43 +0800</pubDate><description><![CDATA[这里写自定义目录标题mybatis-generator前提准备配置配置文件编写generatorConfig.xml编写mybatis-config文件
mybatis-generator
mybatis-generator可以用来自动生成实体类、mapper接口、mapper的xml文件。
前提准备
在数据库表建立完整的前提下
pom.xml中：
       &lt;dependency&gt;
            &lt;groupId&gt;org.mybatis.generator&lt;/g]]></description><category></category></item><item><title><![CDATA[SpringBoot后端解决跨域问题]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/107666649</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/107666649</guid><author>sinat_39336328</author><pubDate>Wed, 29 Jul 2020 15:47:19 +0800</pubDate><description><![CDATA[SpringBoot后端解决跨域问题
对于跨域问题从下面四个方面进行描述
1、从什么时候就跨域了？
一个项目的地址是：http://localhost:8183//jiajiawen
另一个项目地址是：http://localhost:8183//jiajiawen
2、什么原因引起的
当第一个项目需要访问第二个项目的就会出现跨域问题。跨域问题主要是源自于浏览器的同源策略。同源即域名，协议，端口**均相同，只要有一个不同，就是跨域
3、解决——CORS
关于跨域问题的解决前端有很多的方法，这里主要描述后端解]]></description><category></category></item><item><title><![CDATA[关于 @PathVariable  @RequestParam @RequestBody]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/107663527</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/107663527</guid><author>sinat_39336328</author><pubDate>Wed, 29 Jul 2020 14:34:43 +0800</pubDate><description><![CDATA[@PathVariable  @RequestParam 的get请求：
    @GetMapping("/test1/{id}")
    public String show(@PathVariable(value = "id") String stuId,
                       @RequestParam(value = "name",required = true)String name,
                       @RequestParam(value]]></description><category></category></item><item><title><![CDATA[springboot+rabbitMQ实现消息延迟]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/107183589</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/107183589</guid><author>sinat_39336328</author><pubDate>Tue, 07 Jul 2020 16:09:11 +0800</pubDate><description><![CDATA[消息队列
为什么需要消息队列
所有东西的出现都存在一定的原因，消息队列一定是解决了很多问题，所以它才会存在。这个应该也是当我们了解到一个新的知识下的时候首先需要去做的是明确为什么存在这个技术，这个技术可以解决哪些问题，这样再去进行相关的学习，这样你才会对于它的作用理解的更加深刻！
为什么需要消息队列呢？这个可以从一个实际的例子出发：
取快递的例子，菜鸟驿站就是快递员把东西放在菜鸟驿站，我们有时间再去拿，菜鸟驿站就可以理解成一个消息队列。它实现了什么，就是消息队列的作用。
1、解耦：如果没有这样的菜鸟驿站，需]]></description><category></category></item><item><title><![CDATA[springboot整合druid连接池]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/107088927</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/107088927</guid><author>sinat_39336328</author><pubDate>Thu, 02 Jul 2020 17:16:05 +0800</pubDate><description><![CDATA[springboot整合druid连接池
引入依赖
&lt;!--加入druid连接池--&gt;
&lt;!-- https://mvnrepository.com/artifact/com.alibaba/druid --&gt;
&lt;dependency&gt;
    &lt;groupId&gt;com.alibaba&lt;/groupId&gt;
    &lt;artifactId&gt;druid&lt;/artifactId&gt;
    &lt;version&gt;1.1.5&]]></description><category></category></item><item><title><![CDATA[Redis]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/106994673</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/106994673</guid><author>sinat_39336328</author><pubDate>Sun, 28 Jun 2020 11:07:16 +0800</pubDate><description><![CDATA[Redis
Springboot集成Redis
redis常常作为项目中的缓存机制存在。
1、加入依赖
        &lt;!--加入Redis缓存机制--&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
            &lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifactId&]]></description><category></category></item><item><title><![CDATA[git-learn]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/106451172</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/106451172</guid><author>sinat_39336328</author><pubDate>Sun, 31 May 2020 09:11:59 +0800</pubDate><description><![CDATA[所谓的git其实就是完成一个协同开发的作用,你在本地进行了代码的更i新,需要上传到远程库中,实现代码的同步.这样,才能完成有效的团队写作!
简单的说就是把本地的文件上传到团队库中以及从团队库中下载内容的作用!
本地库
$ mkdir learngit  # 建立一个本地文件夹,把想要上传的文件代码放在这里
$ cd learngit  #进入该文件夹
$ pwd # 这个命令是展示当前位置的命令
/Users/michael/learngit
$ git init # 将该文件夹下的文件变成git可以管理的]]></description><category></category></item><item><title><![CDATA[IPerf网络性能测试工具]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/106397990</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/106397990</guid><author>sinat_39336328</author><pubDate>Thu, 28 May 2020 10:48:07 +0800</pubDate><description><![CDATA[最近项目中需要Iperf的工具，因此实施调研了一下。Iperf可以测试TCP以及UDP协议下的一些网络性能，如带宽、丢包率等。
通过这个过程，我好像深刻明白了docker的意义。本身我自己是开了两个虚拟机，进行相关的网络性能的测试，但是呢，我的本子太太太差劲了，开了两个虚拟机，就要炸。在别人的建议下，开了两个docker进行了相关的测试。
过程
测试前准备
拉取Iperf镜像
我自己是去到网易的镜像仓库中去查找拉下来的。
docker pull hub.c.163.com/zrc2015/iperf:lat]]></description><category></category></item><item><title><![CDATA[力扣50题，快速幂法]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/105851246</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/105851246</guid><author>sinat_39336328</author><pubDate>Wed, 29 Apr 2020 23:17:02 +0800</pubDate><description><![CDATA[题目描述：
实现 pow(x, n) ，即计算 x 的 n 次幂函数。

示例 1:

输入: 2.00000, 10
输出: 1024.00000

思路：
5^8=5^4*5^4
5^7=5*5^6
对于负数，5^（-2）=（1/5）^2

代码：
class Solution:
    def myPow(self, x: float, n: int) -&gt; float:
      ...]]></description><category></category></item><item><title><![CDATA[SpringBoot集成国际化]]></title><link>https://blog.youkuaiyun.com/sinat_39336328/article/details/105740940</link><guid>https://blog.youkuaiyun.com/sinat_39336328/article/details/105740940</guid><author>sinat_39336328</author><pubDate>Fri, 24 Apr 2020 22:30:50 +0800</pubDate><description><![CDATA[1、在resources下建立i18n文件夹，并在文件夹下建立login.properties文件，之后建立login_en_US.properties文件，之后识别这是一个国家化的文件，会出现“Resource Bundle ‘login’”，之后右键这个标记，new-add一个
操作如图片：

输入语言_地区（如：en_US）就可以新建一个另一个语言的文件。
2、设置默认字符设置（防止乱码）：...]]></description><category></category></item></channel></rss>