计算机科学与技术毕业实习报告Word文件下载.docx

上传人:b****1 文档编号:4451998 上传时间:2023-05-03 格式:DOCX 页数:16 大小:50.16KB
下载 相关 举报
计算机科学与技术毕业实习报告Word文件下载.docx_第1页
第1页 / 共16页
计算机科学与技术毕业实习报告Word文件下载.docx_第2页
第2页 / 共16页
计算机科学与技术毕业实习报告Word文件下载.docx_第3页
第3页 / 共16页
计算机科学与技术毕业实习报告Word文件下载.docx_第4页
第4页 / 共16页
计算机科学与技术毕业实习报告Word文件下载.docx_第5页
第5页 / 共16页
计算机科学与技术毕业实习报告Word文件下载.docx_第6页
第6页 / 共16页
计算机科学与技术毕业实习报告Word文件下载.docx_第7页
第7页 / 共16页
计算机科学与技术毕业实习报告Word文件下载.docx_第8页
第8页 / 共16页
计算机科学与技术毕业实习报告Word文件下载.docx_第9页
第9页 / 共16页
计算机科学与技术毕业实习报告Word文件下载.docx_第10页
第10页 / 共16页
计算机科学与技术毕业实习报告Word文件下载.docx_第11页
第11页 / 共16页
计算机科学与技术毕业实习报告Word文件下载.docx_第12页
第12页 / 共16页
计算机科学与技术毕业实习报告Word文件下载.docx_第13页
第13页 / 共16页
计算机科学与技术毕业实习报告Word文件下载.docx_第14页
第14页 / 共16页
计算机科学与技术毕业实习报告Word文件下载.docx_第15页
第15页 / 共16页
计算机科学与技术毕业实习报告Word文件下载.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计算机科学与技术毕业实习报告Word文件下载.docx

《计算机科学与技术毕业实习报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算机科学与技术毕业实习报告Word文件下载.docx(16页珍藏版)》请在冰点文库上搜索。

计算机科学与技术毕业实习报告Word文件下载.docx

2•更广泛的直接接触社会,了解社会需要,加深对社会的认识,增强对社会的适应性,将自己融合到社会中去,培养自己的实践能力,缩短我们从一名大学生到一名工作人员之间的思想与业务距离。

为以后进一步走向社会打下坚实的基础;

3.了解公司部门的构成和职能,整个工作流程,从而确立自己在公司里最擅长的

工作岗位。

为自己未来的职业生涯规划起到关键的指导作用。

二、实习内容

2.1系统学习java语言

(1)Java语言特点

•面向对象:

与C++相比,JAVA是纯的面向对象的语言,C++为了向下兼容C,保留了很多C里面的特性,而C,众所周知是面向过程的语言,这就使C++成为一个"

混血儿"

而JAVA语法中取消了C++里为兼容C所保留的特性,如取消了头文件、指针算法、结构、单元等。

•可移植(平台无关性):

生成中间字节码指令,与其他编程语言不同,Java并不生成可执行文件(.exe文件),而是生成一种中间字节码文件(.class文件)。

任何操作系统,只要装有Java虚拟机(JVM),就可以解释并执行这个中间字节码文件。

这正是Java实现可移植的机制

-原始数据类型存储方法固定,避开移植时的问题

Java的原始数据类型的大小是固定的。

比如,在任何机器上,整型都是32位,而C++里整型是依赖于目标机器的,对16位处理器(比如8086),整数用两个字节表示;

在像SunSPARC这样的32位处理器中,整数用4个字节表示。

在IntelPentium处理器上,整数类型由具体的操作系统决定:

对于DOS和Win32来说,整数是2个字节;

对于Windows9x、NT和2000,整数是4个字节。

当然,使整数类型平台无关之后,性能必然有所下降,但就Java来说,这个代价是值得的。

Java的字符串,则采用标准的Unicode格式保存。

可以说,没有这个特性,Java的可移植性也不可能实现。

•AVA在语法上与C++类似

JAVA的语法与C++很接近,有过C或者C++编程经验的程序员很容易就可以学会JAVA语法;

•取消了C++的一些复杂而低效的特性比如:

用接口技术代替了C++的多重继承。

C++中,一个类允许有多个超类,这个特性叫做"

多重继承"

,多重继承使得编译器非常复杂且效率不高;

JAVA的类只允许有一个超类,而用接口

(Interface)技术实现与C++的多继承相类似的功能

其它被取消的特性包括:

虚拟基础类、运算符过载等

JAVA的基本解释器和类支持模块大概仅40K

即使加入基本的标准库和支持线程的模块,也才220K左右。

与GUI(图形用户界面)相比,明显小很多

•取消了指针算法

C的最关键的一个特性是它的强大指针算法,比如可以用指针访问字符串、数组甚至文件,很容易产生指针溢出,意外地改写内存和损毁数据。

JAVA里有一个指针模型,对于普通的任务,如访问字符串、数组,根本不用指针,而一旦需要,比如访问对象、文件时,也可以获得指针的强大能力,但JAVA同时有高度的指针安全保障,用户永远不可能访问一个坏掉的指针、不可能造成内存分配错误,也用不着专门提防可能出现的内存漏洞。

•强大的多线程能力

多线程可以使程序有更好的交互性和实时性,并可以最大限度地利用多处理器系统。

JAVA有着强大的多线程处理能力,因为各主流操作系统平台在线程的实施方面有重大的差异,所以JAVA为不同的操作系统实现了专门的多线程机制。

在这点上来说,JAVA没有做到平台无关。

(2)面向对象基础

static称为静态修饰符,它可以修饰类中的属性和方法。

1.静态属性

被static修饰的属性称为静态属性,这类属性一个最本质的特点是:

它们是类的属性,而不属于任何一个类的具体对象。

换句话说,对于该类的任何一个具体对象而言,静态属性是一个公共的存储单元,任何一个类的对象访问它时,取到的都是相同的数值,同样任何一个类的对象去修改它时,也都是在对同一个内存单元做操作。

静态属性节省空间;

静态属性保持类对象的一致性修改举例:

总和、基本工资等

2.静态方法

static修饰符修饰的属性是属于类的公共属性:

与之相仿,用static修饰符修饰的方法,是属于整个类的类方法;

而不用static至少有三重含义:

(1)调用这个方法时,应该使用类名做前缀,而不是某一个具体的对象名;

(2)非static的方法是属于某个对象的方法,在这个对象创建时对象的方法在内存中拥有自己专用的代码段;

而static的方法是属于整个类的,它在内存中的代码段将随着类的定义而分配和装载,不被任何一个对象专有:

(3)由于static方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员变量,而只能处理属于整个类的成员变量。

也即,static方法只能处理static的数据。

3.静态初始化器

静态初始化器是由关键字static引导的一对大括号括起的语句组。

它的作用与类的构造函数有些相似,都用来完成初始化的工作,但是静态初始化器与构造函数有三点根本的不同:

(1)构造函数是对每个新创建的对象初始化,而静态初始化器是对每个类进行初始化;

(2)构造函数是在用new运算符产生新对象时由系统自动执行,而静态初始化器则是在它所属的类加载入内存时由系统调用运行的;

(3)不同于构造函数,静态初始化器不是方法,没有方法名、返回值和参数列表。

让我们考虑如下的问题,所以考虑由系统自动为新雇员对象生成编号变量的值,将Employee类的属性定义改写为:

classEmployee//定义雇员类

{

privatedoublem_EmpSalary;

staticdoublem_MinSalary;

staticintm_NextEmpNo;

}

构造函数为:

Employee(Stringname,charsex,doublesal)

//构造函数,完成初始

化工作

m_EmpNo=m_NextEmpNo++;

//新雇员使用了新编号之后,再产生另一个新编号

m_EmpName=newString(name);

m_EmpGender=sex;

if(sal>

=m_MinSalary)//工资额不合理时使用最低工资m_EmpSalary=sal;

else

m_EmpSalary=m_MinSalary;

这里,为实现编号不重复地自动生成,引入一个类成员m_NextEmpNo,它的值是下一个新创建的雇员对象的编号。

每当有新对象生成时,系统调用构造函数,将m_NextEmpNo的当前值赋给新雇员的编号变量m_EmpNo,然后让类静态属性m_NextEmpNo自动加一,这样新对象的编号就不会与已有对象的编号相重复。

表面看来整个问题似已解决,但实际上还有很关键的一步没有完成:

那就是static的类属性m_NextEmpNo的初始化问题。

总之,静态初始化器的作用是对整个类完成初始化操作,包括给static类成员赋初值等,它在系统向内存加载时自动完成。

(3)java线程基础

一、线程概述

线程是程序运行的基本执行单元。

当操作系统(不包括单线程的操作系统,如微软早期的DOS)在执行一个程序时,会在系统中建立一个进程,而在这个进程中,必须至少建立一个线程(这个线程被称为主线程)来作为这个程序运行的入口点。

因此,在操作系统中运行的任何程序都至少有一个主线程。

进程和线程是现代操作系统中两个必不可少的运行模型。

在操作系统中可以有多个进程,这些进程包括系统进程(由操作系统内部建立的进程)和用户进程(由用户程序建立的进程);

一个进程中可以有一个或多个线程。

进程和进程之间不共享内存,也就是说系统中的进程是在各自独立的内存空间中运行的。

而一个进程中的线可以共享系统分派给这个进程的内存空间。

线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间也叫做线程栈,是在建立线程时由系统分配的,主要用来保存线程内部所使用的数据,如线程执行函数中所定义的变量。

注意:

任何一个线程在建立时都会执行一个函数,这个函数叫做线程执行函数。

也可以将这个函数看做线程的入口点(类似于程序中的main函数)。

无论使用什么语言或技术来建立线程,都必须执行这个函数(这个函数的表现形式可能不一样,但都会有一个这样的函数)。

如在Windows中用于建立线程的API函数CreateThread的第三个参数就是这个执行函数的指针。

在操作系统将进程分成多个线程后,这些线程可以在操作系统的管理下并发执行,从而大大提高了程序的运行效率。

虽然线程的执行从宏观上看是多个线程同时执行,但实际上这只是操作系统的障眼法。

由于一块CPU同时只能执行一条指令,因此,在拥有一块CPU的计算机上不可能同时执行两个任务。

而操作系统为了能提高程序的运行效率,在一个线程空闲时会撤下这个线程,并且会让其他的线程来执行,这种方式叫做线程调度。

我们之所以从表面上看是多个线程同时执行,是因为不同线程之间切换的时间非常短,而且在一般情况下切换非常频繁。

假设我们有线程A和B。

在运行时,可能是A执行了1毫秒后,切换到B后,B又执行了1毫秒,然后又切换到了A,A又执行1毫秒。

由于1毫秒的时间对于普通人来说是很难感知的,因此,从表面看上去就象A和B同时执行一样,但实际上A和B是交替执行的。

二、线程给我们带来的好处

如果能合理地使用线程,将会减少开发和维护成本,甚至可以改善复杂应用程序的性能。

如在GUI应用程序中,还以通过线程的异步特性来更好地处理事件;

在应用服务器程序中可以通过建立多个线程来处理客户端的请求。

线程甚至还可以简化虚拟机的实现,如Java虚拟机(JVM)的垃圾回收器(garbagecollector)通常运行在一个或多个线程中。

因此,使用线程将会从以下五个方面来改善我们的应用程序:

1.充分利用CPU资源现在世界上大多数计算机只有一块CPU。

因此,

充分利用CPU资源显得尤为重要。

当执行单线程程序时,由于在程序发生阻塞时CPU可能会处于空闲状态。

这将造成大量的计算资源的浪费。

而在程序中使用多线程可以在某一个线程处于休眠或阻塞时,而CPU又恰好处于空闲状态时来运行其他的线程。

这样CPU就很难有空闲的时候。

因此,CPU资源就得到了充分地利用。

2.简化编程模型如果程序只完成一项任务,那只要写一个单线程的程序,并且按着执行这个任务的步骤编写代码即可。

但要完成多项任务,如果还使用单线程的话,那就得在在程序中判断每项任务是否应该执行以及什么时候执行。

如显示一个时钟的时、分、秒三个指针。

使用单线程就得在循环中逐一判断这三个指针的转动时间和角度。

如果使用三个线程分另来处理这三个指针的显示,那么对于每个线程来说就是指行一个单独的任务。

这样有助于开发人员对程序的理解和维护。

3.简化异步事件的处理当一个服务器应用程序在接收不同的客户端连接时最简单地处理方法就是为每一个客户端连接建立一个线程。

然后监听线程仍然负责监听来自客户端的请求。

如果这种应用程序采用单线程来处理,当监听线程接收到一个客户端请求后,开始读取客户端发来的数据,在读完数据后,read方法处于阻塞状态,也就是说,这个线程将无法再监听客户端请求了。

而要想在单线程中处理多个客户端请求,就必须使用非阻塞的Socket连接和异步I/O。

但使用异步I/O方式比使用同步I/O更难以控制,也更容易出错。

因此,使用多线程和同步I/O可以更容易地处理类似于多请求的异步事件。

4.使GUI更有效率使用单线程来处理GUI事件时,必须使用循环来对随时可能发生的GUI事件进行扫描,在循环内部除了扫描GUI事件外,还得来执行其他的程序代码。

如果这些代码太长,那么GUI事件就会被“冻结”,直到

这些代码被执行完为止

在现代的GUI框架(如SWING、AWT和SWT)中

都使用了一个单独的事件分派线程(eventdispatchthread,EDT)来对GUI事件进行扫描。

当我们按下一个按钮时,按钮的单击事件函数会在这个事件分派线程中被调用。

由于EDT的任务只是对GUI事件进行扫描,因此,这种方式对事件的反映是非常快的。

5.节约成本

提高程序的执行效率一般有三种方法:

(1)增加计算机的CPU个数。

(2)为一个程序启动多个进程

(3)在程序中使用多进程。

第一种方法是最容易做到的,但同时也是最昂贵的。

这种方法不需要修改程序,从理论上说,任何程序都可以使用这种方法来提高执行效率。

第二种方法虽然不用购买新的硬件,但这种方式不容易共享数据,如果这个程序要完成的任务需要必须要共享数据的话,这种方式就不太方便,而且启动多个线程会消耗大量的系统资源。

第三种方法恰好弥补了第一种方法的缺点,而又继承了它们的优点。

也就是说,既不需要购买CPU,也不会因为启太多的线程而占用大量的系统资源(在默认情况下,一个线程所占的内存空间要远比一个进程所占的内存空间小得多),并且多线程可以模拟多块CPU的运行方式,因此,使用多线程是提高程序执行效率的最廉价的方式。

2.2系统学习Android语言

2.2.1历史背景:

2007年11月5日,Google发布基于Linux平台的开源移动手机平台—

—Android。

该平台由操作系统、中间件、用户界面和应用软件等组成,号称是首个为移动终端打造的真正开放的移动开发平台。

2008年9月22日,美国运营商TMobileUSA在纽约正式发布第一款Google手机——T-MobileG1。

该款手机为中国台湾HTC(宏达电)代工制造,是世界上第一部使用Android

操作系统的手机,支持WCDMA/HSPA网络,理论下载速率为7.2Mbit/s,并支持Wi-Fi无线局域网络。

Android的特性Android的主要特性如下:

•应用程序框架,支持组建的重用与替换。

•Dalvik虚拟机,专门为移动设备做了优化。

•内部集成浏览器,该浏览器基于开源的WibKit引擎。

•优化的图形库,包括2D和3D图形库,3D图形库基于OpenGLES1.0(硬件加速可选)。

•SQLite数据库,是一套开放性源代码的关系型数据库,其特点在于轻量级的设计结构,更适合在手机上使用。

•GSM电话(依赖于硬件)。

•蓝牙(Bluetooth),EDGE,3G和Wi-Fi(依赖于硬件)。

•多媒体支持,包括常见的音频、视频和静态图像文件格式。

•照相机、GPS、指南针和加速度计等丰富的传感器(依赖于硬件)。

•丰富的开发环境,包括设备模拟器、调试工具、内存及性能分析图表,以及Eclipse集成开发环境插件。

1)程序应用

Android连同一个核心应用程序包发布,该应用程序包括E-mail客户端、

SMS短消息程序、日历、地图、浏览器、联系人管理程序等。

所以的应用程序

都是用Java编写的。

2)应用程序框架

开发者完全可以访问核心应用程序所使用的API框架。

该应用程序框架架构用来简化组件的软件的重用,任何一个应用程序都可以发布它的模块功能并且任何其他的应用程序都可以使用其所发布的功能块(不过要遵循框架的安全性限制)。

该应用程序重用机制使得组件可以被用户替换。

以下所有的应用程序都由一系列的服务和系统组成,包括:

1.一个可扩展的视图(Views)可以用来创建应用程序,包括列表(lists)、网络(grids)、文本框(textboxes)、按钮(buttons),甚至是一个可嵌入的Web浏览器。

2.内容管理器(ContentProviders)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。

3.一个资源管理器(ResourceManager)提供非代码资源的访问,如本地字符串、图形和分层文件(layoutfiles)。

4.一个通知管理器(NotificationManager)使得应用程序可以在状态栏中显示客户通知信息。

5.一个活动类管理器(ActivityManager)用来管理应用程序生命周期并提供常用的导航回退功能。

3)Android程序库

Android包括一个被Android系统中各种不同组件所使用的C/C++集库。

该库通过Android应用程序框架为开发者提供服务。

以下是一些主要的核心库:

1.系统C库:

一个从BSD继承来的标准C系统函数库(libc),专门为基于EmbeddedLinux的设备定制

2.媒体库:

基于PacketVideoOpenCORE;

该库支持录放,并且可以录制许多流行的音频视频格式,还有静态映像文件包括MPEG4、H.264、MP3、AAC、JPG、PNG。

3.SurfaceManager:

对显示子系统的管理,并且为多个应用程序提供2D和3D图层的无缝融合。

4.LibWebCore:

一个最新的Web浏览器引擎,用来支持Android浏览器和一个可嵌入的Web视图。

5.SGL:

—个内置的2D图形引擎。

6.3Dlibraries:

基于OpenGLES1.0APIs实现;

该库可以使用硬件3D加速(如果可用)或者使用高度优化的3D软加速。

7.FreeType:

位图(bitmap)和向量(vector)字体显示。

8.SQLite:

—个对于所以应用程序可用、功能强劲的轻型关系型数据库引擎。

4)Android运行库

Android包括了一个核心库,该核心库提供了Java编程语言核心库的大多数功能。

每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。

Dalvik是针对同时高效地运行多个VMs实现的。

Dalvik虚拟机执行.dex的Dalvik可执行文件,该格式文件针对最小内存使用做了优化。

该虚拟机是基于寄存器的,所有的类都是经由Java汇编器编译,然后通过SDK中的DX工具转化成.dex格式由虚拟机执行。

Dalvik虚拟机依赖于Linux的一些功能,比如线程机制和底层内存管理机制。

5)Linux内核

Android的核心系统服务依赖于Linux2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。

Linux内核也同时作为硬件和软件之间的硬件抽象层。

6)service以及service的生命周期

两种用处:

后台运行和跨进程访问

两种模式:

startService()/bindService()

模式场合:

调用者与服务之间没有关连,即使调用者退出了,服务仍然运行即用startService(),调用者与服务绑定在了一起,调用者一旦退出,服务也就终止则用bindService()生命周期:

service的生命周期没有像activity里的onstop,主要经历创建、开始、销毁三个阶段,由于有两种模式的存在,其生命周期有两种体现方式

如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法,如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。

采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。

onBind()只有采用Context.bindService()方法启动服务时才会回调该方法。

该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。

采用Context.bindService()方法启动服务时只能调用onUnbind()方法解除调用者与服务解除,服务结束时会调用onDestroy()方法。

2.3系统学习Github知识

Git是一个分布式的版本控制系统,最初由LinusTorvalds编写,用作Linux内核代码的管理。

在推岀后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中。

目前,包括Rubinius、

Merb和Bitcoin在内的很多知名项目都使用了Git。

Git同样可以被诸如Capistrano和VladtheDeployer这样的部署工具所使

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2