程序员地瓜哥的小屋
对代码敬畏,在编程的世界里享受翱翔。分享技术的快乐。公众号:CodingDGSun
CodingDGSun
对代码敬畏,在编程的世界里享受翱翔。分享技术的快乐。
展开
-
Mac OS上用命令行执行C程序
用命令行新建C文件touch hello.c编辑C文件vim hello.c编写C程序代码#include <stdio.h>int main(){ printf("Hello World!"); return 0;}[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JVUN6lZs-1642392533793)(https://cdn.jsdelivr.net/gh/CodingDGSun/images-db@master/B原创 2022-01-17 12:08:59 · 808 阅读 · 0 评论 -
Java中的原型模式
原型模式简介模式属于创建型模式,它提供了一种创建对象的最佳方式。用于创建重复的对象,同时又能保证性能。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。浅克隆类Book实现Cloneable接口并重写clone方法public class Book implements Cloneab原创 2022-01-17 12:07:58 · 792 阅读 · 0 评论 -
Java中的建造者模式
建造者模式简介模式属于创建型模式,它提供了一种创建对象的最佳方式。使用多个简单的对象一步一步构建成一个复杂的对象。一个Builder类会一步一步构造最终的对象。该Builder类是独立于其他对象的。指挥者模式产品类Product//产品public class Product { private String one; private String two; private String three; public String getOne() {原创 2022-01-17 12:07:27 · 421 阅读 · 0 评论 -
Java中的抽象工厂模式
抽象工厂模式简介模式属于创建型模式,它提供了一种创建对象的最佳方式。抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。接口IComputerProduct//电脑产品接口public interface IComputerProduct { void start(); void sh原创 2022-01-17 12:06:55 · 1251 阅读 · 0 评论 -
Java中的工厂模式
工厂模式简介模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。静态简单工厂模式接口Animalpublic interface Animal { String getName();}子类Dog和Catpublic class Dog implements Animal { @Override public String getName() {原创 2022-01-17 12:06:21 · 152 阅读 · 0 评论 -
Java中的单例模式
单例模式简介模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。主要分为:饿汉模式和懒汉模式饿汉模式//饿汉模式public class Hungry { private static Hungry hungry = new Hungry(); private Hungry() { } pub原创 2022-01-17 12:05:48 · 160 阅读 · 0 评论 -
上传docker镜像到阿里云镜像中心实践
注册并登录阿里云账户需提前在阿里云官网,注册一个用户进入控制后台进入容器镜像服务创建个人实例设置Registry密码创建命名空间创建镜像仓库下载镜像docker pull tomcat //下载tomcat镜像启动容器docker run -d --name="MyTomcat" -p 8888:8080 tomcat //后台方式,以外部主机端口8888映射容器端口8080,运行Tomcat,容器别名为MyTomcatcurl loca原创 2022-01-13 15:21:00 · 281 阅读 · 0 评论 -
上传docker镜像到dockerhub实践
下载镜像docker pull tomcat //下载tomcat镜像启动容器docker run -d --name="MyTomcat" -p 8888:8080 tomcat //后台方式,以外部主机端口8888映射容器端口8080,运行Tomcat,容器别名为MyTomcatcurl localhost:8888 //测试访问显示404此处要注意,【有坑】!docker exec -it 2dd5319e4047 /bin/bash /原创 2022-01-13 15:14:59 · 220 阅读 · 0 评论 -
Java中稀疏数组的使用
稀疏数组当一个数组中大部分元素是0,或者是一个相同的值时,可以使用稀疏数组来保存该数组。并且稀疏数组,行数为:原来数组非0元素个数+1;列数为:3。即:稀疏数组列数总是3。原数组总行数 原数组总列数 原数组非0元素个数原数组非0元素行索引 原数组非0元素列索引 原数组非0元素值...稀疏数组,第一行(即:0行),第一列存储原数组的总行数,第二列存储原数组的总列数,第三列存储非零元素的数量; 其他行结构相原创 2022-01-13 15:08:55 · 235 阅读 · 0 评论 -
Markdown语法入门
Markdown 是一种轻量级标记语言标题# 一级标题## 二级标题### 三级标题#### 四级标题##### 五级标题###### 六级标题一级标题二级标题三级标题四级标题五级标题六级标题字体**加粗***斜体****加粗且斜体***~~删除线~~~加粗斜体加粗且斜体删除线~分隔线---***图片![图片名称](图片本地地址,或网络的地址都可以)超链接[超链接名称](超链接地址)网站列表1. a2. b3. c原创 2022-01-13 15:07:58 · 138 阅读 · 0 评论 -
Dockerfile创建Ubuntu镜像实践
手动安装Linux命令下载Ubuntu镜像docker pull ubuntu启动一个ubuntu容器docker run -it --name myubuntu01 ba6acccedd29 /bin/bash查看Ubuntu版本cat /etc/issue//Ubuntu 20.04.3 LTS \n \l查看ubuntu中基本命令,都无法使用vim //文本编辑ifconfig //显示或配置网络设备ping //因原创 2022-01-13 15:07:03 · 5750 阅读 · 0 评论 -
Dockerfile创建CentOS镜像实践
手动安装Linux命令下载CentOS镜像docker pull centos启动一个centos容器docker run -it --name mycentos01 5d0da3dc9764 /bin/bash查看CentOS版本cat /etc/redhat-release//CentOS Linux release 8.4.2105查看centos中基本命令,都无法使用clear //清屏vim //文本编辑ifconfig原创 2022-01-13 15:00:48 · 347 阅读 · 0 评论 -
Dockerfile使用入门
使用Dockerfile生成镜像,并挂载数据卷编写Dockerfile 注意:命令单词全部大写FROM ubuntuVOLUME ["volume1","volume2"]CMD echo "------Done------"CMD /bin/bash查看docker build帮助docker build --help //查看docker build帮助 -f //dockerfile文件路径 -t //镜像别名:版本号生成镜像原创 2022-01-12 10:51:54 · 230 阅读 · 0 评论 -
关于MySQL的容器数据卷挂载实践
关于MySQL的容器数据卷挂载实践下载mysql 5.7 镜像docker pull mysql:5.7 //下载mysql 5.7 镜像启动mysql容器,并挂载相应目录docker run -d -p 3307:3306 -v /Users/sunjie/Desktop/conf:/etc/mysql/conf.d -v /Users/sunjie/Desktop/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=112233 --na原创 2022-01-12 10:47:37 · 642 阅读 · 0 评论 -
Docker容器数据卷挂载使用
Docker容器数据卷挂载使用docker run --help //查看运行容器帮助docker run -it -v /Users/sunjie/Desktop:/home tomcat //以交互方式运行tomcat容器,并将外部主机的/Users/sunjie/Desktop与tomcat容器的/home目录进行映射docker exec -it 7ff84fa6ad4c /bin/bash //进入容器查看目录内容查看外部主机目录内容d原创 2022-01-12 10:46:33 · 225 阅读 · 0 评论 -
提交Docker镜像
提交Docker镜像docker pull tomcat //下载tomcat镜像docker run -d --name="MyTomcat" -p 8888:8080 tomcat //后台方式,以外部主机端口8888映射容器端口8080,运行Tomcat,容器别名为MyTomcatcurl localhost:8888 //测试访问显示404此处要注意,【有坑】!docker exec -it 2dd5319e4047 /bin/bash /原创 2022-01-12 10:43:54 · 298 阅读 · 0 评论 -
可视化图形工具Portainer
Portainer是一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建,管理和维护Docker环境。 而且完全免费,基于容器化的安装方式,方便高效部署。docker run -d -p 8888:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer //下载并运行portainerlocalhost:8888原创 2022-01-12 10:41:28 · 134 阅读 · 0 评论 -
Docker上部署服务应用
部署Nginxdocker pull nginx //下载Nginx镜像docker run -d --name="MyNginx01" -p 3090:80 nginx //后台方式,以外部主机端口3090映射容器端口80,运行Nginx,容器别名为MyNginx01curl localhost:3090 //在外部主机测试容器Nginx服务docker exec -it 53c01c475a1e /bin/bash //进入容器where原创 2022-01-12 10:39:23 · 1516 阅读 · 0 评论 -
Docker使用入门
Docker官网地址https://www.docker.comdocker镜像常用命令docker version //查看版本docker --help //查看帮助docker images --help //查看镜像帮助docker search --help //查看搜索帮助docker search mysql //搜索镜像,比如:mysqldocker search mysql --filter=ST原创 2022-01-07 23:29:10 · 450 阅读 · 0 评论 -
Windows上Dos命令操作文件及文件夹
打开cmd命令提示符窗口方法一键盘Windows键 + R键,两个键一起按,打开“运行”窗口在打开的“运行”窗口中输入“cmd”,再按下键盘“回车”键即可方法二在电脑桌面空白处,按住键盘Shift键+鼠标右键,两个键一起按,右击后选择“在此处打开窗口命令”新建文件夹“a”md a删除文件夹“a”rd a新建空的文本文件“a.txt”copy nul a.txt新建有内容的文本文件“b.txt”,并在结尾处,按回车键,之后输入“你好”内容,按“Ctrl+Z”键盘组合键原创 2022-01-07 23:13:04 · 1049 阅读 · 0 评论 -
Java输出日历
使用键盘输入日期,输出当月日历public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入日期,比如:2021-06-18"); String strDate = sc.next();//接收用户输入的日期 //System.out.println("日期是:" + strDate);//输出日期原创 2022-01-07 23:06:58 · 2104 阅读 · 0 评论 -
Java输出形状
输出矩形以此矩形案例(4行,9列的矩形)为例public static void main(String[] args) { //输出矩形 for (int i = 1; i <= 4; i++) {//控制行,即4行 for (int j = 1; j <= 9; j++) {//控制输出的*的个数,每行9个 System.out.print("*"); }原创 2022-01-07 23:06:17 · 929 阅读 · 0 评论 -
Java输出九九乘法表
使用For嵌套循环输出九九乘法表正序输出public static void main(String[] args) { /** //先输出两行,找找规律 for (int i = 1; i <= 6; i++) { System.out.print(i + "* 6 =" + i * 6 + "\t"); } System.out.println(); for (int原创 2022-01-07 23:05:32 · 2642 阅读 · 0 评论 -
Java中try、catch、finally执行顺序
try、catch和finallytry块:用于捕获异常。后面可以有0个或多个catch块。只能有0个或1个finally块。try块后面,如果没有catch块,则后面必须有一个finally块。执行代码捕获异常后,进入catch块,try中出现异常代码处后面的代码不会再继续执行。catch块:用于处理处理try中捕获的异常。可以有多个catch块,进入一个catch块后,执行完毕后,如果有finally块,则进入finally块。即使后面还有catch块,也不会再进入其他catch原创 2022-01-07 23:04:25 · 4936 阅读 · 0 评论 -
Java中Error和Exception
Error和Exception区别:Error:程序无法处理的错误Exception:程序本身可以处理的异常PantUML语法A <|-- B //B继承AC <|... D //D实现了C@startumlinterface Serializable{ }class Throwable{ }class Exception{ }class Error{ }class IOError{ }abstract class VirtualMa原创 2022-01-06 16:14:58 · 295 阅读 · 0 评论 -
Java中的传递是值传递
Java中的参数类型形式参数,即形参实际参数,即实参public static void main(String[] args) { int i = 0; run(i);//变量 i 即实际参数 }public static void run(int a) {//变量 a 即形式参数 System.out.println(a);}Java中的两种参数传递情况值传递:指在进行函数方法调用时,将实际参数复制一份到函数方法内,在函数方法内对参原创 2022-01-06 16:13:43 · 176 阅读 · 0 评论 -
Java中的反射
Java反射机制,是在程序的运行过程中,对于任何一个类,都能够知道它的所有属性和方法。对于任意一个对象,都能够知道调用他的任意属性和方法。这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。如下代码示例:父类Animalpackage com.study.reflection;public class Animal { public String name; public int age; public Animal() { supe原创 2022-01-06 16:12:40 · 189 阅读 · 0 评论 -
Java类中各个成员初始化顺序
Java中各个成员初始化顺序静态属性:static开头定义的属性静态方法块:static{}包起来的代码块main()方法入口执行普通属性:非static定义的属性普通方法快:{}包起来的代码块无参构造函数:类名相同的方法普通属性:非static定义的属性普通方法快:{}包起来的代码块带参数的参构造函数:类名相同的方法(参数列表)其中,静态属性和静态方法块,按照先定义的代码先执行。同理,普通属性和普通方法块,按照先定义的代码先执行。具体代码如下:public class Jav原创 2022-01-06 16:11:04 · 265 阅读 · 0 评论 -
网络基础知识
计算机网络的品种很多,根据各种不同的分类原则,可以得到各种不同类型的计算机网络。按照规模大小和延伸范围分类:局域网(LAN)城域网(MAN)广域网(WAN)Internet可以视为世界上最大的广域网。按照网络的拓扑结构来分类:星型网络总线网络环线网络树型网络星型环线网络按照网络的传输介质来分类:双绞线网同轴电缆网光纤网卫星网计算机网络中实现通信必须有一些约定,这些约定被称为通信协议。通信协议通常由三部分组成:语义部分,用于决定双方对话的类型语法部分,用原创 2022-01-06 16:10:29 · 999 阅读 · 0 评论 -
Java中的注解Annotation
基本Annotation@Override@Deprecated@SuppressWarnings@SafeVarargs@Override用来指定方法重载,它可以强制一个子类必须覆盖父类的方法。主要是帮助我们避免一些低级错误,例如:父类中有个run()方法,子类中的方法名不小心写成了runn(),在程序编译时候会报错提示。只能作用于方法,不能作用于其他程序元素。@Deprecated用于表示某个元素(类、方法等)已过时,当其他程序使用已过时的类、方法时,编译器将会给出警告。虽原创 2022-01-06 16:09:25 · 180 阅读 · 0 评论 -
Java中的线程生命周期
线程的生命周期新建(New)就绪(Runnable)运行(Running)阻塞(Blocked)死亡(Dead)新建和就绪状态新建当程序使用new关键字创建了一个线程后,该线程就处于新建状态,此时它和其他的Java对象一样,仅仅由Java虚拟机为其分配内存,并初始化其成员变量的值。此时的线程对象没有表现出任何线程的动态特征,程序不会执行线程的线程执行体。就绪当线程对象调用了start()方法之后,该线程处于就绪状态,Java虚拟机会为其创建方法调用栈和程序计数器,处于这个状态原创 2021-12-31 13:44:24 · 94 阅读 · 0 评论 -
Java中的线程创建和启动
Java使用Thread类代表线程,所有的线程对象都必须是Thread类或者其子类的实例。每个线程的作用是完成一定的任务,实际上就是执行一段程序流(一段顺序执行的代码)。Java使用线程执行体来代表这段程序流。继承Thread类创建线程类通过继承Thread类来创建并启动多线程的步骤如下:定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务。因此把run()方法称为线程执行体。创建Thread子类的实例,即创建了线程对象。调用线程对象的sta原创 2021-12-31 13:43:48 · 244 阅读 · 0 评论 -
Java中的程序、进程、线程
程序、进程、线程的关系程序:操作系统中通常都支持同时运行多个任务,一个任务就是一个程序。程序只是一个静态的指令集合。进程:每个运行中的程序,就是一个进程。进程是一个正在系统中活动的指令集合。线程:当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程。并行性和并发性并行性:指在同一时刻,有多条指令在多个处理器上同时执行。并发性:指在同一时刻,只能有一条指令执行,但多个进程指令被快速轮换执行,使得宏观上具有多个进程同时执行的效果。...原创 2021-12-31 13:43:15 · 234 阅读 · 0 评论 -
Java中的IO流
Java中的IO流分类输入IO流输入字节流(InputStream)处理流缓冲流(BufferedInputStream)转换流数据流(DataInputStream)标准流(System.in(InputStream))输入字符流(Reader)处理流缓冲流(BufferedReader)转换流(InputStreamReader)数据流标准流UML关系图如下所示PantUML语法A <|-- B //B继承AC <|...原创 2021-12-31 13:42:30 · 223 阅读 · 0 评论 -
Java中Collections和Arrays类
CollectionsCollections是个java.util下的专用静态类,它包含有各种有关集合操作的静态方法。提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作.public static void main(String[] args) { List list = new ArrayList(); list.add(17); list.add(11); list.add(65); list.add(36); Collection原创 2021-12-31 13:41:54 · 263 阅读 · 0 评论 -
Java中的集合
Java集合体系Set(接口):代表无序、不可重复的集合List(接口):代表有序、重复的集合Map(接口):代表具有映射关系的集合Queue(接口):代表队列集合集合类和数组区别数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象的引用变量)。集合里只能保存对象(实际上保存的是对象的引用变量,但通常习惯认为集合里保存的是对象)Java的集合类主要由两个接口派生而出,他们是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。Collection(接口)Ma原创 2021-12-31 13:41:18 · 97 阅读 · 0 评论 -
Java中的访问控制符
Java提供了4种访问控制级别private不加任何访问控制符的访问控制级别(default)protectedpublic从上到下,访问控制级别由小到大。权限介绍private:当前类访问权限。如果类中的成员(包括属性、方法和构造器等)使用private访问控制符来修饰,则这个成员只能在当前类的内部被访问。default:包访问权限。如果类中的成员(包括属性、方法和构造器等)或者一个外部类,不用任何访问控制符修饰,我们就称它是包访问权限。default访问控制的成员或外部类可以被相同原创 2021-12-30 11:59:40 · 492 阅读 · 0 评论 -
Java面向对象三大特征
面向对象三大特征封装对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过类所提供的方法来实现对内部信息的操作和访问。继承是实现软件复用的重要手段,Java的继承具有单继承特点,每个子类只有一个直接父类,使用extends来实现。实现继承的类被称为:子类,被继承的类被称为:父类或者基类或者超类。父类与子类的关系是一种一般和特殊的关系。即,父类(一般),子类(特殊)。比如:水果和苹果的关系,苹果继承了水果,苹果是水果的子类,则苹果是一种特殊的水果。 publ原创 2021-12-30 11:57:05 · 213 阅读 · 0 评论 -
搭建服务器方式
自建服务器用个人PC或者塔机、塔式服务器(台式机)部署服务应用局域网使用,外网使用需要配置内网穿透,比如:花生壳租赁云服务器(ECS)或云主机阿里云华为云百度云腾讯云京东云美团云滴滴云七牛云服务器操作系统Windows版本Windows Server操作系统Linux版本CentOSUbuntuRedHatDebianSUSE...原创 2021-12-30 11:55:51 · 258 阅读 · 0 评论 -
Java中的数组类型
数组中的元素类型是唯一的,只能存储一种类型,不能存储多种类型数据。数组是一种引用类型。定义数组type[] arrayName; //推荐使用这种来定义数组type arrayName[];初始化数组静态初始化初始化时,由程序员显示指定每个数组元素的初始值,由系统决定数组的长度。type[] arrayName = new type[] {element1, element2, element3};//比如int[] a = new int[]{5, 6, 7};int[]原创 2021-12-30 11:55:05 · 1002 阅读 · 0 评论