main函数

Java学习43:Java的异常

∥☆過路亽.° 提交于 2020-02-04 03:15:01
从这一章开始,我们学习Java的另一个重要知识,Java里面的异常,以及如何捕获,打印。 首先关闭当前项目,左上角点击file,close project,然后创建一个新的项目,名字叫做SixthDemo。然后创建Java的包,名为com.sixth.error,然后创建一个Java文件,名为Demo01.java 在计算机程序运行的过程中,总是会出现各种各样的错误。 有一些错误是用户造成的,比如,希望输入一个int类型的年龄,但是用户输入的是abc: // 假设用户输入了abc: String s = "abc"; int n = Integer.parseInt(s); // NumberFormatException! 程序想要读取某个文件的内容,但是用户已经把它删除了: // 用户删除了该文件: String t = readFile("C:\\abc.txt"); // FileNotFoundException! 还有一些错误是凭缘分碰到的,而且永远无法避免。例如: 网络断开,连接不到服务器 内存耗尽,程序崩溃 用户点“打印”,但是你没有外接打印机 … 所以,一个健壮的程序必须处理各种各样的错误。 所谓错误,就是程序调用某个函数的时候,如果失败了,就表示出错。 调用方如何获知调用失败的信息?有两种方法: 方法一:约定返回错误码。 例如,处理一个文件,如果返回0,表示成功

8.Go语言基础之指针

元气小坏坏 提交于 2020-02-04 00:27:09
Go语言中的指针不能进行偏移和运算,是安全指针。 在了解GO语言中的指针前,首先需要知道三个概念:指针地址、指针类型和指针取值。 1.Go语言中的指针 任何数据载入内存后,在内存中都有对应的地址,这就是指针。 为了保存一个数据在内存中的地址,需要指针变量。 比如"好好学习,天天向上"这个字符串写入程序中,程序一启动这句话就加载到内存(假设内存地址为0x123456),在程序中,把该字符串赋值给变量A,把该字符串的内存地址赋值给变量B。 这时变量B就是一个指针变量。通过变量A和变量B都能找到该字符串。 Go语言中的指针不能进行偏移和运算,因此Go语言中的指针操作非常简单,只需要记住两个符号:&(取地址)和*(根据地址取值)。 也需要记得: 值类型有:int、float、bool、string、array、struct 引用类型有:指针,map,切片,chan 1.1指针地址和指针类型 每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。 Go语言中使用&字符放在变量前面对变量进行“取地址”操作。 Go语言中的值类型(int,float,bool,string,array,struct)都有对应的指针类型,如*int,*in64,*string等。 取变量指针的语法如下: ptr := &v // v的类型为T 其中: v:代表被取地址的变量,类型为T ptr

设计模式七大原则

孤者浪人 提交于 2020-02-03 22:21:53
Java设计模式七大原则 懂了设计模式,你就懂了面向对象分析和设计 (OOA/D)的精要 1. 设计模式的重要性 软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现) 的各种问题,所提出的解决方案。 实际工作经历来说, 当一个项目开发完后,如果客户提出增新功能,怎么办? 原来程序员离职,你接手维护该项目怎么办? (维护性[可读性、规范性]) 2.设计模式的目的 代码重用性 (即:相同功能的代码,不用多次编写 可读性 (即:编程规范性, 便于其他程序员的阅读和理解) 可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护 可靠性 (即:当我们增加新的功能后,对原来的功能没有影响) 使程序呈现 高内聚,低耦合 的特性 3.设计模式常用七大原则 单一职责原则 接口隔离原则 依赖倒转(倒置)原则 里氏替换原则 开闭原则 迪米特法则 合成复用原则 3.1单一职责原则 基本介绍: 对类来说的,即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。 当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为 A1,A2 应用实例: 方案一: /** * @author 孙一鸣 on 2020/2/2 */ public class 单一职责原则 01 { public static void main ( String [

ARM汇编学习四

限于喜欢 提交于 2020-02-03 16:20:03
接下来学习条件指令。 当特定条件满足时,借助条件指令, 通过跳转(分支)或执行某些特定指令来控制程序的流动方向。相关条件被描述为CPSR寄存器中的特定位的状态,这些位根据指令计算后的结果实时改变。比如,如果我们比较两个数并且他们相等,就将零标志位置位 (Z=1) ,因为在系统底层发生了a-b=0。在这个例子里两个数是相等的,但如果第一个数字比第二个大,会得出大于结论。而相反的情况下得出小于结论。当然还有很多其他的条件,比如小于等于(LE),大于等于(GE)等等。 下表列出了可能的条件指令,他们的含义以及被检测的状态标志位 结合上表,我们看段demo .global main main: mov r0, #2 /* setting up initial variable / cmp r0, #3 / R0与数字3比较,2小于2,所以N位置1*/ addlt r0, r0, #1 /* 如果R0比3小就将R0自增1*/ cmp r0, #3 /* 再次比较r0和3,此时2+1=3,所以Z标志位置1,N置0 / addlt r0, r0, #1 / 如果r0小于3给r0自增1*/ bx lr 结合注释,就很好理解了 代码中,第一个CMP比较指令执行后触发了N标志位的置位(2-3=-1),这表明r0的值比数字3要小。随后,由于条件满足,,所以执行了addlt指令。再次比较r0和3,此时2

golang并发一看就懂系列

眉间皱痕 提交于 2020-02-03 11:55:36
1.从并发模型说起 定义: 在go里面,每一个并发执行的活动成为goroutine。 详解:goroutine可以认为是轻量级的线程,与创建线程相比,创建成本和开销都很小,每个goroutine的堆栈只有几kb,并且堆栈可根据程序的需要增长和缩小(线程的堆栈需指明和固定),所以go程序从语言层面支持了高并发。 程序执行的背后:当一个程序启动的时候,只有一个goroutine来调用main函数,称它为主goroutine,新的goroutine通过go语句进行创建。 1.2多个线程创建 package main import ( "fmt" "time" ) func DelayPrint() { for i := 1; i <=5; i++ { time.Sleep(300 * time.Millisecond) fmt.Println(i) } } func HelloWorld() { fmt.Println("Hello world goroutine") } func main() { go DelayPrint() // 开启第一个goroutine go HelloWorld() // 开启第二个goroutine time.Sleep(2*time.Second) fmt.Println("main function") } 函数输出: Hello world

Java程序员学习Go指南(一)

此生再无相见时 提交于 2020-02-03 03:41:05
转载:https://www.luozhiyun.com/archives/206 GOPATH 工作空间 米妮 m.amini.net GOPATH简单理解成Go语言的工作目录,它的值是一个目录的路径,也可以是多个目录路径,每个目录都代表Go语言的一个工作区(workspace)。 在GOPATH放置Go语言的源码文件(source file),以及安装(install)后的归档文件(archive file,也就是以“.a”为扩展名的文件)和可执行文件(executable file)。 源码安装 比如,一个已存在的代码包的导入路径是 github.com/labstack/echo, 那么执行命令进行源码的安装 go install github.com/labstack/echo 在安装后如果产生了归档文件(以“.a”为扩展名的文件),就会放进该工作区的pkg子目录;如果产生了可执行文件,就可能会放进该工作区的bin子目录。 上面该命令在安装后生成的归档文件的相对目录就是 github.com/labstack, 文件名为echo.a。 除此之外,归档文件的相对目录与pkg目录之间还有一级目录,叫做平台相关目录。平台相关目录的名称是由build(也称“构建”)的目标操作系统、下划线和目标计算架构的代号组成的。 比如,构建某个代码包时的目标操作系统是Linux

6-2 函数式编程例一

佐手、 提交于 2020-02-03 03:39:29
package main import ( "fmt" "io" "strings" "bufio" ) func fibonacci() intGen{ a, b := 0, 1 return func() int { a, b = b, a + b return a } } type intGen func() int //实现interface func (g intGen) Read ( p []byte) (n int, err error) { next := g() if next > 10000 { return 0, io.EOF } s := fmt.Sprintf("%d\n", next) // TODO: incorrect if p is too small! return strings.NewReader(s).Read(p) } func printFileContents(reader io.Reader) { scanner := bufio.NewScanner(reader) for scanner.Scan() { fmt.Println(scanner.Text()) } } func main() { f := fibonacci() fmt.Println(f()) fmt.Println(f()) fmt.Println(f())

C语言函数---递归与迭代

老子叫甜甜 提交于 2020-02-03 00:02:39
简单介绍C语言函数 C语言函数是一种函数,用来编译C语言,所在库函数为ctype.h,分为分类函数,数学函数,目录函数,进程函数,诊断函数,操作函数等。 从表面上看,函数在使用时必须带上括号,有必要的话还要传递参数,函数的执行结果也可以赋值给其它变量 对于库函数和自定义函数 C语言在发布时已经为我们封装好了很多函数,它们被分门别类地放到了不同的头文件中(暂时先这样认为),使用函数时引入对应的头文件即可。这些函数都是专家编写的,执行效率极高,并且考虑到了各种边界情况,各位读者请放心使用。 C语言自带的函数称为库函数(Library Function)。库(Library)是编程中的一个基本概念,可以简单地认为它是一系列函数的集合,在磁盘上往往是一个文件夹。C语言自带的库称为标准库(Standard Library),其他公司或个人开发的库称为第三方库(Third-Party Library)。 递归与迭代的区别 递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己. 一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合. 使用递归要注意的有两点: 1)递归就是在过程或函数里面调用自身; 2)在使用递归时,必须有一个明确的递归结束条件

一个入门级CTF的Reverse

喜夏-厌秋 提交于 2020-02-02 22:13:56
这道题是XCTF攻防世界上的一道新手入门题目! 年前刚接触逆向时IDA,OD了这些工具都不会用(负基础),当时做这些题的时候觉得挺难(主要是缺少练习,没思路无从下手)。现在回头再来看这些题目感觉确实是入门级的题目,所以逆向是门艺术更是门技术,需要多练习熟悉工具和掌握一些技巧,下面就来分析一下这道题目。 题目给了一个附件是一个exe的可执行文件,那好我们先来执行一下他好了! 结果出来一大堆英文,奈何本人英文真的很菜,高考40分:),浑身发憷,不怕手机自带拍照翻译,虽然翻译的水平很一般但是磕磕绊绊的还是能明白他什么意思: 这是个游戏(游戏规则:把那几个图形都看成灯,当其都亮时,也就是图形变成实心的游戏胜利),你必须把这个游戏过了之后才会得到我们想要的flag。 我们是要通过工具来获得这个flag,当然如果你玩游戏很nb的话你也可以通关他获得flag。 好废话不多说我们现在就来寻找flag! 1. 我们先用PEID分析一下程序的基本信息 可以看到检测到其未压缩,说明此程序无壳。下面我们可以选择用静态分析工具IDA来分析程序,也可以选用动态调试工具Ollydbg。 我们先用IDA来分析吧,因为此程序为32位的所以我们用32位的IDA打开程序。 我们按Ctrl + E弹出入口函数的信息,点击确定进入入口函数。因为此程序是一个控制台程序,所以我们需要找到main函数(处理逻辑在main函数里)

基于django的个人博客网站建立(三)

老子叫甜甜 提交于 2020-02-02 13:37:52
基于django的个人博客网站建立(三) 前言 网站效果可 点击这里 访问 今天主要完成的是文章在页面的显示以及评论,留言 具体内容 首先我希望主页面是显示我的所有文章,于是在主页面的视图函数中返回了所有的文章对象: def index(request): if request.method == 'GET': all_article = models.Article.objects.all().order_by('id').reverse() all_type = models.ArticleType.objects.all() return render(request, 'show/index.html',{'all_article':all_article,'all_type':all_type}) all_type为所有的的文章类别,用于导航条的显示,之后就可以遍历所有的文章对象在主页显示了: {% extends "show/base.html" %} <!-- ======================== END HEADER AREA HERE ================================= --> <!-- =================== START MAIN CONTENT AREA HERE ==================