分类 笔记 下的文章

01 什么是面向对象 / 面向过程

  1. 面向过程:就是对一件事情的步骤进行逐步实现,可以用于解决较为简单的问题。举个例子,假设我要出门,第一步要先离开位子,第二步要穿鞋,以此类推。这就是对一件事情过程的记录,也就是面向过程的解决方案。但如果我要造一架飞机,我无法一步一步实现,而是要先进行规划,对飞机的整体架构进行了解,将飞机分为多个大部件,然后逐步细化,最后才到动手制造。这就引出了面向对象这个概念。
  2. 面向对象:所谓面向对象,就是对事物在明确需求后进行分析,逐步拆分形成模块化。在大型项目中,便于明确各个人员的分工,提升效率。哪怕是细化后的任务内容,仍需要使用面向对象的思想,这有利于代码的规范化,提高可拓展性。

注释

以下的内容仅针对与个人理解,还有一部分基础知识没有总结,后续将补充。

02 封装

  1. 这里的封装主要是讲的 publicprivate的关系,顾名思义pulic就是公有的意思,private即私有。当给一个变量赋予不同的属性,这个变量就有不同的效果。
  2. 给public属性赋值后能成功输出,但给private赋值则会报错,因为私有属性是无法在外部获取。
  3. 但也有一些方法,如提供public的get/set的方法。

  4. 公共方法则可以被调用,调用公共方法时,公共方法位于私有变量内部,可以对私有变量进行赋值以及获取。

  5. 代码进行封装(设为私有),在外部就无法知道内部代码是如何运作的,提高了代码的安全性以及规范性。

03 类的继承

  1. 继承是类中很重要的一个属性,首先要有子属性与父属性的概念。
  2. 继承属性的使用方法是在对象名后加上extends以及继承对象名,也就是继承的意思。

  3. 继承后,就能使用继承对象(父项,后面统称为父项)中的内容。这里对在Person类中进行一些简单的赋值。

  4. 在继承父项后,子项就能使用父项的公有方法以及公有属性。

  5. 继承也涵盖的封装的内容,无法使用私有内容,如需使用需要设置get/set的公有方法。

04 Super方式的使用

  1. super的使用方式与继承相同,是继承的一种特有表现,用于显示父项的属性。


  2. 这里可以看到使用了thissuper有着不同的效果。
  3. 当一个类其继承的父类与本身都具有同一属性时,不加super会默认使用本身的属性。


  4. 以上表述同样可以用于方法的继承。

05 方法重写

  1. 当一个类不想使用其父类的继承方法而想自己重新编写时,无需更改父类方法,通过方法重写即可重写编写方法。

  2. 使用场景,如子类也想使用run这个方法,但想使run方法执行其他命令,这里就可以使用方法重写。command + N 即可

06 多态

  1. 多态时用来体现类与类的继承关系,比如

    图中的Stu类属于Person类,Person类属于Object类。

  2. 子类可以调用父类的属性,但父类无法调用子类的属性。


    就像这里Object类中没有test方法,test方法是Stu中的,因此无法调用需要进行类型的强制转换。

  3. 多态这个概念只存在于方法,不存在于属性。

07 instanceof与类型转换

  1. instanceof 这个方法用于判断两个类的关系,比如Stu继承与Person,他们都继承与Object,这就说明Object与二者都有关系,Stu与Person有关系。Object与String有关系,但String与Stu、Person都无关系。
  2. instanceof 返回是bool类型
  3. 类型转换,就是在变量前加上转换类型即可。

    这里就是对s2进行了类型的强制转换为Stu类型,这样就能够使用Stu中的方法。

08 static关键字详解

  1. static顾名思义就是静态的意思,他会在调用这个对象时就进行创建生成。

  2. 设置为static后,在调用类时就可以直接使用。

  3. 未设置static的变量则无法直接使用,需要通过生成对象后才能调用。

  4. static方法的生成优先等级 > 匿名方法 > 构建方法

09 抽象类

  1. 抽象类 就是在使用了abstract后,就变成了必须要先重写代码才能使用的一种定义类的方法。
  2. 抽象类是一种灵活的类,可以在里面只定义接口,不写方法,也可以在里面写方法。但这样规范化不严谨,没有接口类实用。
  3. 抽象类被继承时,其抽象方法必须被重写。

  4. 或者将该类也定义为抽象类。

  5. 这里可以看到在重写抽象方法后,就可以调用抽象类。

  6. 抽象方法必须通过抽象类来存放,抽象类中可以不包含抽象方法。

10 interface 接口类

  1. 接口类就是一种比抽象类更为绝对的类,接口类只能用于定义参数,无法进行实现。这是面向对象编程的最重要的方式之一。就像开始说的,要先对事物进行分析、细化,然后才是实现。在分析、细化后,就将各个部分写成接口类,依照接口类的需求来实现方法。这就是面向对象编程。
  2. 接口类定义利用 inferface 来定义,只需要编写相应的需求参数。

  3. 然后建立一个带Impl后缀的Java文件,在该文件中实现刚刚写好的接口。

  4. 这里报错的原因就是没有重写接口,当我们将接口重写后,这个接口类就完成了。

  5. 需求参数也和我们定义的接口类一致,这就是接口类的具体使用,也是我们面向对象编程的核心思想。

总结

写得比较仓促,将今天学的Java面向对象编程的基础复盘了一下。还有很多地方没写清楚,后续还会关系。

实践

  1. 这里主要就是将搭建好的平台进行相应参数的配置

  2. 下面是Docker选项的配置


    1. 下面就逐步讲解,首先是第一个参数Auto Connect Network该参数需要配置与生成时的相同,可以调用下面命令查看有哪些容器
      docker network ls -f "label=com.docker.compose.project=ctfd" --format "{{.Name}}"
      该网络主要用于与题目容器的网络连通,请务必确保填写正确。
    2. Dns Setting的配置,填写一个通用的DNS即可。

    3. Auto Connect Containers的配置,该配置用于生成容器后,容器与选定的容器相连接。

  3. Frp的配置


    1. API URL:用于连接Frpc Admin获取config配置文件
    2. Http Domain Suffix:用于进行域名解析,实现通过域名访问题目。
    3. Http Port:用于Http Domain Suffix的端口。
    4. Direct IP Address:通过IP:Port生成题目容器的IP地址,上线时请确保IP可以正常访问,可以是公网IP,也可以是局域网IP,根据使用场景不同进行不同的设置。
    5. Direct Minimum/Maximum Port,通过IP生成的题目的端口发放限制。
    6. Frpc config template:通过配置文件,可覆盖相应的配置,确保server_addr/server_port,配置正确。
    7. 使用配置文件配置时,建议了解Frp配置方式后再进行配置,配置时的体验会更佳。

前言

协会的任务罢了~

步骤

  1. 虚拟机搭建
  2. Docker、Docker-composer 安装 Docker swarm 启用
  3. 拉取项目 注意:这里https://github.com/xxxxxx如果因为国内访问吃力,可以换成git://github.com/xxxxxx。
  4. 部署 docker-compose up -d

实践

  1. 看起来很简单对吧,接下来,会遇到版本不匹配、apt-get换源、权限不够、redis地址异常等问题。痛苦的搭建体验。ValueError: Redis URL must specify one of the followingschemes (redis://, rediss://, unix://)

  2. 当然,在搭建官方版还是十分轻松愉快的,拉取镜像后,可能会出现“权限不够的情况”,只需要在docker-composer.yml中的每一个容器添加privileged: true
    就可以直接跑起来了。

    这时可以看看相关的容器情况docker container ls
    (原谅远程windows没有Xshell,XD)
    还可以看看容器运行情况docker stats

《 突 然 成 功 了 》

  1. 写到一半,突然项目就成功运行起来了。
  2. 这里把对ctfd-whale的插件项目安装步骤说明一下。
  3. 前面写的包错都是基于对Dockerfile内的镜像进行了修改才出现的问题,原项目作者的教程是极其细致且准确的。CTFd-Whale 推荐部署实践
  4. 这里将记录下后面搭建成功的流程


  1. 环境:Mac Bigsur 11.5.1,Linux也可。
  2. 使用代理export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890这里用了Clash代理,如果有代理的可以替换相应的端口,无代理可将https替换为git。
  3. 拉取项目 git clone -b single https://github.com/glzjin/CTFd.git
  4. token随机,docker-composer启动容器,最好不要进行更改!!!这里只有两处的修改就是对于requests.txt中的gevent版本进行修改,不然会出现编译失败的情况。具体包错原因这里没有分析,这里通过Google查询到可以对gevent版本进行更新,这是在上面修改了镜像的情况下出现包错的解决方案之一,没想到用到这里了XD。这里是对原有gevent版本进行替换后另外添加了greenlet包。修改为:gevent==1.1.0替换为gevent==1.3.4,添加greenlet==0.4.13
    以及对于Dockerfile中的python版本进行了添加,原有镜像中无法找到python、python-dev的安装包了。将pythonpython-dev更改为python3python3-dev
  5. 这里对项目的修改就结束了,然后就直接docker-composer up -d即可构建docker容器。

成果展示

  1. 成功搭建页面

成功但没完全成功

在安装成功后,发现注册不行,处于无限加载的状态,进docker查看日志发现了报错。

在issue上发现了同样的问题

随后追踪到了frankli0324的项目,在其使用指南中开始从头开始安装。

正式搭建完成

  1. 拉取官方镜像git clone https://github.com/CTFd/CTFd.git
  2. conf下创建frp文件夹mkdir./conf/frp
  3. frp文件夹下,创建frpc.inifrps.ini

    frpc.ini

    [common]
    token = randomme#切记需要更改!!!
    server_addr = 172.1.0.1
    server_port = 6490
    pool_count = 200
    tls_enable = true
    admin_addr = 172.1.0.3
    admin_port = 7400

    frps.ini

    [common]
    bind_port = 6490
    token = randomme #切记需要更改!!!两个文件内token一致
  4. 添加2个虚拟网段,其中一个作为FRPCCTFD两个容器连通,另一个供FRPC访问题目容器。

    networks:
        frp_connect:
    driver: bridge
    internal: true
    ipam:
    config:
    - subnet: 172.1.0.0/16
    frp_containers:
    driver: overlay
    internal: true # 如果允许题目容器访问外网,则可以去掉
    attachable: true
    ipam:
    config:
    - subnet: 172.2.0.0/16
  5. 分别创建FRPC FRPS 2个服务,将新建的网段添加给相应的服务

    services:
        frps:
    image: glzjin/frp
    restart: always
    volumes:
    - ./conf/frp:/conf
    entrypoint:
    - /usr/local/bin/frps
    - -c
    - /conf/frps.ini
    ports:
    - 10000-10100:10000-10100 #映射direct类型题目的端口
    - 8001:8001 # 映射http类型题目的端口
    networks:
    default: # 需要将frps暴露到公网以正常访问题目容器
    frp_connect:
    frpc:
    image: glzjin/frp:latest
    restart: always
    volumes:
    - ./conf/frp:/conf/
    entrypoint:
    - /usr/local/bin/frpc
    - -c
    - /conf/frpc.ini
    depends_on:
    - frps #frps需要先成功运行
    networks:
    frp_containers: # 供frpc访问题目容器
    frp_connect: # 供frpc访问frps, CTFd访问frpc
    ipv4_address: 172.1.0.3
  6. 然后执行命令docker-compose up -d,即可等待搭建完成。

总结

这次搭建花费的总时间还是挺长的,起初的配置glzjin的镜像,后面通过了issue使用了frankli0324插件,最后通过2位大佬的配置文件重新自己配置,whale插件使用的是frankli0324fork的项目,但其frp的配置似乎有些出入。在了解了docker网络配置后,结合glzjinfrp项目,成功搭建CTFd平台以及安装CTFd-whale插件。

前言

在iPad上安装应用,大多数情况只能通过App Store下载。但有很多个人开发者的项目尚未发布上线在AppStore内,因此便有了AltStore这款应用。

知识点

Apple开发者ID
AltStore的使用

实践

  1. 在Windows/MacOS上安装AltServer。

  2. 安装邮箱插件

  3. 打开邮箱偏好设置,选择管理插件,启用该插件。

  4. 登陆Apple ID

  5. 通过有线连接,在访达中找到并且启用接入Wi-Fi时显示此iPad

  6. 选择安装后,即可在iPad上找到AltStore

    IMG_5FF13451E2BA-1

  7. 在设置中,选择并且相信您的Apple IDIMG_3B05717BB672-1

  8. 最后在选择您的ipa文件,分享至AltStore即可安装。IMG_A6CD5C350BC7-1

  9. 至此就可以安装ipa应用至iPad上。但每隔7天需要刷新使用时间,个人开发者用户的APP有效时间为7天,每隔7天需要重新申请。当然,也可以保持您Windows/MacOS上的AltStore与邮箱开启,AltStore会自动刷新。
    IMG_5C2B2E61C995-1

结束

以上就是本次的利用AltStore安装个人开发APP在iPad上的全过程,感谢您的观看。