<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[silencer1024的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/silencer1024</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; silencer1024]]></copyright><item><title><![CDATA[A,B,C三个人是好朋友,每个人手里都有一些糖果,我们不知道他们每个人手上具体有多少个糖果,但是我们知道以下的信息： A - B, B - C, A + B, B + C. 这四个数值.每个字母代表每]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/108190071</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/108190071</guid><author>silencer1024</author><pubDate>Sun, 23 Aug 2020 22:36:27 +0800</pubDate><description><![CDATA[这道题目的实质是：判断三元一次方程组是否有解及求解。
把题目条件用方程式表示：
A-B=Y1;
B-C=Y2;
A+B=Y3;
B+C=Y4;
用消元法求解：
A=(Y1+Y3)/2;
B=(Y3-Y1)/2=(Y2+Y4)/2;
C=(Y4-Y2)/2;
public class Main1 {
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    while (scanner.]]></description><category></category></item><item><title><![CDATA[使用队列实现栈]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/108175253</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/108175253</guid><author>silencer1024</author><pubDate>Sat, 22 Aug 2020 21:43:09 +0800</pubDate><description><![CDATA[push(x) – 元素 x 入栈
pop() – 移除栈顶元素
top() – 获取栈顶元素
empty() – 返回栈是否为空
public class Test2 {
private Queue&lt;Integer&gt; queue1 = new LinkedList&lt;&gt;();
private Queue&lt;Integer&gt; queue2 = new  LinkedList&lt;&gt;();
//入栈
public void push(int x){
    queue1]]></description><category></category></item><item><title><![CDATA[输入两个字符串，从第一字符串中删除第二个字符串中所有的字符。例如，输入”They are students.”和”aeiou”，则删除之后的第一个字符串变成”Thy r stdnts.”]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/108161191</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/108161191</guid><author>silencer1024</author><pubDate>Fri, 21 Aug 2020 23:26:21 +0800</pubDate><description><![CDATA[输入：每个测试输入包含2个字符串
输出：输出删除后的字符串
输入：They are students
aeiou
输出：Thy r stdnts
思路：直接简单暴力一点，传进来两个字符串，str1是要根据str2来删除的，先将str1转成char类型数据保存数组里面，然后for循环，用contains方法检测只要不是str2里面的字符串就直接输出
import java.util.Scanner;
public class Main {
public static void main(String[] ar]]></description><category></category></item><item><title><![CDATA[对于一个字符串，请设计一个算法，判断其是否为一个合法的括号串。   给定一个字符串A和它的长度n，请返回一个bool值代表它是否为一个合法的括号串。]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/108133961</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/108133961</guid><author>silencer1024</author><pubDate>Thu, 20 Aug 2020 21:06:41 +0800</pubDate><description><![CDATA[测试用例："(()())",6
返回：true
测试用例："()a()()",7
返回：false
测试用例："()(()()",7
返回：false
思路：1.碰到")“开始弹出栈顶的”("，如果此时栈为空，则返回false
2.碰到其他内容直接返回false
3.字符串结尾时，栈非空返回false
public class Main2 {
public static boolean chkParenthesis(String string, int n){
    Stack&lt;Character&]]></description><category></category></item><item><title><![CDATA[读入一个字符串str，输出字符串str中的连续最长的数字串]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/108133872</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/108133872</guid><author>silencer1024</author><pubDate>Thu, 20 Aug 2020 21:03:15 +0800</pubDate><description><![CDATA[输入：abcd12345ed125ss123456789
输出：123456789
思路：用max表示经过的数字长度最大值，count表示数字计数器，当为字母时重置为0，end表示数字尾部，每次满足数字时，对max进行判断，当max小于于count时，更新max和end
public class Main1 {
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    while (s]]></description><category></category></item><item><title><![CDATA[面向对象编程中 super、final、this、abstract关键字和  interface接口详解]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/108110435</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/108110435</guid><author>silencer1024</author><pubDate>Wed, 19 Aug 2020 20:59:24 +0800</pubDate><description><![CDATA[一、this关键字
this：表示当前对象的引用
1.在静态方法内部，不能使用this
2.this通过点号，可以访问普通的成员变量
3.this可以再构造方法中，调用另一个构造方法（代码必须放在第一行），只能调用一次
二、super关键字
super：代表父类对象的引用
1.super（） 表示调用父类的构造方法（必须放在第一行）
2.super.data 调用父类属性
3.super.func（） 调用父类的成员方法
三、final关键字
1.final修饰的变量或者字段，表常量（不能被修改）
2.fi]]></description><category></category></item><item><title><![CDATA[详解重写和重载的区别 看完不会举报我]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/108089006</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/108089006</guid><author>silencer1024</author><pubDate>Tue, 18 Aug 2020 22:24:02 +0800</pubDate><description><![CDATA[一、方法的重载
1.方法名相同
2.方法参数不同（个数、类型）
3.方法的返回值类型不影响重载
为了更直观的了解 我举一个代码的例子
class Test{
public static void main(String[] args) {
    int a = 10;
    int b = 20;
    int ret = add(a, b);
    System.out.println("ret = " + ret);

    double a2 = 10.5;
    double b2 = ]]></description><category></category></item><item><title><![CDATA[二维数组的实现及打印]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/108081561</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/108081561</guid><author>silencer1024</author><pubDate>Tue, 18 Aug 2020 16:47:13 +0800</pubDate><description><![CDATA[以int类型为例
public class Array {
public static void main(String[] args) {
int[][] array = new int[][]{{1,2,3,},{4,5,6}};
    //第一种for循环打印
    for (int i = 0; i &lt; array.length; i++) {
        for (int j = 0; j &lt; array[i].length; j++) {
            System]]></description><category></category></item><item><title><![CDATA[“回文串”是一个正读和反读都一样的字符串。比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串，生日的时候她得到两个礼物分别是字符串A和字符串B。]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/108059077</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/108059077</guid><author>silencer1024</author><pubDate>Mon, 17 Aug 2020 16:43:30 +0800</pubDate><description><![CDATA[“回文串”是一个正读和反读都一样的字符串，比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串，生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求，帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。
例如：
A = “aba”，B = “b”。这里有4种把B插入A的办法：

在A的第一个字母之前: “baba” 不是回文
在第一个字母‘a’]]></description><category></category></item><item><title><![CDATA[单链表：编写代码，以给定值x为基准将链表分割成两部分，所有小于x的结点排在大于或等于x的结点之前]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/108058051</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/108058051</guid><author>silencer1024</author><pubDate>Mon, 17 Aug 2020 16:09:31 +0800</pubDate><description><![CDATA[public Node partition(int x){
    //bs、be分别为小于x节点左侧的首和尾、
    //as、ae分别为大于x节点右侧的首和尾
    Node bs = null;
    Node be = null;
    Node as = null;
    Node ae = null;
    Node cur = this.head;
    while (cur != null){
        if (cur.data &lt; x){
            ]]></description><category></category></item><item><title><![CDATA[新手福利：linux最基础的最常用最实用的命令  全部干货，不说一句废话]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/108046727</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/108046727</guid><author>silencer1024</author><pubDate>Mon, 17 Aug 2020 00:00:51 +0800</pubDate><description><![CDATA[一、基本指令
**ls/ll：**罗列目录的所有文件与信息
**cd：**切换目录
**pwd：**查看目录所在的绝对路径
**touch：**创建空文件，如果文件存在只更新文件的最后修改时间
**cat：**查看文件内容（查看小文件）
**echo：**显示内容
**mkdir：**创建目录
**rm：**删除（谨慎使用）
**mv：**移动文件/重命名文件
**cp：**复制文件
**man：**查看帮助手册
**less：**查看文件内容，支持翻页，打开大文件时效率高（延时加载，不会		       ]]></description><category></category></item><item><title><![CDATA[详解TCP协议（四），保活机制（心跳包）]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/108046585</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/108046585</guid><author>silencer1024</author><pubDate>Sun, 16 Aug 2020 23:42:32 +0800</pubDate><description><![CDATA[九、粘包问题
严格粘包问题不是TCP自身机制，而是面向字节流传输所具备的共性问题
粘包：粘的应用层数据报，导致处理数据的时候，容易读取半个应用层数据报
HTTP协议基于TCP的应用层协议，自己会处理好粘包问题：
1.对于GET请求，分隔符就是空行
2.对于POST请求，Content-length指定包的长度
十、保活机制
1.进程崩溃，这种情况下，TCP连接会正常四次挥手（只要进程退出，都会自动关闭相关的文件）
2.主机关机（按流程关机），关机时会强制先杀进程，杀进程过程中就进行四次挥手
3.主机断电/网]]></description><category></category></item><item><title><![CDATA[JDBC编程的基本流程（代码模板）]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/108015869</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/108015869</guid><author>silencer1024</author><pubDate>Fri, 14 Aug 2020 23:55:30 +0800</pubDate><description><![CDATA[以插入用户操作为例：
DBUtil类及其相关方法参考上一篇文章
public void add(User user) {
    // JDBC 编程的基本流程
    // 1. 先获取和数据库的连接(DataSource)
    Connection connection = DBUtil.getconnection();
    // 2. 拼装 SQL 语句(PrepareStatement)
    String sql = "insert into user value(null,?,?,?)]]></description><category></category></item><item><title><![CDATA[一般项目，创建一个DBUtil类进行封装，管理连接（代码模板）]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/108015850</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/108015850</guid><author>silencer1024</author><pubDate>Fri, 14 Aug 2020 23:51:08 +0800</pubDate><description><![CDATA[import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
// DBUtil 本质上是一个管理了单例的 DataSource 的类
public class DBU]]></description><category></category></item><item><title><![CDATA[详解TCP协议（三）]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/107994260</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/107994260</guid><author>silencer1024</author><pubDate>Thu, 13 Aug 2020 23:47:17 +0800</pubDate><description><![CDATA[五、流量控制
窗口大小不能无限大，传输速率太快，接收方可能处理不过来，根据接收方的处理能力来反向制衡发送方的发送速率（窗口大小）
六、拥塞控制
和流量控制共同决定发送方的窗口大小的
考虑网络传输路径上的拥堵程度（动态变化的）
七、延时应答
为了提高效率，在流量控制的基础上，尽量返回一个合理的但是又比较大的窗口，延时应答其实就是让ack的发送时间晚一会（不影响可靠性的前提下），延时时间中就会给应用程序提供更多的消费数据的机会，当延时时间到了，再发ack，得到的窗口大小更大（缓冲区剩余空间更大）
八、捎带应答
]]></description><category></category></item><item><title><![CDATA[详解TCP协议（二） 详解滑动窗口下丢包情况]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/107968900</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/107968900</guid><author>silencer1024</author><pubDate>Wed, 12 Aug 2020 23:33:33 +0800</pubDate><description><![CDATA[上一篇讲完三次握手和四次握手，接下来是滑动窗口	
四、滑动窗口
首先滑动窗口是在保证可靠性的前提下，让我们进一步提高传输效率。
如果没有滑动窗口的机制：传输N份文件，就需要等待N次应答时间，
总的传输时间=N份传输时间+N份应答传输时间
滑动窗口的本质就是批量传输
总的传输时间：N分数据传输时间叠加成一份时间，N份应答传输时间，重叠成一份时间
窗口大小：不等待ACK的情况下，批量发送最大数据的量
如果在在滑动窗口的机制下传送数据发生丢包：
1.ACK丢包

如上图，数据包已经到达，ACK丢了
如果丢失ACK]]></description><category></category></item><item><title><![CDATA[详解TCP协议（一） 全面解析三次握手和四次握手]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/107946961</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/107946961</guid><author>silencer1024</author><pubDate>Tue, 11 Aug 2020 23:55:51 +0800</pubDate><description><![CDATA[一、确认应答（ACK）机制
TCP面向字节流，TCP会将每个字节的数据都进行编号，即序列号，每一个ACK都带有对应的确认序列号。
二、超时重传机制
确认应答是比较理想的情况，数据在传输过程中，可能会丢包
丢包：1.发送请求丢失
2.回复的ack丢失
不管哪种情况都会触发重新传输报文。
原理：当发送了一条数据之后，TCP内部就会自动启动一个定时器，达到一定时间也没有收到ack，定时器就会触发重传消息机制。
三、连接管理机制
1.建立连接   三次握手过程

ACK：确认应答    SYN：同步报文段（尝试与对]]></description><category></category></item><item><title><![CDATA[锁优化：以Sychronized为例 详解]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/107907216</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/107907216</guid><author>silencer1024</author><pubDate>Mon, 10 Aug 2020 10:56:36 +0800</pubDate><description><![CDATA[1.锁消除
编译器+JVM会根据代码运行的情况智能判定当前的锁是否必要，如果不必要，就直接把锁的代码清除。
2.偏向锁
第一个尝试加锁的过程，不会真的加锁，而是进入偏向锁状态（很轻量的标记），直到其他线程竞争这把锁才会取消偏向锁状态，真正进行加锁。
3.自旋锁
真的有多个线程竞争锁的时候，偏向锁状态不会取消，此时线程使用自旋锁的方式来尝试进行获取锁。
自旋锁能保证让其他想竞争锁的线程尽快获取到锁，但是会付出一定的CPU消耗
4.锁膨胀
当锁竞争更加激烈，此时就会从自旋锁状态膨胀成重量级锁（挂起等待锁）
5.]]></description><category></category></item><item><title><![CDATA[详解HashMap、HashTable、ConcurrentHashMap存在的区别]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/107906718</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/107906718</guid><author>silencer1024</author><pubDate>Mon, 10 Aug 2020 10:44:49 +0800</pubDate><description><![CDATA[1.本质上的：HashMap是线程不安全的
HashTable、ConcurrentHashMap是线程安全的
2.HashTable简单粗暴使用Sychronized进行加锁
一个HashTable实例内部只有一把锁，这就意味着只要针对这个实例进行操作，都需要先申请锁，冲突概率比较大，效率较低。
3.ConcurrentHashMap内部有多把锁
a、使用多把锁降低冲突概率
b、充分利用CAS操作，例如：size++直接基于CAS完成
c、更优化的扩容操作
HashTable的扩容是一鼓作气，某个操作插入]]></description><category></category></item><item><title><![CDATA[JVM的GC算法详解（二）]]></title><link>https://blog.youkuaiyun.com/silencer1024/article/details/107870465</link><guid>https://blog.youkuaiyun.com/silencer1024/article/details/107870465</guid><author>silencer1024</author><pubDate>Fri, 07 Aug 2020 21:07:41 +0800</pubDate><description><![CDATA[一、标记-清除

二、标记-复制


三、标记-整理




]]></description><category></category></item></channel></rss>