<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[gaoster的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/gaoster</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; gaoster]]></copyright><item><title><![CDATA[JVM的学习]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/108906306</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/108906306</guid><author>gaoster</author><pubDate>Sat, 03 Oct 2020 00:16:35 +0800</pubDate><description><![CDATA[1. 类加载器子系统
Java的动态类加载功能是由类加载器子系统处理。当它在运行时（不是编译时）首次引用一个类时，它加载、链接并初始化该类文件。
1.1 加载
类由此组件加载。启动类加载器 (BootStrap class Loader)、扩展类加载器(Extension class Loader)和应用程序类加载器(Application class Loader) 这三种类加载器帮助完成类的加载。


启动类加载器 – 负责从启动类路径中加载类，无非就是rt.jar。这个加载器会被赋予最高优先级。


]]></description><category></category></item><item><title><![CDATA[JDBC连接数据库操作]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/108905507</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/108905507</guid><author>gaoster</author><pubDate>Fri, 02 Oct 2020 22:08:09 +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;

public class TestJDBC {
    private static void tes]]></description><category></category></item><item><title><![CDATA[SSM框架介绍以及功能原理]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/108905452</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/108905452</guid><author>gaoster</author><pubDate>Fri, 02 Oct 2020 22:05:59 +0800</pubDate><description><![CDATA[SSM是sping+springMVC+mybatis集成的框架。
Spring框架概述
1.1 什么是Spring
Spring是一个开源框架，Spring是于2003 年兴起的一个轻量级的Java 开发框架，由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构，分层架构允许使用者选择使用哪一个组件，同时为 J2EE 应用程序开发]]></description><category></category></item><item><title><![CDATA[网络分层osi七层模型TCP/IP四层模型]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/108023696</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/108023696</guid><author>gaoster</author><pubDate>Sat, 15 Aug 2020 19:55:10 +0800</pubDate><description><![CDATA[OSI（Open System Interconnection，开放系统互连）七层网络模型
称为开放式系统互联参考模型，是一个逻辑上的定义和规范;
把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备，比如路由器，交换机;
OSI 七层模型是一种框架性的设计方法，其最主要的功能使就是帮助不同类型的主机实现数据传输;
它的最大优点是将服务、接口和协议这三个概念明确地区分开来，概念清楚，理论也比较完整. 通过七个
层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
ISO/OSI参考模型功能简介]]></description><category></category></item><item><title><![CDATA[初始Spring]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/107955534</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/107955534</guid><author>gaoster</author><pubDate>Wed, 12 Aug 2020 14:44:13 +0800</pubDate><description><![CDATA[1.什么是Spring
Spring是一个开源框架，它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。
Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
然而，Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言，任何Java应用都可以从Spring中受益。
目的：解决企业应用开发的复杂性
功能：使用基本的JavaBean代替EJB，并提供了更多的企业应用功能
范围：任何Java应用
它是一个容器框架，用来装javabean（jav]]></description><category></category></item><item><title><![CDATA[面向对象三大特性:继承,封装,多态]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/107859586</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/107859586</guid><author>gaoster</author><pubDate>Fri, 07 Aug 2020 12:48:57 +0800</pubDate><description><![CDATA[一、封装
封装从字面上来理解就是包装的意思，专业点就是信息隐藏，是指利用抽象数据类型将数据和基于数据的操作封装在一起，使其构成一个不可分割的独立实体，数据被保护在抽象数据类型的内部，尽可能地隐藏内部的细节，只保留一些对外接口使之与外部发生联系。也就是说不需要知道对象的实现细节,就可以使用该对象提供的接口来访问这个对象.

使用封装有以下好处：
1、良好的封装能够减少耦合。
2、类内部的结构可以自由修改。
3、可以对成员进行更精确的控制。
4、隐藏信息，实现细节。
二、继承
继承是使用已存在的类的定义作为基础]]></description><category></category></item><item><title><![CDATA[笔记本摄像头打开自动灭的问题解决(win10)]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/107835310</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/107835310</guid><author>gaoster</author><pubDate>Thu, 06 Aug 2020 11:29:31 +0800</pubDate><description><![CDATA[我的笔记本摄像头总是打开之后总是显示几秒钟自动关闭,最后终于找到了解决方案,分享给大家
1:打开方式:设置-隐私-相机(保证所有应用权限已开)
2:确保摄像头开关已打开(键盘第一行有个摄像图标,我的是f8)
3:(重点来了)注册表设置
(1)win+R呼出运行,输入regedit,按下回车打开注册表;
(2)在注册表中依次双击:HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows Media Foundation \ Platform
(3)在右边空白处点击]]></description><category></category></item><item><title><![CDATA[CAS实现原理]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/107749242</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/107749242</guid><author>gaoster</author><pubDate>Sun, 02 Aug 2020 19:13:14 +0800</pubDate><description><![CDATA[一、什么是CAS？
在计算机科学中，比较和交换（Conmpare And Swap）是用于实现多线程同步的原子指令。 它将内存位置的内容与给定值进行比较，只有在相同的情况下，将该内存位置的内容修改为新的给定值。 这是作为单个原子操作完成的。 原子性保证新值基于最新信息计算; 如果该值在同一时间被另一个线程更新，则写入将失败。 操作结果必须说明是否进行替换; 这可以通过一个简单的布尔响应（这个变体通常称为比较和设置），或通过返回从内存位置读取的值来完成（摘自维基百科）
CAS有3个操作数，内存值V，旧的预期值]]></description><category></category></item><item><title><![CDATA[接口和抽象类的联系和区别]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/107693003</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/107693003</guid><author>gaoster</author><pubDate>Thu, 30 Jul 2020 16:31:07 +0800</pubDate><description><![CDATA[接口和抽象类的概念不一样。接口是对动作的抽象，抽象类是对根源的抽象。
抽象类表示的是，这个对象是什么。接口表示的是，这个对象能做什么。比如，男人，女人，这两个类（如果是类的话……），他们的抽象类是人。说明，他们都是人。
人可以吃东西，狗也可以吃东西，你可以把“吃东西”定义成一个接口，然后让这些类去实现它.
所以，在高级语言上，一个类只能继承一个类（抽象类）(正如人不可能同时是生物和非生物)，但是可以实现多个接口(吃饭接口、走路接口)。
接口和抽象类的联系
抽象类:
1.一个类中有抽象方法,这个类就变成了抽象]]></description><category></category></item><item><title><![CDATA[Java集合框架中的接口]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/107621561</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/107621561</guid><author>gaoster</author><pubDate>Mon, 27 Jul 2020 21:26:08 +0800</pubDate><description><![CDATA[Java 集合框架中接口、之间的关系及其含义
集合框架是为表示和操作集合而制定的统一的标准，主要包括三大部分：对外的接口，接口的是实现和对集合的运算。简单地说，编程过程中会涉及对一类数据的处理，这类数据用统一的数据结构表示，为能统一的存放、规范的操作就定了存放、操作的结构规范，类似数组。其实在Java2之前sun就提供了集合操作，更准确的叫法应该是容器，比如Vector，Stack，Hashtable等，但功能相当有限，后来统一了集合架构，有了泛型之后更是对所有集合进行了重写，就有了现在我们看到的集合。
J]]></description><category></category></item><item><title><![CDATA[java多线程--定时器]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/107618447</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/107618447</guid><author>gaoster</author><pubDate>Mon, 27 Jul 2020 20:18:50 +0800</pubDate><description><![CDATA[在某些应用场合，需要定时地完成一些操作，希望能有一个“精准”的定时的工具，方便编程。
应该有一个线程，这个线程每经过一段时间(这个时间可以指定)，就“醒来”，并执行外部要求完成的操作。
作为一个定时器，需要定义一个时延，即要求等待的时间delay;
需要用线程来实现该定时器，便需要一个变量来控制线程goon;
既然存在线程，必然要给两个方法，开启线程start(),关闭线程stop();
定时器要应用在某些场合来做一些其他事情，那么就需要一个方法来负责做某些事，但是由于现在无法获悉未来要做什么，所以给一个抽]]></description><category></category></item><item><title><![CDATA[java多线程--阻塞队列]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/107616132</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/107616132</guid><author>gaoster</author><pubDate>Mon, 27 Jul 2020 18:17:11 +0800</pubDate><description><![CDATA[生产者消费者模型
生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯，而
通过阻塞队列来进行通讯，所以生产者生产完数据之后不用等待消费者处理，直接扔给阻塞队列，消费者不找生产者
要数据，而是直接从阻塞队列里取，阻塞队列就相当于一个缓冲区，平衡了生产者和消费者的处理能力。
阻塞队列是Java5线程新特征中的内容，Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue，阻塞队列的概念是，一个指定长度的队列，如果队列满了，添]]></description><category></category></item><item><title><![CDATA[左右最值最大差(非贪心)]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/107596377</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/107596377</guid><author>gaoster</author><pubDate>Sun, 26 Jul 2020 17:16:33 +0800</pubDate><description><![CDATA[import java.util.*;

public class MaxGap {
    public int findMaxGap(int[] A, int n) {
        // write code here
        if(n == 0){
            return 0 ;
        }
        int[] arr = new int[n];
        int k = 0,left,right;
        int x;
        for(]]></description><category></category></item><item><title><![CDATA[线程通信(wait,notify,notifyAll)]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/107525232</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/107525232</guid><author>gaoster</author><pubDate>Wed, 22 Jul 2020 22:49:46 +0800</pubDate><description><![CDATA[通信-对象的等待集wait set
1.wait()的作用是让当前线程进入等待状态，同时，wait()也会让当前线程释放它所持有的锁。“直到其他线程调用此
对象的 notify() 方法或 notifyAll() 方法”，当前线程被唤醒(进入“就绪状态”)
2.notify()和notifyAll()的作用，则是唤醒当前对象上的等待线程；notify()是唤醒单个线程，而notifyAll()是唤醒所有的
线程。
3.wait(long timeout)让当前线程处于“等待(阻塞)状态”，“直到其他线程调用]]></description><category></category></item><item><title><![CDATA[单例模式-懒汉和饿汉模式]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/107524424</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/107524424</guid><author>gaoster</author><pubDate>Wed, 22 Jul 2020 22:25:58 +0800</pubDate><description><![CDATA[单例模式可以带来的几个好处:
对于频繁使用的对象，可以省略创建对象所花费的时间，这对于那些重量级对象而言，是非常可观的一笔系统开销；
由于 new 操作的次数减少，因而对系统内存的使用频率也会降低，这将减轻 GC 压力，缩短 GC 停顿时间。
单例模式的实现
1.饿汉模式(线程安全)
public class Singleton{
	//在静态初始化器中创建单例模式保证了线程安全
	private static Singleton uniqueInstance = new Singleton();
	//S]]></description><category></category></item><item><title><![CDATA[牛客网【查找兄弟单词】Java]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/107517082</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/107517082</guid><author>gaoster</author><pubDate>Wed, 22 Jul 2020 16:41:14 +0800</pubDate><description><![CDATA[题目描述



输入描述:
先输入字典中单词的个数，再输入n个单词作为字典单词。
输入一个单词，查找其在字典中兄弟单词的个数
再输入数字n
输出描述:
根据输入，输出查找到的兄弟单词的个数
示例
输入
3 abc bca cab abc 1
1
输出
2
bca
题目分析
结果要进行判断，有还是没有兄弟单词，没有就不输出！结果是2行数据
现在，我们来分析一下，首先，题目要求输入 3 abc bca cab abc 1 ，其中3表示后边会跟着输入 3 个单词，而这3个单词需要存进字典。也就是 abc bca ]]></description><category></category></item><item><title><![CDATA[乒乓球筐 牛客网练习题 Java]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/107513665</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/107513665</guid><author>gaoster</author><pubDate>Wed, 22 Jul 2020 15:18:31 +0800</pubDate><description><![CDATA[题目描述
nowcoder有两盒（A、B）乒乓球，有红双喜的、有亚力亚的……现在他需要判别A盒是否包含了B盒中所有的种类，并且每种球的数量不少于B盒中的数量，该怎么办呢？
输入描述:
输入有多组数据。
每组数据包含两个字符串A、B，代表A盒与B盒中的乒乓球，每个乒乓球用一个大写字母表示，即相同类型的乒乓球为相同的大写字母。
字符串长度不大于10000。
输出描述:
每一组输入对应一行输出：如果B盒中所有球的类型在A中都有，并且每种球的数量都不大于A，则输出“Yes”；否则输出“No”。
示例
输入
ABCD]]></description><category></category></item><item><title><![CDATA[synchronized和volatile解决线程不安全的问题]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/107500535</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/107500535</guid><author>gaoster</author><pubDate>Tue, 21 Jul 2020 23:05:41 +0800</pubDate><description><![CDATA[1.synchronized
synchronized的底层是使用操作系统的mutex lock实现的。
当线程释放锁时，JMM会把该线程对应的工作内存中的共享变量刷新到主内存中
当线程获取锁时，JMM会把该线程对应的本地内存置为无效。从而使得被监视器保护的临界区代码必须从主内
存中读取共享变量
synchronized用的锁是存在Java对象头里的。
synchronized同步快对同一条线程来说是可重入的，不会出现自己把自己锁死的问题；
同步块在已进入的线程执行完之前，会阻塞后面其他线程的进入
Sync]]></description><category></category></item><item><title><![CDATA[Java篇—单词倒排]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/107498202</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/107498202</guid><author>gaoster</author><pubDate>Tue, 21 Jul 2020 20:36:24 +0800</pubDate><description><![CDATA[import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String str = sc.nextLine();
//将字符串转化为字符数组
char[] temp = str.toCharArray();
//定义StringB]]></description><category></category></item><item><title><![CDATA[线程不安全的原因]]></title><link>https://blog.youkuaiyun.com/gaoster/article/details/107436827</link><guid>https://blog.youkuaiyun.com/gaoster/article/details/107436827</guid><author>gaoster</author><pubDate>Sat, 18 Jul 2020 22:57:01 +0800</pubDate><description><![CDATA[什么是原子性
我们把一段代码想象成一个房间，每个线程就是要进入这个房间的人。如果没有任何机制保证，A进入房间之后，还
没有出来；B 是不是也可以进入房间，打断 A 在房间里的隐私。这个就是不具备原子性的。
那我们应该如何解决这个问题呢？是不是只要给房间加一把锁，A 进去就把门锁上，其他人是不是就进不来了。这样
就保证了这段代码的原子性了。
有时也把这个现象叫做同步互斥，表示操作是互相排斥的。
一条 java 语句不一定是原子的，也不一定只是一条指令
比如刚才我们看到的 n++，其实是由三步操作组成的：

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