- 博客(25)
- 收藏
- 关注
原创 MIT6.828Lab(0) 实验环境搭建
MIT6.828Lab(0) 实验环境搭建前言,终于闲下来了,有时间做点自己想做的事情,这个lab是我想做了很久的东西,昨天忙活了几个小时终于搭建成功。6.828官方Lab提示:6.828的官方lab看似都是英文很复杂,但是却是我找了这么多教程之后发现最有用的,还是建议按着官方的lab来,只有QEMU稍微有点麻烦话不多说,直接开始,讲太多复杂的只回让人头大。1.Ubuntu 20.04 os这个不强求系统是哪个版本的,我是前不久装的,所以是新的。2.测试自带环境输入1.$ objdump
2020-11-17 10:53:16
4476
2
原创 手撸一个RPC框架——傻瓜式教程(七)
RPC框架——傻瓜式教程(七)我们的RPC框架已经很完美了,最后做一点优化吧,做个服务端自动注册服务服务端自动注册服务本篇介绍一下如何基于注解进行服务的自动注册,这里需要一些反射知识。注解首先我们需要定义两个注解:Service 和 ServiceScan:Service@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface Service { public String nam
2020-08-06 22:52:27
682
原创 手撸一个RPC框架——傻瓜式教程(六)
RPC框架——傻瓜式教程(六)今天的内容是自动注销服务和负载均衡策略自动注销服务和负载均衡策略自动注销服务在(五)我们实现了服务的自动注册和发现,但是还是有问题的,如果你启动完成服务端后把服务端给关闭了,并不会自动地注销 Nacos 中对应的服务信息,这样就导致了当客户端再次向 Nacos 请求服务时,会获取到已经关闭的服务端信息,最终就有可能因为连接不到服务器而调用失败。那么我们就需要一种办法,在服务端关闭之前自动向 Nacos 注销服务。但是有一个问题,我们不知道什么时候服务器会关闭,也就不知
2020-08-06 22:33:25
793
原创 手撸一个RPC框架——傻瓜式教程(四)
RPC框架——傻瓜式教程(四)上一篇里面说了Json序列化的缺点,就是在某个类的属性反序列化时,如果属性声明为 Object 的,就会造成反序列化出错,通常会把 Object 属性直接反序列化成 String 类型,就需要其他参数辅助序列化。并且,JSON 序列化器是基于字符串(JSON 串)的,占用空间较大且速度较慢。Kryo序列化Kryo 是一个快速高效的 Java 对象序列化框架,主要特点是高性能、高效和易用。最重要的两个特点,一是基于字节的序列化,对空间利用率较高,在网络传输时可以减小体积;
2020-08-06 16:34:51
425
原创 手撸一个RPC框架——傻瓜式教程(三)
RPC框架——傻瓜式教程(三)完成了昨天的注册服务以后,我们今天继续做出新的改进,记得我们在(一)里面提到过,BIO的方式效率很低,所以我们今天换成NIO,用上netty
2020-08-06 16:06:11
648
原创 手撸一个RPC框架——傻瓜式教程(二)
RPC框架—傻瓜式教程(二)在教程(一)中我们做的简易版实在是太辣鸡了,问题太多了比如在注册完 helloService 后,服务器就自行启动了,也就是说,一个服务器只能注册一个服务,所以在这里我们进行第二步改进——服务的注册和服务器启动分离,使得服务端可以提供多个服务服务注册我们需要一个容器,这个容器很简单,就是保存一些本地服务的信息,并且在获得一个服务名字的时候能够返回这个服务的信息。于是我们创建一个 ServiceRegistry 接口ServiceRegistrypublic int
2020-08-05 17:24:49
717
原创 手撸一个RPC框架——傻瓜式教程(一)
RPC框架—傻瓜式教程(一)前言,太久没写博客了,有点手生,总结一下自己对RPC框架的学习过程首先我们知道RPC的全名是,全程服务调用,我们用它来做什么,简单地说就是客户端通过接口调用服务端的函数或者方法。但是这个看起来很简单的事情,还需要我们思考很多,序列化和反序列化,还有协议的约定,一大堆。所以要想深入了解RPC框架,我们还要从浅到深,一点一点实现它。开发环境:windows10IDEAMaven前期准备首先我们创建一个maven项目,在pom.xml里导入我们的dependenc
2020-08-05 16:58:44
1988
原创 十分钟上手Lambda表达式
Lambda表达式光速上手好久没写博客了,最近在学习的时候遇到了一个难点,就是Lambda表达式,之前看视频的时候看到过,但是感觉有点复杂,就快速跳过了,直到现在不得不面对,于是到处查资料,上B站看了一下视频,终于搞懂了Lambda表达式Lambda介绍Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。这是百度百科上面的解释,
2020-06-03 18:27:25
299
原创 手撸一个简单的WebServer服务器
WebServer服务器java的学习来到了反射部分,手撸一个WebServer服务器作为练习要用到的知识点有:反射:把java类中的各种结构方法(方法、属性、构造器、类名)映射成一个个的java对象获取Class对象的三种方式:1、对象.getClass()Iphone iphone = new Iphone();Class clz = iphone.getClass();2、类...
2020-04-23 22:03:30
470
原创 webcam包的使用介绍
webcam包的使用介绍上一篇文章网络聊天室里最后一个视频功能有提到这个包,因为我也是过来人,知道从无到有的困难,所以这里放上代码,介绍一下这个包的使用TwoServer类public class TwoServer { Graphics g; public void setUp(int port){ JFrame jf=new JFrame("视频"); jf.setSize...
2020-04-17 00:00:40
1480
原创 网络聊天室——低仿QQ
网络聊天室JAVA的学习也进入到了网络这一块,下面手撸一个网络聊天室先放效果图吸引一下大家ChatServer类这里我们用ServerSocket创建服务器,输入我们的端口,建议端口大于2000,2000以内都被大多数软件占用,8888 6666 9090这些数字我都挺喜欢用的,然后用Socket创建一个客户端,这里为了我们达到聊天室的效果,所以我们把每一个客户端都当作一个线程来处...
2020-04-16 23:55:25
1055
原创 Quartz简单三步入门
Quartz简单入门教学Quartz是我们的任务调度框架,在JAVA中简单的任务调度我们可以使用Timer来进行,但是复杂的调度我们就选择使用Quartz。Quartz是一个完全由java编写的开源作业调度框架。尽管Quartz框架整合了许多额外功能, 但就其简易形式看,你会发现它易用得简直让人受不了!简单地创建一个实现org.quartz.Job接口的java类。Job接口包含唯一的方法:...
2020-04-13 12:12:59
263
原创 小游戏——飞机大战(2)
飞机大战前言,在完成了飞机大战(1)的基本准备类以后,我们动手来实现真正的飞机大战游戏ShootGame类首先我们的界面类继承Jpanel,我们在开始先把我们的图片都定义成static静态资源,这样在开始的时候就能把图片都加载好,就不会出现后面的卡顿闪烁等问题,当然,双缓冲技术也可以用上。public class ShootGame extends JPanel { private st...
2020-02-25 18:21:26
648
原创 小游戏——飞机大战(1)
飞机大战前言Java的学习来到了线程的阶段,接下来总结一下如何手撸一个线程飞机大战小游戏到了这个阶段,我们就要有系统的思维了,制作一款这样的游戏,我们需要什么,我们的顺序又是什么。首先借用一张图片,来看看我们的设计思路。话不多说,开始动手。我们注意到,无论是敌我飞机,还是子弹等等,都是飞行物,那么我们就可以用到继承的方法,写出一个飞行物的父类,之后的其他飞行物子类,都继承自它,然后重...
2020-02-24 23:16:48
401
原创 Java五子棋小游戏简单版(3)
JAVA五子棋前言,既(2)之后,做了一下改进,如界面的优化,棋子的优化,AI对战的实现还是回顾一下我们之前(1)(2)的工作建立一个Chess包→界面类ChessUI→画棋子类DrawChess→监听器类ChessListener→回到ChessUI中添加监听器→ChessPosition类→ArrayList→悔棋→认输以上是我们做到的接下来首先是我们的界面优化Basic接口接...
2020-02-03 18:28:05
482
原创 Java五子棋小游戏简单版(2)
JAVA五子棋前言,既(1)之后,我们的(2)是在(1)的基础上添加判断输赢,悔棋,认输等等方法,这些非常简单,只需要明白意思,就能完成首先回顾一下我们(1)中的流程建立一个Chess包→界面类ChessUI→画棋子类DrawChess→监听器类ChessListener→回到ChessUI中添加监听器判断输赢判断方法为,以当前落子点为基点,遍历横竖左斜右斜四个方向,如果相邻的颜色相同,...
2020-01-28 23:48:02
344
原创 Java五子棋小游戏简单版(1)
Java五子棋小游戏前言:这是五子棋练手项目,相当于对先前所学的知识所进行的一个总结,其中参考了许多CSDN大佬做的项目,在这里谢过。开发这个小游戏前我们首先想一想,我们需要什么。棋盘、棋子、输赢规则、界面 ,这是我首先能想到的四个东西。那么我们捋一捋思路,应该是1、先画出我们的棋盘,棋盘横竖十五道。2、然后再在棋盘上画出我们的棋子,棋子要分为黑棋白旗,按顺序出现。3、按照我们的输...
2020-01-28 22:38:59
573
原创 代码造山
n为迭代精度,128比较合适,越高山越精细,但是程序会卡顿。import java.applet.Applet;import java.awt.*;import java.awt.event.*;import java.util.StringTokenizer;public class moutain extends Applet implements MouseListener...
2020-01-02 11:36:28
196
原创 3D图形的运动
3D图形的运动其实了解java越多,就越发现,很多我们认为很神奇的特效,都可以通过我们的代码跑出来,就比如上一篇文章里的分形,我们用代码跑公式,然后画出神奇的分形图案,不过有句话说得好,只要是对称的图形,随便怎么画都好看。还是老规矩,整个界面出来。public class AA { public void showUI() { //创建窗体 JFrame drawFrame ...
2019-12-19 00:01:25
228
原创 阿拉嘎之递归汉诺塔
递归汉诺塔斐波那契数列我们知道,斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-...
2019-12-12 17:01:34
158
原创 一些有趣的分形
一些有趣的分形DrawUI首先还是创建一个界面,这里我们都很熟悉,创建一个界面类public class DrawUI(){public void showUI(){//创建窗体 JFrame drawFrame = new JFrame("画板"); drawFrame.setSize(1000,1000); drawFrame.setLocationRelativeTo...
2019-12-06 23:03:48
238
原创 画图板的开发
画图板的开发DrawUI.java首先还是老规矩,先建一个包,这也是一个好习惯,每做一个项目就建一个包,这个习惯有利于你之后的回顾以及修改。这英文也很好看懂,就画图板呗然后有了上一个SimQQ界面的开发的经验,我们就知道,要先建一个界面。于是我们建一个类,起名叫DrawUIpublic class DrawUI{public void showUI(){}//习惯性的添加主函...
2019-11-26 19:05:18
224
原创 SimQQ界面的开发
SimQQ界面的开发LoginUI.Java这里我们会用到之前说的类与对象。1、 首先创建一个包,名字是SimQQ2、然后创建第一个LoginUI的类3、 在类中定义一个展示窗体的方法。public void showUI(){ }4、养成一个好的习惯,在下面先写上主方法,...
2019-11-17 21:15:55
176
原创 类与对象的一点认识
@关于类与对象的认识类与对象这些天在蓝杰学习了类与对象在大二学习C++的时候,我第一次接触了类与对象这个概念,当时我记得我对它的理解是,因为学的是面向对象的编程,所以类与对象应该和那个有关。再后来随着课程的深入,我对它的理解又变了,我知道要定义一个class,然后写出头文件.h,然后类里面可以定义变量,方法。而这些变量和方法又可以设置成public型,protected型,和private...
2019-10-31 18:45:50
181
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人