20172327 2017-2018-2 《程序设计与数据结构》第十一周学习总结
学号 2017-2018-2 《程序设计与数据结构》第十周学习总结
作业要求
1.教材第23-26章(Java和Android开发学习指南)
- 代码托管到git@OSC,参考一下使用开源中国托管代码
- 有问题去蓝墨云班课或者答疑论坛提问,尽量不在微信群和QQ群解答学习问题
教材学习内容总结
第23章 Android简介
1.Java是开发Android应用程序的默认语言,但Android应用程序不同于Java应用程序在Java虚拟机上运行。
2.Android4.4是Dalvik和ART的转折点和分水岭。
+ Dalvik
Android4.4及以前使用的都是Dalvik虚拟机,我们知道Apk在打包的过程中会先将java等源码通过javac编译成.class文件,但是我们的Dalvik虚拟机只会执行.dex文件,这个时候dx会将.class文件转换成Dalvik虚拟机执行的.dex文件。Dalvik虚拟机在启动的时候会先将.dex文件转换成快速运行的机器码,又因为65535这个问题,导致我们在应用冷启动的时候有一个合包的过程,最后导致的一个结果就是我们的app启动慢,这就是Dalvik虚拟机的JIT特性(Just In Time)。
+ ART
ART虚拟机是在Android5.0才开始使用的Android虚拟机,ART虚拟机必须要兼容Dalvik虚拟机的特性,但是ART有一个很好的特性AOT(ahead of time),这个特性就是我们在安装APK的时候就将dex直接处理成可直接供ART虚拟机使用的机器码,ART虚拟机将.dex文件转换成可直接运行的.oat文件,ART虚拟机天生支持多dex,所以也不会有一个合包的过程,所以ART虚拟机会很大的提升APP冷启动速度。
3.在Android5.0之前,apk文件运行于Dalvik之上。在Android5.0及其以后的版本中,在安装应用程序的时候,apk中的dex文件被转为机器码。
4.Android是向后兼容的,针对较早的版本编写的应用程序,总是能够在新的版本上运行。
5.每个应用程序都必须有一个清单,用于描述该应用程序。清单以XML文件的形式给出,其中并包含下列几项:
1.运行该应用程序所需的最小API Level
2.应用程序的名称
3.当用户在其手机或平板电脑的主屏幕上触碰该程序的图标时,将会打开的第一个活动(窗口)
4.是否允许从其他的应用程序调用你的应用程序组件
5.对于在目标设备上安装的应用程序,用户必须保证一组什么样的许可。如果用户不能保证所有的必须的许可,将不会安装该应用程序。
第24章 初识
1.Project窗口中有两个主要的节点,app和Gradle Scripts
2.app节点包含了应用程序中所有的组件
1.manifests:包含了一个AndroidMainfest.xml文件,它描述了应用程序
2.java.包含了所有的java应用程序和测试类
3.res.包含了资源文件,其中还包括了drawable(图像),layout(布局文件),menu(菜单文件),mipmap(app图标),values(字符串和其他值)
3.Gradle Scripts节点包含了Gradle构建脚本,供Android Studio构建你的项目
4.在Android Studio运行一个Android应用程序的时候,一个apk文件将会自动构建和签名。这个文件将会命名为app-debug.apk,并且存储在项目目录下的app/build/outputs/apk目录中。
5.Android Studio中所看不到的,是一个名为R的通用的Java类,可以在项目的app/build/generated/source目录下找到它。
第25章 活动
1.活动的生命周期
1.onCreate()每个活动都会有的方法,在活动第一次被创建的时候调用
2.onStart这个活动在活动由不可见变为可见的时候调用
3.onResume这个方法在活动准备好和用户进行交互的时候调用,此时的活动一定位于返回栈的栈顶,并且处于运行状态。
4.onPause()这个方法在系统准备去启动或者恢复另一个活动的时候调用。 我们通常会在这个方法中将一些消耗 CPU 的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。
5.onStop()这个方法在活动完全不可见的时候调用。它和 onPause()方法的主要区别在于,如果启动的新活动是一个对话框式的活动,那么 onPause()方法会得到执行,而 onStop()方法并不会执行。
6.onDestroy()这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。
7.onRestart()这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。
2.启动一个活动的意图动作
第26章 UI组件
1.开始Activity:在这个阶段依次执行3个生命周期的方法,分别是:onCreate、onStart和onResume方法
2.Activity重新获得焦点:如果Activity重新获得焦点,会依次执行3个方法,onRestart、onStart和onResume
3.关闭Activity:当Activity被关闭时系统会依次执行3个方法,onPause、onStop和onDestory。
代码调试中的问题和解决过程
-
问题1:问题1:按教材步骤安装Android 时出现了sync failed?
-
问题1解决方法:
上周考试错题总结
1.A collection in the items stored there are of different types is referred to as a(n) ________ type.
A . homogeneous
B . heterogeneous
C . dynamic
D . abstract
E . vector
解析:异构这个术语意味着元素是不同的类型。在Java中,类可以存储异构类型,例如一个实例数据可能是int,另一个是String,第三个是double。另一方面,数组是同构类型,因为数组中存储的每个元素都是相同的类型。
2.Abstract Data Types have which of the following object-oriented features?
A . information hiding
B . inheritance
C . polymorphism
D . message passing
E . all of the above
解析:一个抽象的数据类型封装了一个数据结构和处理数据结构的方法,这样信息隐藏就会被保存下来。因此,所有ADT都使用了信息隐藏,因此不能直接从ADT外部操作数据结构,而不需要其他面向对象的特性。
3.Linux Bash中,di1和di2是两个已存在的文件夹,则命令mv di1 di2表示将文件di1移动至文件di2内。
A . true
B . false
解析:网上查到的资料:mv 目录名 目录名 >>目标目录已存在,将源目录移动到目标目录;目标目录不存在则改名.
参考链接:Linux mv命令
4.Linux Bash中,查找五天之内src目录中删除的文件的命令是find /src/ -ctime -5。
A . true
B . false
解析:参考链接:Linux find命令
5.A linked list that contains 6 Nodes will have 6 reference pointers.
A . true
B . false
解析:为了访问链表,至少需要有第7个引用指针,一个引用链表中的第一个项的引用指针。
6.Trees and graphs, because they are dynamic in nature, cannot be implemented using Java arrays.
A . true
B . false
解析:任何给定的有一个固定大小的数组,因此最大电流的大小(节点数)的树或图仅限于其底层数组的大小,可以分配一个更大的数组,将原始数组中的元素复制到新数组,并继续以这种方式实现扩张。这种技术之所以成功,是因为Java数组是对象,访问所有对象的机制是通过引用实现的。在大多数其他语言(如C、c++、c#、Pascal等)中,数组都不是对象,因此这种技术将会失败。
7.A bi-directional list is an example of a non-linear data structure.
A . true
B . false
解析:虽然双向列表在每个节点中都有多个链接,但是当您绘制双向列表的图片时,它仍然是线性的。
8.Linux Bash中,使用sudo apt-get upgrade
命令可以更新系统。
A . true
B . false
9.Linux Bash中,可以使用chomd 777 pdds命令修改文件pdds的权限,并使得其拥有者、拥有者所在的组和其他用户都拥有全部权限。
A . true
B . false
解析:chmod 777 pdds,不是 chomd 777 pdds ,这道题目没看清楚。
10.Linux Bash中,使用apt-get search tree命令来查找是否系统装有软件tree。
A . true
B . false
解析:应使用apt-cache search tree
11.In a linked list in Java
A . the link is an object
B . the link is a node
C . the link is a reference
D . the link is an int
E . the link is a class
解析:在链表中,链节是对下一个节点的引用。通过检查引用的内容来“取消引用”链接。节点是对象。对象是类的实例。节点的数据部分很可能是int,以及任何其他类型的数据。
12.A simple linear list
A . is an example of a degenerate tree
B . is an example of a degenerate graph
C . is an example of a degenerate digraph
D . cannot be represented as a degenerate tree, graph or digraph
E . none of the above
解析:一个简单的线性列表被指向,从它的开始节点到它的结束节点。图和有向图都没有起始节点,但是树有:树的根。因此,一个简单的线性列表就是一个退化树的例子,它有一个分支因子为1,每个节点只有一个继承,从根开始,到单叶结束(结束节点)。
13.An Abstract Data Type is a data structure, that is, it is the listing of the instance data and the visibility modifiers for those instance data.
A . true
B . false
解析:抽象数据类型包括抽象数据结构,但也包括访问和操作抽象数据结构的方法。
14.Linux Bash中,使用grep查找当前src目录下所有包含main函数的文件,并要求显示出现行号的命令是grep –n main /src
A . true
B . false
解析:应该使用的是grep –rn main /src.
15.在Ubuntu中,使用vim编辑器时,想要移动光标,除方向键之外,还可以依次使用hjkl键进行上下左右的移动。
A . true
B . false
解析:上下左右顺序依次是kjhl
16.在Linux Bash中,用ls命令查看当前目录下文件并可以显示子目录下文件的参数是-R。
A . true
B . false
解析:参考链接:Linux ls命令
17.在Linux Bash中,man -k命令与apropos命令等价。
A . true
B . false
解析: 两者等价。
代码托管
没有git,Android Studio目前一团糟,我还没法传
感悟
刚开始还不错,错误并没有多少,但后来导入的越多,问题就越多,到现在好麻烦啊,重装了三次,越来越乱,我真的想冲动到把电脑给格式化了。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 95/95 | 1/1 | 18/18 | 对代码产生了很大兴趣 |
第二周 | 515/620 | 1/2 | 22/40 | 打字速度明显提升 |
第三周 | 290/910 | 1/3 | 20/60 | 无 |
第四周 | 1741/2651 | 1/4 | 30/84 | 无 |
第五周 | 579/3230 | 1/5 | 20/104 | 了解到预习的重要性 |
第六周 | 599/3829 | 2/8 | 18/122 | 打字速度明显提升 |
第七周 | 732/4561 | 2/9 | 24/146 | 学了使用JUnit,但还是不太会 |
第八周 | 1354/5915 | 2/11 | 30/176 | 无 |
第九周 | 1354/5915 | 2/13 | 25/201 | 不知为啥,代码无缘无故少了300行,我现在很迷 |
第十周 | 696/6611 | 1/14 | 30/231 | 这章学的比较吃力,所以博客没完成好 |
第十一周 | 0/6611 | 3/17 | 40/271 | |
参考:软件工程软件的估计为什么这么难,软件工程 估计方法 |
-
计划学习时间:45小时
-
实际学习时间:40小时
-
改进情况:无
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)