<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[codeMilk]]></title><description><![CDATA[个人的成长记录]]></description><link>https://blog.youkuaiyun.com/ytulnj</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ytulnj]]></copyright><item><title><![CDATA[树的几种遍历方式]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/104675874</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/104675874</guid><author>ytulnj</author><pubDate>Thu, 05 Mar 2020 15:22:24 +0800</pubDate><description><![CDATA[主要记录一下对于二叉树，进行遍历的几种方式，包括：

前序遍历
中序遍历
后序遍历
深度优先遍历
广度优先遍历



我们以下面的这个二叉树结构为例，分别描述一下这几种遍历的方式有什么不同，以及给出java实现的代码。


几种遍历的区别
我们知道，一个二叉树有根节点，左节点，左节点。
我们遍历的顺序肯定先是左节点，再右节点。前序、中序、后序的区别就是根节点的位置。
如果根节点在左节点前面，那么就...]]></description><category></category></item><item><title><![CDATA[基于Docker的MySQL主从复制环境搭建]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/104124364</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/104124364</guid><author>ytulnj</author><pubDate>Fri, 31 Jan 2020 15:01:26 +0800</pubDate><description><![CDATA[1. 前言
之前的程序架构可能是这样的一种形式：

当程序体量扩大后，我们进行扩展，可能会扩展多个后台服务实例，但数据库还是只有一个，所以系统的瓶颈还是在数据库上面，所以这次的主要任务就是对数据库进行扩展，主要形式为：扩展多台数据库实例，实现读写分离，对于一些写的任务分配到主数据库，对于读的任务使用子数据库进行读取。从而提高系统性能。
修改后的架构如下所示：

2. 环境预搭建
这次使用docke...]]></description><category></category></item><item><title><![CDATA[Mybatis是如何实现SQL防注入的]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/103863108</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/103863108</guid><author>ytulnj</author><pubDate>Mon, 06 Jan 2020 18:54:52 +0800</pubDate><description><![CDATA[Mybatis这个框架在日常开发中用的很多，比如面试中经常有一个问题：$和#的区别，它们的区别是使用#可以防止SQL注入，今天就来看一下它是如何实现SQL注入的。
什么是SQL注入
在讨论怎么实现之前，首先了解一下什么是SQL注入，我们有一个简单的查询操作：根据id查询一个用户信息。它的sql语句应该是这样：select * from user where id = 。我们根据传入条件填入id进行...]]></description><category></category></item><item><title><![CDATA[Java位运算符详解]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/103808904</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/103808904</guid><author>ytulnj</author><pubDate>Thu, 02 Jan 2020 18:07:22 +0800</pubDate><description><![CDATA[前言
之前了解过位运算符，左移等于除以2。但是我在看jdk源码的时候发现了一个>>>三个符号的，不明白这是什么意思，就去搜了一下，发现还挺多的知识点的，就整理了一下。
首先我们知道，我们编写的程序最终都是在计算机底层进行的，计算机底层也仅支持0、1两种符号。所以当时网上有个键盘只有0、1两个键，那才是大佬用的键盘。扯远了。。。
先来复习一下java的基本类型都占多少字节，占多少位（1字节等于8位）...]]></description><category></category></item><item><title><![CDATA[手写红黑树的简单实现]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/103807903</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/103807903</guid><author>ytulnj</author><pubDate>Thu, 02 Jan 2020 17:17:23 +0800</pubDate><description><![CDATA[基于《算法》一书的红黑树的插入和删除。看过不同的教材，也有不同的实现方式，但是最终的结果也大致相同，感觉这个比较容易理解，就采用这种的方式来进行简单实现。
定义树节点的实体类型

private static final boolean RED = true;
private static final boolean BLACK = false;

/**
     * 红黑树的节点结构
    ...]]></description><category></category></item><item><title><![CDATA[将链表转换为树]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/103807761</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/103807761</guid><author>ytulnj</author><pubDate>Thu, 02 Jan 2020 17:11:12 +0800</pubDate><description><![CDATA[题目来源
今天做了个题：

将一个链表里的数据组装树形结构，链表里的数据已经满足树形结构要求



这道题描述的很简单，但是有很多种情况。他只说了链表数据满足树形结构要求，并没有说明数据到底是什么样的，也就是题目参数具有多样性，这样其实我们给出一种解决方案就可以。而且也只要求将链表转换为树，并没有说是什么树。所以这道题说难也难，说简单也简单。
解题思路
最近也将平衡二叉树的原理看了一下，正好借着这...]]></description><category></category></item><item><title><![CDATA[内网穿透并绑定自己的域名-frp]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/89351881</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/89351881</guid><author>ytulnj</author><pubDate>Fri, 19 Apr 2019 10:30:54 +0800</pubDate><description><![CDATA[一：环境需求
一台有公网ip的机器，一台内网的机器(以树莓派为例)
使用软件：nginx、frp
frp软件地址：https://github.com/fatedier/frp
申请自己的域名，并将域名解析到公网ip(可以为三级或四级域名)
二：frp配置
我们首先需要根据自己的机型下载适合的版本，要注意的是服务器与客户端都要使用同一个frp版本
下载地址：https://github.com/f...]]></description><category></category></item><item><title><![CDATA[只出现一次的数字-LeetCode136]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/89351951</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/89351951</guid><author>ytulnj</author><pubDate>Wed, 17 Apr 2019 11:05:16 +0800</pubDate><description><![CDATA[题目是这么说的：
给定一个非空整数数组，除了某个元素只出现一次以外，其余每个元素均出现两次。找出那个只出现了一次的元素。
示例1：
输入：[2,2,1]
输出：1

示例2：
输入：[4,1,2,1,2]
输出：4

刚开始是这样想的，先进行排序，然后我们两个一组，如果这两个数字一样，则开始下一组。如果不一样，那么第一个就是我们要找的元素。我们这组元素是奇数个，所以如果前面的都是相同的，那最后剩下...]]></description><category></category></item><item><title><![CDATA[微信支付宝小程序二码合一]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/88963877</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/88963877</guid><author>ytulnj</author><pubDate>Tue, 02 Apr 2019 09:54:02 +0800</pubDate><description><![CDATA[随着现在小程序的流行，许多软件也将web页面转入到小程序之中。官方也给出了小程序生成的接口，但是如果我们微信和支付宝小程序都做了，展示两个二维码让用户扫描总是不好的，我们这里就是记录一下如果将微信小程序与支付宝小程序的二维码合并成一个，用户使用微信扫码时跳转到微信小程序，用户使用支付宝扫码时跳转到支付的小程序，并且跳转页面、携带参数都可以我们自定义。
​	其实我用的都是官网给出的文档，只是有时候大...]]></description><category></category></item><item><title><![CDATA[使用树莓派与花生壳作为个人服务器]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/87384641</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/87384641</guid><author>ytulnj</author><pubDate>Fri, 15 Feb 2019 21:44:51 +0800</pubDate><description><![CDATA[最近入手了一个树莓派3B+，准备把它作为个人服务器使用。所以在此记录一下安装与使用过程中的步骤。

刷系统
去树莓派官网下载系统输入内存卡中，我使用的官方系统Raspberry
https://www.raspberrypi.org/downloads/ 。下载完成后刷入内存卡中。
设置远程ssh访问
使用文本编辑器写一个空文件命名为ssh存放到内存卡boot下
更新设置
我使用的是桌面版，连接显...]]></description><category></category></item><item><title><![CDATA[利用goaccess实时监控nginx的访问日志]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/85125760</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/85125760</guid><author>ytulnj</author><pubDate>Thu, 20 Dec 2018 16:21:33 +0800</pubDate><description><![CDATA[​	这篇文章主要写一下我在利用goaccess对nginx生成的访问日志时的经历。
​	最终会生成一个下面类似的网页：
​	这篇文章主要写一下我在利用goaccess对nginx生成的访问日志时的经历。
​	最终会生成一个下面类似的网页：

​	我们在nginx配置文件中可以对总体的访问或单个项目的访问生成日志，我们可以对日志生成网页更加直观的查看访问信息。
这是我在nginx配置文件中的配置:
...]]></description><category></category></item><item><title><![CDATA[nginx和tomact使用https]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/84586233</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/84586233</guid><author>ytulnj</author><pubDate>Wed, 28 Nov 2018 16:19:44 +0800</pubDate><description><![CDATA[总体的流程如下：
进入网站（http或https）-&amp;gt; nginx（存储静态信息，页面，图片等）
如果需要走后台（tomact），对后台项目名称进行拦截，比如我们在A静态项目中需要访问B后台项目中的接口，那么我们对B文件利用nginx进行分发。
由于A访问B文件会有跨域问题，我们在nginx解决跨域。	
nginx.conf文件

#user  nobody;
user  root;	// ...]]></description><category></category></item><item><title><![CDATA[微信小程序支付]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/84296880</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/84296880</guid><author>ytulnj</author><pubDate>Tue, 20 Nov 2018 13:10:36 +0800</pubDate><description><![CDATA[微信小程序支付流程：

先直接上代码
public Object devicePay(int userId,String deviceCode, double money,String time) {
        ResultBean result = new ResultBean();
    	//判断设备是否存在
        Device isExist = deviceDao.se...]]></description><category></category></item><item><title><![CDATA[java对二维码个性修改]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/84070339</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/84070339</guid><author>ytulnj</author><pubDate>Wed, 14 Nov 2018 17:25:08 +0800</pubDate><description><![CDATA[​		最近有一个业务需求，生成微信小程序二维码，中间的logo变成用户上传的logo，下方添加上一行文字
​			网上有一些图片覆盖或者添加文字的代码，但是没有两种情况都进行的代码，对找到的代码进行了一些拼凑踩了一些坑最终完成了需求，生成二维码，中间logo改变为用户上传的图片，二维码下方添加上一行文字。
/**
     * 将酒店二维码，酒店logo，酒店名合并到一张图片中。
     * @...]]></description><category></category></item><item><title><![CDATA[网络租车系统]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/80638950</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/80638950</guid><author>ytulnj</author><pubDate>Sun, 10 Jun 2018 10:23:54 +0800</pubDate><description><![CDATA[毕业设计-基于SSM架构的网络租车系统



项目来源：

之前就做了一个简易的租车都不能说是项目的项目，就是将数据库中的信息在页面以表格形式展示，输入租车天数，租赁数量确定租车信息。所以毕业设计以此为思路做一个项目。



项目代码地址

https://github.com/liunaijie/car-project 。里面包含论文



项目说明：

项目定位是一个租车平台，即将线下租车公司...]]></description><category></category></item><item><title><![CDATA[IDEA导入elipse项目]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/80318375</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/80318375</guid><author>ytulnj</author><pubDate>Tue, 15 May 2018 09:31:50 +0800</pubDate><description><![CDATA[ 
选择导入类型，我们是导入的elipse项目，如果导入的是maven项目则选择maven

 
 这里是导入文件路径。默认即可 
  
  选择导入的项目。 
    
  选择jdk版本，如果没有则可以点击绿色加号添加。 
  
 项目导入后点击 file -&amp;gt; project structure 或点击右上侧的图标修改项目。 
   
 点击 project 修改项目的jdk版本，和编...]]></description><category></category></item><item><title><![CDATA[卸载Oracle]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/80224910</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/80224910</guid><author>ytulnj</author><pubDate>Mon, 07 May 2018 14:04:12 +0800</pubDate><description><![CDATA[由于Oracle安装之后卸载并不简单，所以将自己这几天的经验总结一下。 
首先将计算机服务中的Oracle服务停掉。 
 
将Oracle开头的都停止。 
然后是将服务文件删除。 
在运行窗口输入regedit，打开注册表。然后展开HKEY_LOCAL_MACHINE\SOFTWARE，找到oracle，删除。 
找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControl...]]></description><category></category></item><item><title><![CDATA[java实现经典算法]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/78645859</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/78645859</guid><author>ytulnj</author><pubDate>Mon, 27 Nov 2017 15:52:41 +0800</pubDate><description><![CDATA[冒泡排序/**
*冒泡排序
*比较相邻的两个元素，如果第一个比第二个大则将两个交换顺序
*i<numbers.length 控制排序轮数 一般为数组长度减1次，因为最后一次循环只剩下一个数组元素，不需要对比，同时数组已经完成排序了
*j<numbers.length-i  因为经过一个排序后，最大（或最小）的元素都已经放到了数组的最后一位，下次不用再进行比较。所以长度改变
*/
public voi]]></description><category></category></item><item><title><![CDATA[Cassandra的安装与集群部署]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/78604074</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/78604074</guid><author>ytulnj</author><pubDate>Wed, 22 Nov 2017 15:18:45 +0800</pubDate><description><![CDATA[一：前提 
安装jdk1.8以上，python2.7 
二：安装Cassandra 
Cassandra的下载地址：http://cassandra.apache.org/download/ 
下载后将文件解压到某目录下， 
然后配置环境变量 
CASSANDRA_HOME为你解压的目录， 
path为%CASSANDRA_HOME%\bin 
然后用管理员身份运行cmd（不然可能提示权限不够） ...]]></description><category></category></item><item><title><![CDATA[list循环添加相同的map]]></title><link>https://blog.youkuaiyun.com/ytulnj/article/details/78082934</link><guid>https://blog.youkuaiyun.com/ytulnj/article/details/78082934</guid><author>ytulnj</author><pubDate>Mon, 25 Sep 2017 10:55:04 +0800</pubDate><description><![CDATA[list里面嵌套map，如果map相同，后面的map信息会替代前面的map信息，所以要将map的new放在循环里

如果将map放在循环外，list的信息将全为最后一个map的信息



Map map=new HashMap();
List list=new ArrayList();
for (int i=0;i&amp;lt;10;i++){
   map.put(&quot;first&quot;,i);
   map...]]></description><category></category></item></channel></rss>