20172305 2017-2018-2 《程序设计与数据结构》第十一周学习总结
教材学习内容总结
本周内容主要为Java和Android开发学习指南的23章--26章的内容:
-
第23章
-
1.Java是开发Android应用程序的默认语言,但Android应用程序不同于Java应用程序在Java虚拟机上运行。
-
2.Android4.4是Dalvik和ART的转折点和分水岭。
- Dalvik是Google公司自己设计用于Android平台的虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为 .dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且 每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
- 在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。这个过程叫做预编译(AOT,Ahead-Of-Time)。这样的话,应用的启动(首次)和执行都会变得更加快速。
-
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节点包含了应用程序中所有的组件
-
mainfests.包含了一个AndroidMainfest.xml文件,它描述了应用程序
-
java.包含了所有的java应用程序和测试类
-
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章
-
活动的生命周期
7个方法:
-
1.onCreate()每个活动都会有的方法,在活动第一次被创建的时候调用
-
2.OnStart这个活动在活动由不可见变为可见的时候调用
-
3.OnResume这个方法在活动准备好和用户进行交互的时候调用,此时的活动一定位于返回栈的栈顶,并且处于运行状态。
-
4.. onPause()这个方法在系统准备去启动或者恢复另一个活动的时候调用。 我们通常会在这个方法中将一些消耗 CPU 的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。
-
5.onStop()这个方法在活动完全不可见的时候调用。它和 onPause()方法的主要区别在于,如果启动的新活动是一个对话框式的活动,那么 onPause()方法会得到执行,而 onStop()方法并不会执行。
-
6.onDestroy()这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。
-
7.onRestart()这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。
三个阶段:
-
1.开始Activity:在这个阶段依次执行3个生命周期的方法,分别是:onCreate、onStart和onResume方法
-
2.Activity重新获得焦点:如果Activity重新获得焦点,会依次执行3个方法,onRestart、onStart和onResume
-
3.关闭Activity:当Activity被关闭时系统会依次执行3个方法,onPause、onStop和onDestory。
-
-
-
第26章
教材学习中的问题和解决过程
- 问题1:SQL语言
- 问题1解决方案:SQL语言,是结构化查询语言(Structured Query Language)的简称。SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。SQL语言是一种交互式查询语言,允许用户直接查询存储数据,但它不是完整的程序语言,如它没有DO或FOR 类似的循环语句,但它可以嵌入到另一种语言中,也可以借用VB、C、JAVA等语言,通过调用级接口(CALL LEVEL INTERFACE)直接发送到数据库管理系统。
- 问题2:Android和IOS的区别
- 问题2的解决方案:IOS和安卓最大的区别在于本身所应用的设备不同。IOS系统主要是应用在iPhone、IPad、itouch设备上的操作系统,安卓系统主要是应用在安卓智能手机上的操作系统。Android平台可以做的事情远远比iOS多, 可以做电话管理,地址簿,短信管理,可以自己跑后台service。 替换掉系统的组件也可以,还可以跑其他系统的Runtime。而IOS是被Apple严格控制的系统,IOS的每款软件都是经过苹果公司的检测、优化,安全性高。
代码调试中的问题和解决过程
-
问题1:课堂实践对数据库的导入、导出和查询
-
问题1解决方案:两种不同使用jdbc方式链接数据库的,不是很清楚"jdbc:mysql://localhost/" +"test?user=root&password="什么意思,也就照着做了。
- getConnection(String url, String user, String password)试图建立到给定数据库 URL 的连接。
Connection conn = null; Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost/" +"test?user=root&password=");
Connection conn = DriverManager.getConnection(url, user, passwd); Statement statement = conn.createStatement()
对于实践的操作,也处于还没有读懂代码就开始操作了,看了老师的代码,感觉这三行有关,所以就把每步的SQL语句写了进去,用了一堆的Alt+Enter产生了try-catch语句,然后运行就出来了。
Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("SELECT * FROM Student"); DatabaseModification.showResults("Student", rset);
Connection.createStatement() 创建一个 Statement 对象来将 SQL 语句发送到数据库。
其中,executeQuery()方法会把数据库响应的查询结果存放在ResultSet类对象中供我们使用,然后就在Java环境中实现了调用数据库中的内容了。 -
问题2:安装Android Studio中Hello World在物理机上运行
-
问题2解决方案:对于这个问题,OPPOr9就可以应用,而我的OPPOr11就不行,找过解决方案,但是毫无作用,好在可以在虚拟手机上使用。不清楚为什么,而且我在别的Android Studio中也是过,也是同样的效果。一直在闪退。
代码托管
无相关代码
上周考试错题总结
- 错题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?(如果int参数是偶数或者是正数或0,那么下面的方法应该返回true,否则返回false。您应该使用哪一组代码来替换……那么这个方法是否合适呢?)
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减去2,直到x == 0或x < 0。如果x = 0,那么x - 2 * i == 0(对于某个int值i)或x == 2 * i,所以x必须是偶数。否则,递归会在x < 0时结束,也就是说原来的x是奇数或小于0。
- 错题2:Which of the following is considered an Abstract Data Type?(下列哪一种被认为是抽象数据类型?)
- A.array
- B.reference variable
- C.any of the primitive types (e.g., int, double, char)
- D.vector
- E.all of the above
- 错误解析:抽象数据类型包括数据结构的操作和访问数据结构的方法。在这些列表中,只有向量结合了这两个。数组是一个数据结构,但没有方法(例如插入方法或搜索方法),而引用变量和基本类型是数据,而不是数据结构。
- 错题3: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外部进行操作,但是其他面向对象的特性是不需要的。
- 错题4: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. (我们可能希望在堆栈和队列上实现的一个操作是full,这决定了数据结构是否有空间来添加另一个项目。) This operation would be useful
- A.only if the Queue or Stack is implemented using an array
- B.only if the Queue or Stack is implemented using a linked list
- C.only for a Queue
- D.only for a Stack
- E.none of the above, a full operation is not useful at all
- 错误解析:由于数组是一个静态大小的对象,如果它被填充,那么任何添加类型的操作,无论是列表插入、队列队列还是堆栈推送,都应该被阻止。这可以通过第一次检查确定结构是否完整来确定。如果数据结构是使用链表实现的,那么就没有必要这样做,因为(我们假设)总是有可用的动态内存来添加新元素。
- 错题5:In a linked list in Java(在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类型的,也可能是其他类型的数据。
- 错题6: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
- 错误解析:抽象数据类型包括数据结构,但也包括用于访问和操作数据结构的方法。
- 错题7:The push and enqueue operations are essentially the same operations, push is used for Stacks and enqueue is used for Queues.(push和enqueue操作本质上是相同的操作,push用于栈,enqueue用于队列)
- A.true
- B.false
- 错误解析:虽然这两个操作都是各自抽象数据类型的 "add"或"insert" 操作,但它们的不同之处在于push总是在堆栈的顶部(或前部)添加,而enqueue总是在队列的后部添加。
- 错题8:An array is a List Abstract Data Type.(数组是一个列表抽象数据类型。)
- A.true
- B.false
- 错误解析:这个数组是一个数据结构,可以用来存储一个值列表,但是数组没有已经实现的操作来执行列表操作,比如添加到末尾,或者删除一个给定的值。
- 错题9:A linked list that contains 6 Nodes will have 6 reference pointers.(一个包含6个节点的链表将有6个引用指针。)
- A.true
- B.false
- 错误解析:为了访问链表,至少需要有第7个引用指针,一个引用链表中的第一个项的引用指针。
- 错题10:Trees and graphs, because they are dynamic in nature, cannot be implemented using Java arrays.(由于树和图形本质上是动态的,因此不能使用Java数组实现它们。)
- A.true
- B.false
- 错误解析:虽然是事实,任何给定的有一个固定大小的数组,因此最大电流的大小(节点数)的树或图仅限于其底层数组的大小,可以分配一个更大的数组,将原始数组中的元素复制到新数组,并继续以这种方式实现扩张。这种技术之所以成功,是因为Java数组是对象,访问所有对象的机制是通过引用实现的。在大多数其他语言(如C、c++、c#、Pascal等)中,数组都不是对象,因此这种技术将会失败。
- 错题11:The only difference between a stack and a queue is that stacks operate using FIFO and queues operate using LIFO.(堆栈和队列之间的唯一区别是堆栈使用FIFO操作,队列使用LIFO操作。)
- A.true
- B.false
- 错误解析:这就是反了。栈使用first-in-last-out (LIFO)操作,队列使用first-in-first- first-out (FIFO)操作。
- 错题12:一个具有执行权限的目录可以被打开并查看内部文件。
- A.true
- B.false
- 错误解析:一个目录同时具有读权限和执行权限才可以打开并查看内部文件。
- 错题13:Linux Bash中,可以使用chomd 777 pdds命令修改文件pdds的权限,并使得其拥有者、拥有者所在的组和其他用户都拥有全部权限。
- A.true
- B.false
- 错误解析:chmod 777 pdds,不是 chomd 777 pdds
- 错题14:Linux Bash中,使用apt-get search tree命令来查找是否系统装有软件tree。
- A.true
- B.false
- 错误解析:apt-cache search tree
- 错题15:Linux Bash中,使用grep查找当前src目录下所有包含main函数的文件,并要求显示出现行号的命令是grep –n main /src
- A.true
- B.false
- 错误解析:grep –rn main /src
- 错题16:在Ubuntu中,使用vim编辑器时,想要移动光标,除方向键之外,还可以依次使用hjkl键进行上下左右的移动。
- A.true
- B.false
- 错误解析:上下左右顺序依次是kjhl
-
考试内容正好都是自己会的内容,才会有26分的成绩,但是脱离理论的考试,实际的代码操作比起来估计自己就不会有这样的分数了。此外,我把有关第13章&Linux命令的考试题也加入了,由于自己有点着急,错误量比较大,关于Linux命令的内容还不是很会,所以就是一个劲的在网上找解析,暴露出我关于Linux命令内容的不足,需要好好复习了。
结对与互评
点评(王禹涵)
- 博客中值得学习的或问题:
- 没有什么问题,很完美的博客。
- 代码中值得学习的或问题:
- 问题分析的很细致,很完美。
- 基于评分标准,我给本博客打分:11分。
- 得分情况如下: - 正确使用Markdown语法(加1分)
- 模板中的要素齐全(加1分)
- 教材学习中的问题和解决过程, 四个问题加4分
- 代码调试中的问题和解决过程, 一个问题加1分
- 感想,体会不假大空的加1分
- 点评认真,能指出博客和代码中的问题的加1分
- 代码规范加1分
- 有动手写新代码的加1分
点评(方艺雯)
- 博客中值得学习的或问题:
- 图片运用恰当,很清晰的解释了问题和相关内容
- 代码中值得学习的或问题:
- 代码的问题,很值得我去学习和改正。
- 基于评分标准,我给本博客打分:11分。
- 得分情况如下:
- 正确使用Markdown语法(加1分)
- 模板中的要素齐全(加1分)
- 教材学习中的问题和解决过程, 二个问题加2分
- 代码调试中的问题和解决过程, 三个问题加3分
- 感想,体会不假大空的加1分
- 点评认真,能指出博客和代码中的问题的加1分
- 代码规范加1分
- 有动手写新代码的加1分
互评对象
-
本周结对学习情况
20172304方艺雯
20172323王禹涵 -
结对学习内容:Java和Android开发学习指南的23章--26章的内容
感悟
终于把那本厚厚的java书给学完了,本周不但要弄那个XAMPP的数据库,一脸懵逼的弄完全过程,对于操作数据库的部分,完全借鉴了老师的代码,仅仅理解了重要的那几行(就是按要求调数据库的内容而已),不是很明白,好在以后会学数据库的内容,也就没有太大下功夫。此外还要下载Android Studio软件,下载的过程还是相对顺利,只不过费了我好几个G的流量,莫名的心疼。在下载的过程中,要求下了很多的内容,自己也不知道是什么,也就按照要求进行。最后,产生了自己的新一代手机,可以打电话(永远打不通),可以听音乐,还可以发QQ消息,就是没有实体的物质感觉,而且运行出了Hello World的语句,但是在物理手机上就莫名的闪推,这是在暗示我要换手机么?(正合我意。。。),
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 136/136 | 1/1 | 15/15 | |
第二周 | 570/706 | 1/2 | 20/35 | |
第三周 | 613/1319 | 1/3 | 23/58 | |
第四周 | 1249/2568 | 1/5 | 30/88 | |
第五周 | 904/3472 | 1/6 | 30/118 | |
第六周 | 904/3472 | 1/7 | 30/118 | |
第七周 | 904/3472 | 1/7 | 30/178 | |
第八周 | 904/3472 | 2/9 | 45/223 | |
第九周 | 253/6016 | 2/10 | 55/278 | |
第十周 | 958/6974 | 1/11 | 55/333 | |
第十一周 | 0/6974 | 4/15 | 50/383 |