<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ITWUYI的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ITWUYI</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ITWUYI]]></copyright><item><title><![CDATA[oracle trunc函数]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/114821056</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/114821056</guid><author>ITWUYI</author><pubDate>Mon, 15 Mar 2021 10:30:25 +0800</pubDate><description><![CDATA[SELECT sysdate FROM dual;--2021-03-15 10:21:35
select trunc(sysdate) from dual;--2021-03-15 00:00:00
select trunc(sysdate, 'mm') from dual;--2021-03-01 00:00:00
select trunc(sysdate,'yy') from dual;--2021-01-01 00:00:00
select trunc(sysdate,'dd') from dual]]></description><category></category></item><item><title><![CDATA[kafka在zookeeper中存储结构]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/112385763</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/112385763</guid><author>ITWUYI</author><pubDate>Mon, 11 Jan 2021 12:52:30 +0800</pubDate><description><![CDATA[1、auto.offset.reset

对于smallest和largest还是理解不到位，smallest和largest策略表示Zookeeper上的offset还没有初始化为正确值时，如何初始化offset的问题？试想，Producer生产了一批消息到Kafka中，但是Kafka尚未由任何Consumer读取，而Kafka的Offset是由Consumer进行初始化和赋值的，因此此时的Zookeeper上的offset并没有预期的0(0表示尚未读取过)，而是一个不正确的随机数，那么Consumer来]]></description><category></category></item><item><title><![CDATA[Kafka]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/112332015</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/112332015</guid><author>ITWUYI</author><pubDate>Thu, 07 Jan 2021 20:39:45 +0800</pubDate><description><![CDATA[Kafka 为每个主题维护了分布式的分区(Partition)日志文件，每个 Partition 在 Kafka 存储层面是 Append Log。
任何发布到此 Partition 的消息都会被追加到 Log 文件的尾部，在分区中的每条消息都会按照时间顺序分配到一个单调递增的顺序编号，也就是我们的 offset。offset 是一个 Long 型的数字。
1、Kafka中，生产者如何把信息发送到Partition
如果没有 Key 值则进行轮询发送。
如果有 Key 值，对 Key 值进行 Hash，然后]]></description><category></category></item><item><title><![CDATA[Kafka文件存储机制]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/112285867</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/112285867</guid><author>ITWUYI</author><pubDate>Thu, 07 Jan 2021 17:18:02 +0800</pubDate><description><![CDATA[kafka，在partition中如何通过offset查找message
例如读取offset=368776的message，需要通过下面2个步骤查找。
（1）查找segment file
00000000000000000000.index表示最开始的文件，起始偏移量(offset)为0。第二个文件00000000000000368769.index的消息量起始偏移量为368770 = 368769 + 1。同样，第三个文件00000000000000737337.index的起始偏移量为737338=7]]></description><category></category></item><item><title><![CDATA[Java中的栈Stack、Deque、ArrayDeque、LinkedList]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/112260400</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/112260400</guid><author>ITWUYI</author><pubDate>Wed, 06 Jan 2021 12:35:54 +0800</pubDate><description><![CDATA[Java中的栈Stack、Deque、ArrayDeque、LinkedList
1、Java中的Stack类
栈是一种后进先出(LIFO)的容器，常用的操作push/pop/peek。
Java中Stack类从Vector类继承，底层是用数组实现的线程安全的栈。
不过Java中用来表达栈的功能（push/pop/peek），更适用的是使用双端队列接口Deque，并用实现类ArrayDeque/LinkedList来进行初始化。
Deque&lt;Integer&gt; stack = new ArrayD]]></description><category></category></item><item><title><![CDATA[Spring循环依赖]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/112249888</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/112249888</guid><author>ITWUYI</author><pubDate>Tue, 05 Jan 2021 23:39:11 +0800</pubDate><description><![CDATA[一、 什么是循环依赖？

循环依赖其实就是循环引用，也就是两个或者两个以上的bean互相持有对方，最终形成闭环。比如A依赖于B，B依赖于C，C又依赖于A。
]]></description><category></category></item><item><title><![CDATA[冒泡排序]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/111868330</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/111868330</guid><author>ITWUYI</author><pubDate>Mon, 28 Dec 2020 15:50:54 +0800</pubDate><description><![CDATA[import java.util.Comparator;

public interface Sorter {
    /**
     * 排序
     * @param list 待排序的数组
     */
    public &lt;T extends Comparable&lt;T&gt;&gt; void sort(T[] list);

    /**
     * 排序
     * @param list 待排序的数组
     * @param comp 比较两个对象的比较器
  .]]></description><category></category></item><item><title><![CDATA[用 Java 写一个二分查找]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/111868266</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/111868266</guid><author>ITWUYI</author><pubDate>Mon, 28 Dec 2020 15:48:33 +0800</pubDate><description><![CDATA[二分查找


import java.util.Comparator;

/**
 * 计算中间位置时不应该使用(high+ low) / 2 的方式，因为加法运算可能导致整数越界，这里应该使用以下三种方式之一：
 * low + (high - low)/ 2 或
 * low + (high – low) &gt;&gt; 1 或
 * (low + high) &gt;&gt;&gt; 1（&gt;&gt;&gt;是逻辑右移，是不带符号位的右移）
 */
public class binarySea.]]></description><category></category></item><item><title><![CDATA[String 对象的 intern 方法与 字符串的+操作]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/111769541</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/111769541</guid><author>ITWUYI</author><pubDate>Sat, 26 Dec 2020 21:24:20 +0800</pubDate><description><![CDATA[String 对象的 intern 方法会得到字符串对象在常量池中对应的版本的引用，如果常量池中没有对应的字符串，则该字符串将被添加
到常量池中，然后返回常量池中字符串的引用。
public static void main(String[] args) {
        //Programming,字面量，存于方法区的常量池，返回引用地址
        String s1 = "Programming";
        //new String里面的是该字符串在方法区的常量池返回的引用地址
    ]]></description><category></category></item><item><title><![CDATA[java中,一个数左移n位,就是将这个数乘以2的n次方,右移就是将这个数除以2的n次方?]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/111768911</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/111768911</guid><author>ITWUYI</author><pubDate>Sat, 26 Dec 2020 20:36:19 +0800</pubDate><description><![CDATA[在java中,一个数左移n位,就是将这个数乘以2的n次方,右移就是将这个数除以2的n次方怎么理解?
把这个数二进制化就能理解了.如十进制的2,二进制表示是0010,2左移3位,就是在二进制的低位补3个0,然后变成00010000,转成十进制就是16,即2*2^3,右移大体一致，需要分两种情况。
右移的话要分带符号位和不带符号位两种。 计算机中的数都是二进制表示的，以8位的byte类型表示为例，5可以表示为：00000101（最高位表示符号，0位正，1为负） 无论&gt;&gt;还是&gt;&gt;&gt;都]]></description><category></category></item><item><title><![CDATA[Java实现阻塞队列]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/111673079</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/111673079</guid><author>ITWUYI</author><pubDate>Fri, 25 Dec 2020 13:11:38 +0800</pubDate><description><![CDATA[Java实现阻塞队列

1、生产者向队尾添加元素；
2、消费者向队头消费元素；
3、添加和消费过程是线程安全的；




import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;

public class MyBlockingQueueLock&lt;T&gt; {
  .]]></description><category></category></item><item><title><![CDATA[Oracle hints select /*+index（）*/]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/111606906</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/111606906</guid><author>ITWUYI</author><pubDate>Thu, 24 Dec 2020 10:18:31 +0800</pubDate><description><![CDATA[Oracle Hints是一种机制，用来告诉优化器按照我们的制定的方式生成执行计划，而不是根据它自己的分析生成执行计划。

一、我们可以用Oracle Hints来实现


1) 使用的优化器的类型
2) 基于代价的优化器的优化目标，是all_rows还是first_rows。
3) 表的访问路径，是全表扫描，还是索引扫描，还是直接利用rowid。
4) 表之间的连接类型
5) 表之间的连接顺序
6) 语句的并行程度

二、Hints应用要求


Hints只应用在它们所在sql语句块(statement ]]></description><category></category></item><item><title><![CDATA[Java 中，如何计算两个日期之间的差距？]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/111502645</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/111502645</guid><author>ITWUYI</author><pubDate>Mon, 21 Dec 2020 23:44:59 +0800</pubDate><description><![CDATA[public static String getDateDiff(Date endDate, Date nowDate) {
        long nd = 1000* 24* 60* 60;
        long nh = 1000* 60* 60;
        long nm = 1000* 60;
        // long ns = 1000;
        // 获得两个时间的毫秒时间差异
        long diff = endDate.getTime() - nowDa]]></description><category></category></item><item><title><![CDATA[怎么利用 JUnit 来测试一个方法的异常？]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/111502299</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/111502299</guid><author>ITWUYI</author><pubDate>Mon, 21 Dec 2020 23:31:41 +0800</pubDate><description><![CDATA[JUnit测试Java代码中的异常有3种方式
public class Fruit {
    private String name;
    private int size;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getSize() {
        re]]></description><category></category></item><item><title><![CDATA[Java 中，怎么打印出一个字符串的所有排列？]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/111502188</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/111502188</guid><author>ITWUYI</author><pubDate>Mon, 21 Dec 2020 23:05:20 +0800</pubDate><description><![CDATA[public class Solution {

    public static void main(String[] args) {
        String str = "";
        Scanner sc = new Scanner(System.in);
        str = sc.nextLine();
        printAll(str.toCharArray(),0);
    }

    public static  void printAll(char[] s]]></description><category></category></item><item><title><![CDATA[Maven pom文件的scope]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/111167060</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/111167060</guid><author>ITWUYI</author><pubDate>Mon, 14 Dec 2020 14:13:46 +0800</pubDate><description><![CDATA[maven中scope的值可以是compile、test、runtime、provide、system，默认是compile。
1、compile
表示需要参与当前项目的编译，包括后续的测试，运行周期也参与其中，是一个比较强的依赖。打包的时候通常需要包含进去。
2、test
表示依赖项目仅仅参与测试相关的工作，包括测试代码的编译，执行，比较典型的如junit。
3、runtime
表示无需参与项目的编译，不过后期的测试和运行周期需要其参与。与compile相比，跳过编译而已。在终端的项目（非开源，企业内部系]]></description><category></category></item><item><title><![CDATA[解决TIME_WAIT过多造成的问题]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/110519401</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/110519401</guid><author>ITWUYI</author><pubDate>Thu, 03 Dec 2020 10:11:48 +0800</pubDate><description><![CDATA[解决TIME_WAIT过多造成的问题
1、TIME_WAIT状态存在的理由或者time_wait的作用？
1）可靠地实现TCP全双工连接的终止
在进行关闭连接四次挥手协议时，最后的ACK是由主动关闭端发出的，如果这个最终的ACK丢失，服务器将重发最终的FIN，因此客户端必须维护状态信息允许它重发最终的ACK。如果不维持这个状态信息，那么客户端将响应RST分节，服务器将此分节解释成一个错误（在java中会抛出connection reset的SocketException)。
因而，要实现TCP全双工连接的正]]></description><category></category></item><item><title><![CDATA[tcp]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/110482802</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/110482802</guid><author>ITWUYI</author><pubDate>Wed, 02 Dec 2020 16:23:24 +0800</pubDate><description><![CDATA[tcp
1、tcp是什么？
TCP即传输控制协议，是一种面向连接的、可靠的、基于字节流的通信协议。
简单来说TCP就是有确认机制的UDP协议，每发出一个数据包都要求确认，如果有一个数据包丢失，就收不到确认，发送方就必须重发这个数据包。
为了保证传输的可靠性，TCP协议在UDP基础之上建立了三次对话的确认机制，即在正式收发数据前，必须和对方建立可靠的连接。
TCP数据包和UDP一样，都是由首部和数据两部分组成，唯一不同的是，TCP数据包没有长度限制，理论上可以无限长，但是为了保证网络的效率，通常TCP数据包的]]></description><category></category></item><item><title><![CDATA[LRU缓存实现]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/110385345</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/110385345</guid><author>ITWUYI</author><pubDate>Mon, 30 Nov 2020 13:11:47 +0800</pubDate><description><![CDATA[LRU缓存实现
LRU（Least Recently Used，最近最少使用）算法根据数据的历史访问记录来进行淘汰数据，其核心思想是“如果数据最近被访问过，那么将来被访问的几率也更高”。
import java.util.LinkedHashMap;
import java.util.Map;

public class Solution {
    //LRU缓存实现
    public static void main(String[] args) {
        Map&lt;String, S]]></description><category></category></item><item><title><![CDATA[Hadoop家族]]></title><link>https://blog.youkuaiyun.com/ITWUYI/article/details/109802583</link><guid>https://blog.youkuaiyun.com/ITWUYI/article/details/109802583</guid><author>ITWUYI</author><pubDate>Thu, 19 Nov 2020 10:12:29 +0800</pubDate><description><![CDATA[Hadoop家族
1、Apache Hadoop:是Apache开源组织的一个分布式计算开源框架，提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架构。
2、Apache Hive:是基于Hadoop的一个数据仓库工具，可以将结构化的数据文件映射为一张数据库表，通过类SQL语句快速实现简单的MapReduce统计，不必开发专门的MapReduce应用，十分适合数据仓库的统计分析。
3、Apache Pig:是一个基于Hadoop的大规模数据分析工具，它提供的SQL-LIKE]]></description><category></category></item></channel></rss>