<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Alagagaga的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Alagagaga</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Alagagaga]]></copyright><item><title><![CDATA[MIT6.828Lab（0） 实验环境搭建]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/109735168</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/109735168</guid><author>Alagagaga</author><pubDate>Tue, 17 Nov 2020 10:53:16 +0800</pubDate><description><![CDATA[MIT6.828Lab（0） 实验环境搭建
前言，终于闲下来了，有时间做点自己想做的事情，这个lab是我想做了很久的东西，昨天忙活了几个小时终于搭建成功。
6.828官方Lab
提示：6.828的官方lab看似都是英文很复杂，但是却是我找了这么多教程之后发现最有用的，还是建议按着官方的lab来，只有QEMU稍微有点麻烦
话不多说，直接开始，讲太多复杂的只回让人头大。
1.Ubuntu 20.04 os
这个不强求系统是哪个版本的，我是前不久装的，所以是新的。
2.测试自带环境
输入
1.$ objdump ]]></description><category></category></item><item><title><![CDATA[手撸一个RPC框架——傻瓜式教程（七）]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/107851409</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/107851409</guid><author>Alagagaga</author><pubDate>Thu, 06 Aug 2020 22:52:27 +0800</pubDate><description><![CDATA[RPC框架——傻瓜式教程（七）
我们的RPC框架已经很完美了，最后做一点优化吧，做个服务端自动注册服务
服务端自动注册服务
本篇介绍一下如何基于注解进行服务的自动注册，这里需要一些反射知识。
注解
首先我们需要定义两个注解：Service 和 ServiceScan：

Service
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Service {

    public String nam]]></description><category></category></item><item><title><![CDATA[手撸一个RPC框架——傻瓜式教程（六）]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/107850380</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/107850380</guid><author>Alagagaga</author><pubDate>Thu, 06 Aug 2020 22:33:25 +0800</pubDate><description><![CDATA[RPC框架——傻瓜式教程（六）
今天的内容是自动注销服务和负载均衡策略
自动注销服务和负载均衡策略
自动注销服务
在（五）我们实现了服务的自动注册和发现，但是还是有问题的，如果你启动完成服务端后把服务端给关闭了，并不会自动地注销 Nacos 中对应的服务信息，这样就导致了当客户端再次向 Nacos 请求服务时，会获取到已经关闭的服务端信息，最终就有可能因为连接不到服务器而调用失败。
那么我们就需要一种办法，在服务端关闭之前自动向 Nacos 注销服务。但是有一个问题，我们不知道什么时候服务器会关闭，也就不知]]></description><category></category></item><item><title><![CDATA[手撸一个RPC框架——傻瓜式教程（五）]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/107843822</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/107843822</guid><author>Alagagaga</author><pubDate>Thu, 06 Aug 2020 21:30:04 +0800</pubDate><description><![CDATA[RPC框架——傻瓜式教程（五）

]]></description><category></category></item><item><title><![CDATA[手撸一个RPC框架——傻瓜式教程（四）]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/107843234</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/107843234</guid><author>Alagagaga</author><pubDate>Thu, 06 Aug 2020 16:34:51 +0800</pubDate><description><![CDATA[RPC框架——傻瓜式教程（四）
上一篇里面说了Json序列化的缺点，就是在某个类的属性反序列化时，如果属性声明为 Object 的，就会造成反序列化出错，通常会把 Object 属性直接反序列化成 String 类型，就需要其他参数辅助序列化。并且，JSON 序列化器是基于字符串（JSON 串）的，占用空间较大且速度较慢。

Kryo序列化
Kryo 是一个快速高效的 Java 对象序列化框架，主要特点是高性能、高效和易用。最重要的两个特点，一是基于字节的序列化，对空间利用率较高，在网络传输时可以减小体积；]]></description><category></category></item><item><title><![CDATA[手撸一个RPC框架——傻瓜式教程（三）]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/107828995</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/107828995</guid><author>Alagagaga</author><pubDate>Thu, 06 Aug 2020 16:06:11 +0800</pubDate><description><![CDATA[RPC框架——傻瓜式教程（三）
完成了昨天的注册服务以后，我们今天继续做出新的改进，记得我们在（一）里面提到过，BIO的方式效率很低，所以我们今天换成NIO，用上netty


]]></description><category></category></item><item><title><![CDATA[手撸一个RPC框架——傻瓜式教程（二）]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/107820144</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/107820144</guid><author>Alagagaga</author><pubDate>Wed, 05 Aug 2020 17:24:49 +0800</pubDate><description><![CDATA[RPC框架—傻瓜式教程（二）
在教程（一）中我们做的简易版实在是太辣鸡了，问题太多了
比如在注册完 helloService 后，服务器就自行启动了，也就是说，一个服务器只能注册一个服务，所以在这里我们进行第二步改进——服务的注册和服务器启动分离，使得服务端可以提供多个服务

服务注册

我们需要一个容器，这个容器很简单，就是保存一些本地服务的信息，并且在获得一个服务名字的时候能够返回这个服务的信息。于是我们创建一个 ServiceRegistry 接口
ServiceRegistry
public int]]></description><category></category></item><item><title><![CDATA[手撸一个RPC框架——傻瓜式教程（一）]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/107817127</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/107817127</guid><author>Alagagaga</author><pubDate>Wed, 05 Aug 2020 16:58:44 +0800</pubDate><description><![CDATA[RPC框架—傻瓜式教程（一）
前言，太久没写博客了，有点手生，总结一下自己对RPC框架的学习过程

首先我们知道RPC的全名是，全程服务调用，我们用它来做什么，简单地说就是客户端通过接口调用服务端的函数或者方法。
但是这个看起来很简单的事情，还需要我们思考很多，序列化和反序列化，还有协议的约定，一大堆。
所以要想深入了解RPC框架，我们还要从浅到深，一点一点实现它。
开发环境：
windows10
IDEA
Maven
前期准备
首先我们创建一个maven项目，在pom.xml里导入我们的dependenc]]></description><category></category></item><item><title><![CDATA[十分钟上手Lambda表达式]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/106528361</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/106528361</guid><author>Alagagaga</author><pubDate>Wed, 03 Jun 2020 18:27:25 +0800</pubDate><description><![CDATA[Lambda表达式光速上手
好久没写博客了，最近在学习的时候遇到了一个难点，就是Lambda表达式，之前看视频的时候看到过，但是感觉有点复杂，就快速跳过了，直到现在不得不面对，于是到处查资料，上B站看了一下视频，终于搞懂了Lambda表达式
Lambda介绍
Lambda 表达式（lambda expression）是一个匿名函数，Lambda表达式基于数学中的λ演算得名，直接对应于其中的lambda抽象（lambda abstraction），是一个匿名函数，即没有函数名的函数。
这是百度百科上面的解释，]]></description><category></category></item><item><title><![CDATA[手撸一个简单的WebServer服务器]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/105716927</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/105716927</guid><author>Alagagaga</author><pubDate>Thu, 23 Apr 2020 22:03:30 +0800</pubDate><description><![CDATA[WebServer服务器
java的学习来到了反射部分，手撸一个WebServer服务器作为练习
要用到的知识点有：
反射：把java类中的各种结构方法（方法、属性、构造器、类名）映射成一个个的java对象
获取Class对象的三种方式：
1、对象.getClass()
Iphone iphone = new Iphone();
Class clz = iphone.getClass();
2、类...]]></description><category></category></item><item><title><![CDATA[webcam包的使用介绍]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/105570392</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/105570392</guid><author>Alagagaga</author><pubDate>Fri, 17 Apr 2020 00:00:40 +0800</pubDate><description><![CDATA[webcam包的使用介绍
上一篇文章网络聊天室里最后一个视频功能有提到这个包，因为我也是过来人，知道从无到有的困难，所以这里放上代码，介绍一下这个包的使用
TwoServer类
public class TwoServer {

	Graphics g;
	public void setUp(int port){
		JFrame jf=new JFrame("视频");
		jf.setSize...]]></description><category></category></item><item><title><![CDATA[网络聊天室——低仿QQ]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/105569284</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/105569284</guid><author>Alagagaga</author><pubDate>Thu, 16 Apr 2020 23:55:25 +0800</pubDate><description><![CDATA[网络聊天室
JAVA的学习也进入到了网络这一块，下面手撸一个网络聊天室
先放效果图吸引一下大家




ChatServer类
这里我们用ServerSocket创建服务器，输入我们的端口，建议端口大于2000，2000以内都被大多数软件占用，8888 6666 9090这些数字我都挺喜欢用的，然后用Socket创建一个客户端，这里为了我们达到聊天室的效果，所以我们把每一个客户端都当作一个线程来处...]]></description><category></category></item><item><title><![CDATA[Quartz简单三步入门]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/105485019</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/105485019</guid><author>Alagagaga</author><pubDate>Mon, 13 Apr 2020 12:12:59 +0800</pubDate><description><![CDATA[Quartz简单入门教学
Quartz是我们的任务调度框架，在JAVA中简单的任务调度我们可以使用Timer来进行，但是复杂的调度我们就选择使用Quartz。
Quartz是一个完全由java编写的开源作业调度框架。尽管Quartz框架整合了许多额外功能， 但就其简易形式看，你会发现它易用得简直让人受不了！简单地创建一个实现org.quartz.Job接口的java类。Job接口包含唯一的方法：
...]]></description><category></category></item><item><title><![CDATA[小游戏——飞机大战（2）]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/104488291</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/104488291</guid><author>Alagagaga</author><pubDate>Tue, 25 Feb 2020 18:21:26 +0800</pubDate><description><![CDATA[飞机大战
前言，在完成了飞机大战（1）的基本准备类以后，我们动手来实现真正的飞机大战游戏
ShootGame类
首先我们的界面类继承Jpanel，我们在开始先把我们的图片都定义成static静态资源，这样在开始的时候就能把图片都加载好，就不会出现后面的卡顿闪烁等问题，当然，双缓冲技术也可以用上。
public class ShootGame extends JPanel {
	private st...]]></description><category></category></item><item><title><![CDATA[小游戏——飞机大战（1）]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/104481121</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/104481121</guid><author>Alagagaga</author><pubDate>Mon, 24 Feb 2020 23:16:48 +0800</pubDate><description><![CDATA[飞机大战
前言
Java的学习来到了线程的阶段，接下来总结一下如何手撸一个线程飞机大战小游戏
到了这个阶段，我们就要有系统的思维了，制作一款这样的游戏，我们需要什么，我们的顺序又是什么。

首先借用一张图片，来看看我们的设计思路。
话不多说，开始动手。
我们注意到，无论是敌我飞机，还是子弹等等，都是飞行物，那么我们就可以用到继承的方法，写出一个飞行物的父类，之后的其他飞行物子类，都继承自它，然后重...]]></description><category></category></item><item><title><![CDATA[Java五子棋小游戏简单版（3）]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/104105381</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/104105381</guid><author>Alagagaga</author><pubDate>Mon, 03 Feb 2020 18:28:05 +0800</pubDate><description><![CDATA[JAVA五子棋
前言，既（2）之后，做了一下改进，如界面的优化，棋子的优化，AI对战的实现
还是回顾一下我们之前（1）（2）的工作
建立一个Chess包→界面类ChessUI→画棋子类DrawChess→监听器类ChessListener→回到ChessUI中添加监听器→ChessPosition类→ArrayList→悔棋→认输
以上是我们做到的
接下来首先是我们的
界面优化
Basic接口
接...]]></description><category></category></item><item><title><![CDATA[Java五子棋小游戏简单版（2）]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/104103342</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/104103342</guid><author>Alagagaga</author><pubDate>Tue, 28 Jan 2020 23:48:02 +0800</pubDate><description><![CDATA[JAVA五子棋
前言，既（1）之后，我们的（2）是在（1）的基础上添加判断输赢，悔棋，认输等等方法，这些非常简单，只需要明白意思，就能完成
首先回顾一下我们（1）中的流程
建立一个Chess包→界面类ChessUI→画棋子类DrawChess→监听器类ChessListener→回到ChessUI中添加监听器
判断输赢
判断方法为，以当前落子点为基点，遍历横竖左斜右斜四个方向，如果相邻的颜色相同，...]]></description><category></category></item><item><title><![CDATA[Java五子棋小游戏简单版（1）]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/104101079</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/104101079</guid><author>Alagagaga</author><pubDate>Tue, 28 Jan 2020 22:38:59 +0800</pubDate><description><![CDATA[Java五子棋小游戏
前言：这是五子棋练手项目，相当于对先前所学的知识所进行的一个总结，其中参考了许多优快云大佬做的项目，在这里谢过。
开发这个小游戏前我们首先想一想，我们需要什么。
棋盘、棋子、输赢规则、界面  ，这是我首先能想到的四个东西。
那么我们捋一捋思路，应该是
1、先画出我们的棋盘，棋盘横竖十五道。
2、然后再在棋盘上画出我们的棋子，棋子要分为黑棋白旗，按顺序出现。
3、按照我们的输...]]></description><category></category></item><item><title><![CDATA[代码造山]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/103801655</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/103801655</guid><author>Alagagaga</author><pubDate>Thu, 02 Jan 2020 11:36:28 +0800</pubDate><description><![CDATA[n为迭代精度，128比较合适，越高山越精细，但是程序会卡顿。
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.util.StringTokenizer;
public class moutain extends Applet
    implements MouseListener...]]></description><category></category></item><item><title><![CDATA[3D图形的运动]]></title><link>https://blog.youkuaiyun.com/Alagagaga/article/details/103606737</link><guid>https://blog.youkuaiyun.com/Alagagaga/article/details/103606737</guid><author>Alagagaga</author><pubDate>Thu, 19 Dec 2019 00:01:25 +0800</pubDate><description><![CDATA[3D图形的运动

其实了解java越多，就越发现，很多我们认为很神奇的特效，都可以通过我们的代码跑出来，就比如上一篇文章里的分形，我们用代码跑公式，然后画出神奇的分形图案，不过有句话说得好，只要是对称的图形，随便怎么画都好看。

还是老规矩，整个界面出来。
public class AA {

	public void showUI() {
		//创建窗体
		JFrame drawFrame ...]]></description><category></category></item></channel></rss>