0%

什么是docker?

Docker 使用 Google 公司推出的 Go 语言进行开发实现,基于 Linux 内核的 cgroupnamespace ,以及 OverlayFS类的 Union FS等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术 。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

为什么要使用docker?

  1. 开发的程序最终的运行环境为Linux,开发环境不方便调试,并且避免了“代码在我电脑上没问题”的情况;
  2. MacOS上并没有好用的SSH管理工具,Windows上则有很多方便快捷的工具,直接使用ssh命令会出现掉线,文件传输不方便等情况,Docker则可以直接将主机目录挂载到;
  3. Docker是轻量级的容器,相比虚拟机而言,对电脑资源的要求更低,启动速度更快。

安装Docker

MacOS 通过brew安装

$ brew cask install docker

注意:docker有桌面版,如不加cask则下载的不是桌面版。但仍然可以通过命令行来使用,下载桌面版能可视化容器更方便。

获取一个镜像

Docker 官方维护了一个公共仓库 Docker Hub,我们可以直接从 Docker Hub 中获取我们想要的镜像。我们通过以下命令获取redis的最小镜像。

$ docker pull redis

运行一个容器

运行交互式容器,这样进入了一个交互式容器,里面可以对redis进行查询等操作,而这个容器只可以操作redis,完全与其他服务隔离开来,非常安全,即使服务宕机也丝毫不会影响其他服务,而且后期维护也非常简单。

$ docker run -itd --name redis -p 6379:6379 -v 本地目的:容器目录 redis

-i:以交互模式运行容器,通常与-t同时使用

-d:后台运行容器,并返回容器ID,也即启动守护式容器

-t:为容器重新分配一个伪输入终端,通常与-i同时使用

写在一起就是组合命令,-id -it -itd

–name:用来指定容器名称,如省略则会 Docker 会自动分配一个名称

-v:代表挂载目录,本地目的和容器目录使用:分隔,均是绝对路径,当容器目录不存在时会自动创建,如需挂载多个目录,可以使用多个-v来挂载多个目录

-p 6379:6379:映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机ip:6379 访问到 Redis 的服务。

使用$ docker ps可以查看容器中所有的容器

进入环境

使用docker命令登录到redis容器中

docker exec -it redis bash

启动redis客户端

redis-cli

然后就可以在docker中运行redis,就和在docker外运行是一样的,且已经将本地目录挂载到容器内目录,即使以后该容器损坏或删除,数据一直是存在本地的,并无损失。

以上就是我第一次用Docker的一些心得~

参考:

菜鸟教程

Docker — 从入门到实践

Java为什么直接打印输出集合不是哈希值而是直接输出值

Collection—AbstractCollection–AbstractList–ArrayList

在翻阅了源码之后发现ArrayList的父类AbstractList的父类AbstractCollection里面有实现toString()方法,所以打印出来的是内容不是堆栈地址。

Object类的toString()方法中,返回的是 getClass().getName() + "@" + Integer.toHexString(hashCode())也就是地址值,打印ArrayList对象没有输出地址值,便可知道ArrayList重写了toString()方法。

Java如何打印数组

数组和集合并不同,如果直接System.out.println()打印输出数组,则会显示地址值,而并不会输出内容。

  1. 使用Arrays.toString()将数组转成String再打印输出
  2. 使用Arrays.deepToString()可以把二维数组直接打印输出

Comparator的个人简单理解(升序降序)与使用

Java实现Comparator排序是升序,即自然排序,根据参数,返回值来判断是否交换。

jdk官方的升序基于:

1
2
3
< return -1
> return 1
= return 0

把-1理解为false,1理解为true(实际上底层源码并不是这样,实现原理参考dalao的博客,只是为了方便记忆使用)
如果要升序:那么a<b就是想要的顺序,所以return -1 ,false,不交换
如果要降序:那么a<b就是不想要的顺序,所以return 1,true,要交换
简而言之,返回1的时候进行位置交换

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
注意!这边不用Collections.sort也行,可以使用LinkedList继承自List的sort方法,即list.sort()
*/
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if(o1>o2) return 1;
else if(o1<o2) return -1;
else return 0;
}
}
);
//使用lambda表达式进一步简化
//lambda+compareTo()/compare()
list.sort((a,b) ->{
return a.compareTo(b);
});
list.sort((a,b)->{
return Integer.compare(a,b);
});

以上就是最近的感悟了,算法还得继续刷,数据结构还不够熟悉。

研二已经开学一个多月了,各种压力在身上,喘不过气。

关于科研

科研没什么进展,自己真的不咋会科研。

导师做的方向虽然挺火的,但是觉得已经很完善了,没什么新的可以做,问了老师就说还有很多没解决的,自己多看论文。

也是自己论文看的少,对这个方向还真的不够理解的透彻,只知道几个特殊的关键词,到目前为止还没复现过一篇论文,接下来的时间要好好学习python,我对java很熟悉,但对python真的生疏。

但研二就在眼前,不知道专利在哪里飞,怎么写,接下来不管怎么样还是得搞一搞科研起码要有个idea。

关于生活

学校封了一个半月,已经不想多说什么了,思考了很久决定回家学习,人身自由得到了保障。

很多事情各自心里都有数,疫情不麻烦,各种奇葩的政策和抗疫的大方向给很多人带来了不便和影响了无数人的生计,希望会变得更好吧,作为一个普通百姓也做不了什么,只能在不同环境中选择对自己最好的。

最近一个月恶补Java和算法还有一些开发的知识,也算是有所进步,但是学习的道路上总归是迷惘的,不过接下来应该主攻科研了.

现在对科研方面有点焦虑还得暗中抹黑,不过还是不能放掉算法,每天算法还是要跟着做题目。

也算对这一个多月做了一个总结了吧,希望我能在研二上把专利写出来,用文字记录,缓解了很多的焦虑。

Dare to dream,ready to achieve.

第一次复刻一个前后端分离的javaweb项目,此项目是基于尚硅谷的谷粒学院,是一个B2C的系统,分为前台用户系统和后台管理系统

项目技术选型

  • 前端部分:使用主流的前端框架Vue,使用Es6的开发规范,采用模块化的开发模式。
  • 后端部分:SpringBoot + SpringCloud + MyBatis-Plus + HttpClient + MySQL + Maven+EasyExcel+ nginx
    1. 使用目前流行的SpringBoot+SpringCloud进行微服务架构,使用Feign、Gateway、Hystrix,以及阿里巴巴的Nacos等组件搭建了项目的基础环境。
    2. 采用mybatis-plus提高开发效率,使用代码生成器生成主框架,简化开发步骤。
    3. 使用swagger来测试接口
    4. 使用SpringSecurity整合项目登陆和权限管理,Redis进行数据缓存,将常用的数据存入 Redis,减少数据库访问量和并发量。
  • 其他中间件:Redis、阿里云OSS、阿里云视频点 业务中使用了ECharts做图表展示,使用EasyExcel完成分类批量添加、注册分布式单点登录使用了JWT。

项目具体内容

项目前后端分离开发,后端采用SpringCloud微服务架构,持久层用的是MyBatis-Plus,微服务分库设 计,使用Swagger生成接口文档,接入了阿里云视频点播、阿里云OSS。系统分为前台用户系统和后台管理系统两部分。
前台用户系统包括:首页、课程、名师、问答、文章。后台管理系统包括:讲师管理、课程分类管理、课程管理、统计分析、Banner管理、订单管理、权限管理等功能。

项目随笔

这是自从学习javaweb以来第一个跟着学做的前后端分离项目,之前零零散散的学各种技术栈一直处在非常割裂的状态,因为所学的知识都连不起来,这个项目让我了解了springboot的具体用法以及前后端分离项目具体是如何分离如何作用的。其实,对微服务也有一定的了解了,在开发的时候知道分模块开发,虽然远谈不上熟练,后面还会继续学习分布式微服务的知识。此次项目,收获颇多,编程水平也大幅提升。

Dare to dream, ready to achieve!