20172323 2017-2018-2《程序设计与数据结构》第十一周学习总结
教材学习内容总结
23章-Android简介
- Android操作系统是一种多用户的Linux系统,一个应用程序和其他App隔离开来运行的。
- Java是开发Android应用程序的默认语言。
- Android4.4是Dalvik和ART的转折点和分水岭
- Android是向后兼容的
- 4种Android应用程序组件
名称 | 介绍 |
---|---|
活动(Activity) | 包含用户交互组件的一个窗口 |
服务(Service) | 在后台长时间运行的操作 |
广播接收者(Broadcast receiver) | 一个监听器,负责对系统或应用程序声明作出响应 |
内容提供者(Content provider) | 管理要和其他应用程序分享的一组数据的一个组件 |
- 意图是一条消息,发送给系统或另一个应用程序,以要求执行一个动作
- 每个应用程序都必须有一个清单,描述该应用程序
- Android版本
24章-初识Android
- 应用程序结构:Project窗口中有两个主要的节点。app节点包含了应用程序中所有的组件,Gradle Scripts节点包含了Gradle构建脚本。
- app节点包含mainfests,java,res三个节点
- Android清单:用来描述应用程序。
- 清单文件是一个XML文档,使用mainfest作为其根元素。mainfest元素的package属性为应用程序指定了一个唯一的标识符。Android工具根据这一信息生成相应的Java类
- application元素描述了应用程序,它包含了一个或多个activity元素。应用程序通常有一个主活动,充当应用程序的入口点。
- apk文件
- Android应用程序打包为一个apk文件。自动生成的apk文件包含调试信息,能够以调试模式运行
- 即便应用程序有多个Java文件,也只有一个classes.dex文件
- 调试应用程序
- 使用日志消息调试一个应用程序。Android框架提供了android.util.Log类用于记录日志消息
- 在LogCat中,不同日志级别的消息以不同颜色来显示且每条消息都有一个标签。
25章-活动
- 活动的生命周期
- 启动一个活动意味着要显示一个窗口,应用程序所创建的第一个窗口,叫作主活动。通过在应用程序清单文件中声明来指定主活动
- 在
application
元素定义的活动下,使用inter-filter
元素声明为主活动,其必须包含MAIN的action
和LAUNCHER的category
- 可以通过
startActivity
方法传递一个意图启动一个新的活动
26章-UI组件
- 使用UI工具所做的事情,都会反映到布局文件中,以XML元素的形式体现出来
- Toast是一个小的弹出对话框,用于显示一条消息作为给用户的反馈。
- AlertDialog也是一个为用户提供反馈的窗口,但它会一直显示直至失去焦点。
- 通知是出现在状态栏的一条消息,通知是持久的,并且将保持显示
教材学习中的问题和解决过程
- 问题1:apk文件的签名是什么意思?
- 问题1解决方案:计算机中所说的签名和生活中所说的签名在本质上是一样的,Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,是没有办法安装到系统中的!Android通过数字签名来标识应用程序的作者和在应用程序之间建立信任关系,不是用来决定最终用户可以安装哪些应用程序。这个数字签名由应用程序的作者完成,并不需要权威的数字证书签名机构认证,它只是用来让应用程序包自我认证的。
- 问题2:在解释清单文件中的元素时,activity元素的name属性可以是一个完全限定名称?
- 问题2解决方案:查找了很多地方都没有彻底搞懂这个名词在这里的意思,但是我找到了该名词在c语言中的定义,应该是可以借鉴的吧。
每个命名空间和类型都具有一个完全限定名(fully qualified name),该名称在所有其他命名空间或类型中唯一标识该命名空间或类型。
大致应该是每一个命名空间的独特的标识之类的意思吧???
-
问题3:显式意图和隐式意图的具体理解
-
问题3解决方案:显式意图:调用
Intent.setComponent()
或Intent.setClass()
方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。
隐式意图:没有明确指定组件名的Intent为隐式意图。 Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。 -
问题4:关于活动的生命周期的理解
-
问题4解决方案:
- onCreate()这个方法在活动第一次创建的时候会被调用。
- onStart()这个活动由不可见进入可见的时候调用
- onResume()当活动准备好和用户进行交互的时候调用
举例,现在许多同学在一起赛跑,老师说,下一组要跑步的走到起跑线,准备跑。此时就是onResume(),此时的活动一定位于前台,学生一定站在了跑道上,一个道理。
- onPause()当前活动需要去启动另一个活动,或者恢复另一个活动的时候去调用。这个方法中,我们可以将一些CPU资源等释放掉,因为当你不在前台了,处于暂停或者停止甚至是销毁状态了,就应该让出一些资源,减少系统的负担。
- onStop()活动完全不可见的时候调用
- onDestroy()这个很好理解,活动被销毁了,按返回键了,或者finish等
- onRestart()由停止状态变为运行状态了,被调用。如果是暂停状态变为运行状态,是不会被调用的。
代码调试中的问题和解决过程
- 问题1:第一次使用AS,生成一个新的project,可生成的文档就出现了如图的问题--显示R类标红
然后我想直接忽略此错误强制运行,在点击运行按钮后,就出现了这样的提示
显示我没有安装SDK,可事实上我确实安装了SDK,于是将错误提示在网上搜索,就提示我通过点击File
-->Project Structure
-->Build Tools Version
配置一下就好了,如图
其中的原理就不太懂了,再次运行AS又运行了老久,貌似下载安装了许多东西
但好在最后运行成功了
上周考试错题总结
- 错题1:The following method should return true if the int parameter is even and either positive or 0, and false otherwise. Which set of code should you use to replace ... so that the method works appropriately?
public boolean question3(int x) { ... }
A .if (x = = 0) return true;else if (x < 0) return false;else return question3(x - 1);
B .if (x = = 0) return false;else if (x < 0) return true;else return question3(x - 1);
C .if (x = = 0) return true;else if (x < 0) return false;else return question3(x - 2);
D .if (x = = 0) return false;else if (x < 0) return true;else return question3(x - 2);
E .return(x = = 0);
- 解析:如果x为0,则最初的x必为偶数;若x<0,则x最初为奇数或是小于零
- 错题2:Which of the following is considered an Abstract Data Type?
A .数组
B .参考变量
C .任何数据类型(例如int、Double、char)
D .矢量
E .以上所有 - 解析:抽象数据类型包括数据结构和操作和访问数据结构的方法,其中只有向量将两者结合在一起,数组是数据结构,但没有方法(例如插入方法或搜索方法),而引用变量和原始类型是数据而不是数据结构。
- 错题3:Abstract Data Types have which of the following object-oriented features?
A .信息隐藏
B .继承
C .多态
D .讯息传递
E .以上所有 - 解析:以上这些答案都是面向对象的特征类型,抽象数据类型封装了数据结构和操作数据结构的方法,从而保留了信息隐藏,因此,所有ADT都使用信息隐藏,因此不能直接从ADT外部操作数据结构,而不需要其他面向对象的特性。
- 错题4:Which of the following criticisms of an array is applicable to a Java array?
A .访问随机元素是一种效率低下的结构。
B .它只支持先入先出的访问类型。
C .它的大小是固定的(静态的)。
D .它不能用于创建抽象数据类型,如队列或堆栈
E .以上所有 - 解析:当数组被实例化时,Java中任何数组的大小都是固定的。如果在向数组中添加元素时,数组被填充,数组本身就不能改变大小。如果旧数组元素被移动到新数组中,就可以创建新数组,但这是效率低下的。
- 错题5:One operation that we might want to implement on a Stack and a Queue is full, which determines if the data structure has room for another item to be added. This operation would be useful
A .只有当队列或堆栈使用数组实现时
B .只有当队列或堆栈使用链接列表实现时
C .只适用于队列
D .只适用于堆栈
E .以上任何一项操作都是没有用的。 - 解析:数组是一个静态大小的对象,如果它被填充满,那么任何添加的操作,无论是列表插入、队列还是堆栈推送,都会被阻止。这可以通过事先检查结构是否为满来确定。如果数据结构是使用链接列表实现的,这是不必要的,因为(我们假设)将始终有动态内存可用于添加新元素。
- 错题6:In a linked list in Java
A .链接是一个对象。
B .链接是一个节点。
C .链接是一个引用。
D .链接是int型。
E .链接是一个类。 - 解析:这道题的错误点在于没有把linked list和link区分开来。在链表中,链接是对下一节点的引用。
- 错题7:A linear data structure
A .每个节点总是有一个以上的链接。
B .有时表示为树或图。
C .每个节点只能有一个链接
D .几乎总是保持排序顺序,无论是升序还是降序。
E .以上都不是 - 解析:一个线性数据结构中每个节点只有一个链接。以树或图的形式显示的数据结构不是线性的,它们至少是二维的,没有任何使线性数据结构保持任何类型的顺序的要求。
- 错题8:The push and enqueue operations are essentially the same operations, push is used for Stacks and enqueue is used for Queues.
- 解析:进栈和出栈操作总是在堆栈的顶部进行,而队列操作总是在队列的后面添加。所以该说法错误
- 错题9:An array is a List Abstract Data Type.
- 解析:数组是一种数据结构,可用于存储值,但该数组没有已实现的执行列表操作的操作所以该说法错误
- 错题10:A linked list that contains 6 Nodes will have 6 reference pointers.
- 解析:为了访问链接列表,至少需要有第7个引用指针所以该说法错误
- 错题11:It is possible to restrict the type of object which is stored within a Java collection by using a generic type when the collection is declared.(在声明集合时,可以使用泛型类型来限制存储在Java集合中的对象的类型。)
- 解析:泛型提供了一种方法来指定集合被限制到的对象的类型所以是正确的
- 错题12:Trees and graphs, because they are dynamic in nature, cannot be implemented using Java arrays.
- 解析:虽然数组有固定的大小,但可以将原数组分配到更大的数组中去,从而通过这种方式来实现数组的扩展,所以该说法是错误的
- 错题13:The only difference between a stack and a queue is that stacks operate using FIFO and queues operate using LIFO.
- 解析:堆栈使用先入后出(LIFO)操作,而队列使用先进先出(FIFO)操作。
- 错题14:Linux Bash中,使用
sudo apt-get upgrade
命令可以更新系统。 - 解析:此题正确
- 错题15:一个具有执行权限的目录可以被打开并查看内部文件
- 解析:一个目录同时具有读权限和执行权限才可以打开并查看内部文件.
- 错题16:Linux Bash中,使用apt-get search tree命令来查找是否系统装有软件tree。
- 解析:应该使用
apt-cache search tree
- 错题17:Linux Bash中,使用
rm –r /dky/D*
命令强制删除/dky目录下所有D开头的文件。 - 解析:应该使用
rm –f /dky/D*
- 错题18:Linux Bash中,查找五天之内src目录中删除的文件的命令是
find /src/ -ctime -5
。 - 解析:此题正确
- 错题19:Linux Bash中,使用grep查找当前src目录下所有包含main函数的文件,并要求显示出现行号的命令是
grep –n main /src
- 解析:应该使用
grep –rn main /src
- 错题20:在Ubuntu中,使用vim编辑器时,想要移动光标,除方向键之外,还可以依次使用hjkl键进行上下左右的移动。
- 解析:没有想到栽在了顺序之上,上下左右顺序依次是kjhl
- 错题21:在Linux Bash中,find命令的
-cmin n
参数表示查找在过去n天内被修改过的文件。 - 解析:参数n解释有误
- 错题22:在Linux Bash中,为所有人对file1.txt文件添加写入权限的命令是
chmod o+w filel.txt
或者chmod 666 filel.txt
. - 解析:
chmod a+w filel.txt
或者chmod 666 file
, a+w 和 o+w 有所区别。
结对及互评
- 博客中值得学习的或问题:
- 教材学习内容总结详细,遇到的问题也有详实的解决过程,看得出来是用心在做
- 代码中值得学习的或问题:
- 这周的代码编写几乎是从零开始的,但是两位同学的代码都还不错
- 基于评分标准,我给谭鑫的博客打分:10分。
得分情况如下:正确使用Markdown语法(加1分)
模板中的要素齐全(加1分)
教材学习中的问题和解决过程, 两个问题加2分
代码调试中的问题和解决过程, 两个问题加2分
感想,体会不假大空的加1分
点评认真,能指出博客和代码中的问题的加1分
代码规范加1分
有动手写新代码的加1分 - 基于评分标准,我给方艺雯的博客打分:11分。
得分情况如下:
正确使用Markdown语法(加1分)
模板中的要素齐全(加1分)
教材学习中的问题和解决过程, 二个问题加2分
代码调试中的问题和解决过程, 三个问题加3分
感想,体会不假大空的加1分
点评认真,能指出博客和代码中的问题的加1分
代码规范加1分
有动手写新代码的加1分
点评过的同学博客和代码
其他
本周主要开始学习安卓方面的知识,本来内容并不是特别多,难度也不是很大,但在实验中AS出现了一系列棘手的问题,而且直到现在也没有得到解决,所以这周特别难过。不过好在快结束了,胜利就在前方!另外值得注意的是,本周的测试错题过多,尤其是关于Linux的操作命令,几乎是一窍不通啊。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 117/117 | 1/1 | 19/19 | |
第二周 | 289/406 | 1/2 | 21/40 | |
第三周 | 403/809 | 2/4 | 22/62 | |
第四周 | 1783/2592 | 1/5 | 35/97 | |
第五周 | 770/3362 | 1/6 | 25/122 | |
第六周 | 734/4096 | 1/7 | 25/147 | |
第七周 | 687 / 4783 | 1/8 | 25/172 | |
第八周 | 824/5607 | 2/10 | 30/202 | |
第九周 | 764/6371 | 2/12 | 30/432 | |
第十周 | 540/6911 | 2/14 | 20/452 | |
第十一周 | ??? | 2/14 | 20/472 |
-
计划学习时间:20小时
-
实际学习时间:20小时