Android面试题1

来源:互联网 发布:歪歪mac版 编辑:程序博客网 时间:2024/06/07 02:37
1、   面向对象设计模式你知道的有哪些?
单例模式、简单工厂、工厂方法、抽象工厂、代理模式、适配器模式等
2、  什么是MVC
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
3、  Android中如何理解MVC
MModel)用于封装数据源的元类型,例如使用GSON解析时JSON数据对应的类
VView)用于用户交互界面,在Android中通常指各种控件(android.view.View的各种子类型)
CController)用于封装逻辑,在Android中又可以将其分为数据控制器(Data Controller)和视力控制器(View Controller)。数据控制器用于操作各种数据源(网络数据源、本地数据源等),例如各种网络访问框架、本地数据库操作框架均属于数据控制器。视图控制器用于操作各种界面逻辑,如Android中的ActivityFragmentAdapter
4、  Android中,你通常如何实现网络访问操作
1)   使用URLConnection+Handler实现
2)  使用URLConnection+AsyncTask实现
3)  将上述两点中的URLConnection换成OKHttp
4)  Volley框架
5)  xUtils中的httpUtils框架
5、  Android中你通常如何实现JSON数据解析
1)   使用系统原生的JSONObjectJSONArray实现解析
2)  使用GSON实现JSON数据解析
6、  Android中你通常如何实现网络图片显示
1)   原生方式实现网络图片文件载到本地,再加载本地图片文件
2)  使用Volley中的网络图片加载功能
3)  使用xUtils中的imageUtils中的图片加载功能
4)  使用Universal-Image-Loader
5)  使用Picasso
6)  使用其他的第三方图片加载库
7、  Android中使用Universal-Image-Loader进行网络图片访问时,缓存分为几级?都是什么?
三级。分别是内存缓存、本地文件缓存和网络缓存
8、  你在Android中如何操作本地SQLite数据库
1)   使用系统原生的SQLite操作
a)        使用SQL语句直接操作
b)        使用InsertUpdateDeleteQuery方法操作
2)  使用xUtils中的DbUtils
3)  使用其他第三方SQLite封装库
9、  你在Android中,使用过的Adapter有哪些?如何选择各种Adapter
ArrayAdapter:使用数组或List<T>数据源,绑定时一项只有一个控件能够进行绑定
SimpleAdapter:使用List<Map<String,?>>数据源,绑定时一项可以有多个控件进行绑定
继承SimpleAdapter:使用List<Map<String,?>>数据源,可以在SimpleAdapter绑定的基础上添加一些不能绑定的数据
BaseAdapter:自定义绑定的各种操作(重写4个方法的含意)
SimpleCursorAdapter:使用本地数据库或都ContentProvider返回的Cursor作为数据源
10、在使用BaseAdapter实现ListView数据绑定时,如何提高性能
1)   使用convertView的复用
2)  使用ViewHolder,减少findViewById的数量
3)  在项中使用异步数据访问,加载图片
4)  数据分页加载、显示
11、 是否使用过RecyclerView,谈谈如何使用RecyclerView显示数据
RecyclerView绑定数据时,使用继承于RecyclerView.Adapter的子类进行数据绑定,另外还需要使用继承于RecyclerView.ViewHolder的子类
继承于RecyclerView.ViewHolder的子类用于封装RecyclerView数据项所对应的控件及控件中的所有子控件
继承于RecyclerView.Adapter的子类需要重写三个方法:
1)   getItemCount方法,返回RecyclerView的项的数量
2)  onCreateViewHolder方法用于创建RecyclerView项所对应的控件
3)  onBindViewHolder方法用于将数据源的数据绑定到RecyclerView的项上
使用RecyclerView进行数据绑定显示时,使用MVC模式,分离了数据绑定的各部分组件,使其耦合性降低
12、你在项目中使用的版本控制工具有哪些?通常在什么时间提交代码?
常用的版本控制工具有:SVNGitVisual Source SafeVSS
通常一个功能点或一个逻辑做完就要提交(Commit)代码
13、QQ第三方登录为例,说说第三方登陆的流程是怎么样的
1)   app中点击第三方登录
2)  若手机中安装了QQ,则跳转到QQ App,由QQ App授权
3)  若手机中没有安装QQ,则打开网页版,先进行登录,再进行授权
4)  授权后返回app,若登录、授权成功,返回成功信息及用户Token;若失败则返回错误信息
5)  使用返回的用户Token,可以获取到公开的用户信息(由用户授权访问的信息),如QQ昵称、头像等。用户的登录帐号(QQ号)、登录密码等是不会返回的。
14、远程消息推送的流程?
由于国内的特殊原因,通常远程消息推送都是使用第三方提供的推送服务,或自行开发基于XMPP的推送服务器。
以个推为例:
1)   客户App向个推服务器注册远程消息服务,个推服务器返回相应的CIDClient Id),通常客户端AppCID上传至应用程序服务器,与服务器中的用户帐户进行绑定
2)  在特定情况下,应用程序服务器向个推服务器发送远程推送请求,将用户的CID及要发送的消息发送给个推服务器
3)  个推服务器按CID(或用户群组、昵称等)向用户设备发送远程推送消息
4)  客户端App中的Receiver接收到消息广播,获取消息中的内容,根据内容执行相应的操作
15、实现支付宝第三方支付的流程是什么?
1)   商家注册支付宝用户帐户,生成加密用的密钥(私钥与公钥),将公钥上传至支付宝服务器,并下载支付宝提供的加密密钥中的公钥
2)  用户App集成支付宝SDK后,按要求构建商品订单字符串
3)  使用用户加密密钥中的私钥加密数据,并将其通过支付宝SDK发送给支付宝手机客户端或网页版支付页面
4)  由支付宝手机客户端或网页版支付页面完成支付功能,并返回支付结果
5)  用户App使用支付宝密钥中的公钥解密返回的数据(JSON字符串),并解析JSON内容,向用户显示成功或失败信息
16、你将开发一个应用程序,包含用户注册、登录及第三方登录功能,你将如何设计这个流程
1)   在应用程序服务器中,使用数据库保存用户信息,使用网络数据接口实现用户登录、注册功能
2)  在应用程序服务器中,提供第三方登录注册及获取对应用户信息的接口
3)  在应用程序服务器中,统一注册、登录及第三方登录映射的本地用户信息
17、如何实现使用手机定位获取用户所在的城市
1)   使用百度地图或高德地图等第三方地图SDK,使用其内部提供的定位及地理编码获取城市信息
2)  使用系统原生方式
a)        使用GPS传感器获取经纬度
b)        使用Geocoder进行地理编码,获取城市信息
18、Android中本地数据持久化有哪些方式
1)   SharedPreferences
2)  SD卡文件
3)  本地SQLite数据库
4)  ContentProvider
19、两个Activity中怎么传递(共享)数据
1)   使用startActivity时,使用Intent传递数据
2)  在使用startActivityForResultsetResult时,使用Intent传递数据
3)  在同一应用程序的两个无关联的Activity中,使用类中的静态成员方法共享数据
4)  在同一应用程序的两个无关联的Activity中,使用自定义Application中定义属性及setget方法共享数据
20、 如何生成签名的APK文件
1)   定义keystore文件
2)  使用keystore文件生成APK
基于两种平台的操作过程:EclipseAndroid Studio
21、横竖屏切换时候Activity的生命周期
1)   不设置Activityandroid: configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。
2)  设置Activityandroid: configChanges=orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次。
3)  设置Activityandroid: configChanges=orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfiguration方法
22、Activity被系统回收,如何保存及恢复状态
1)   保存数据状态:在ActivityonSaveInstanceState方法中,将需要保存的数据写入Bundle
2)  恢复数据状态:在ActivityonCreate方法中,判断参数savedInstanceState是否为空,是否包含你所需要的状态,如果有则由其恢复状态
23、网络数据访问及JSON解析时,通常需要处理的错误有哪些(按顺序说明)
1)   网络连接错误,如连接超时等
2)  网络返回状态码不是200,例如:403404
3)  返回的InputStream不能转换为字符串
4)  转换的字符串不能解析为JSON数据
5)  解析后的JSON数据中的服务器返回的逻辑错误
24、列举出网络访问返回的状态码及其含意
特别注意红色字体部分
1xx -信息提示
这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个 1xx响应。
· 100 - Continue初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新)
· 101 - Switching Protocols服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新)
2xx -成功
这类状态代码表明服务器成功地接受了客户端请求。
· 200 - OK一切正常,对GETPOST请求的应答文档跟在后面。
· 201 - Created服务器已经创建了文档,Location头给出了它的URL
· 202 - Accepted已经接受请求,但处理尚未完成。
· 203 - Non-Authoritative Information文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝,非权威性信息(HTTP 1.1新)。
· 204 - No Content没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。
· 205 - Reset Content没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(HTTP 1.1新)。
· 206 - Partial Content客户发送了一个带有Range头的GET请求(分块请求),服务器完成了它(HTTP 1.1新)。
3xx -重定向
客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。
· 300 - Multiple Choices客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。
· 301 - Moved Permanently客户请求的文档在其他地方,新的URLLocation头中给出,浏览器应该自动地访问新的URL
· 302 - Found类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”。出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。注意这个状态代码有时候可以和301替换使用。例如,如果浏览器错误地请求 http://host/~user (缺少了后面的斜杠),有的服务器返回301,有的则返回302。严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307
· 303 - See Other类似于301/302,不同之处在于,如果原来的请求是POSTLocation头指定的重定向目标文档应该通过GET提取(HTTP 1.1新)。
· 304 - Not Modified客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的
文档还可以继续使用。
· 305 - Use Proxy客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。
· 307 - Temporary Redirect302Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是POST,即使它实际上只能在POST请求的应答是303时才能重定向。由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GETPOST请求;如果是307应答,则浏览器只能跟随
GET请求的重定向。(HTTP 1.1新)
4xx -客户端错误
发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。
· 400 - Bad Request请求出现语法错误。
· 401 - Unauthorized访问被拒绝,客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。IIS定义了许多不同的 401错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在 IIS日志中显示:
· 401.1 -登录失败。
· 401.2 -服务器配置导致登录失败。
· 401.3 -由于 ACL对资源的限制而未获得授权。
· 401.4 -筛选器授权失败。
· 401.5 - ISAPI/CGI应用程序授权失败。
· 401.7–访问被 Web服务器上的 URL授权策略拒绝。这个错误代码为 IIS 6.0所专用。
· 403 - Forbidden资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。禁止访问:IIS定义了许多不同的 403错误,它们指明更为具体的错误原因:
· 403.1 -执行访问被禁止。
· 403.2 -读访问被禁止。
· 403.3 -写访问被禁止。
· 403.4 -要求 SSL
· 403.5 -要求 SSL 128
· 403.6 - IP地址被拒绝。
· 403.7 -要求客户端证书。
· 403.8 -站点访问被拒绝。
· 403.9 -用户数过多。
· 403.10 -配置无效。
· 403.11 -密码更改。
· 403.12 -拒绝访问映射表。
· 403.13 -客户端证书被吊销。
· 403.14 -拒绝目录列表。
· 403.15 -超出客户端访问许可。
· 403.16 -客户端证书不受信任或无效。
· 403.17 -客户端证书已过期或尚未生效。
· 403.18 -在当前的应用程序池中不能执行所请求的 URL。这个错误代码为 IIS 6.0 所专用。
· 403.19 -不能为这个应用程序池中的客户端执行 CGI。这个错误代码为 IIS 6.0 所专用。
· 403.20 - Passport登录失败。这个错误代码为 IIS 6.0所专用。
· 404 - Not Found无法找到指定位置的资源。这也是一个常用的应答。
· 404.0 -(无)–没有找到文件或目录。
· 404.1 -无法在所请求的端口上访问 Web站点。
· 404.2 - Web服务扩展锁定策略阻止本请求。
· 404.3 - MIME映射策略阻止本请求。
· 405 - Method Not Allowed请求方法(GETPOSTHEADDELETEPUTTRACE等)对指定的资源不适用,用来访问本页面的 HTTP 谓词不被允许(方法不被允许)(HTTP 1.1新)
· 406 - Not Acceptable指定的资源已经找到,但它的MIME类型和客户在Accpet头中所指定的不兼容,客户端浏览器不接受所请求页面的 MIME 类型(HTTP 1.1新)。
· 407 - Proxy Authentication Required要求进行代理身份验证,类似于401,表示客户必须先经过代理服务器的授权。(HTTP 1.1新)
· 408 - Request Timeout在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。(HTTP 1.1新)
· 409 - Conflict通常和PUT请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。(HTTP 1.1新)
· 410 - Gone所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和404的不同在于,返回407表示文档永久地离开了指定的位置,而404表示由于未知的原因文档不可用。(HTTP 1.1新)
· 411 - Length Required服务器不能处理请求,除非客户发送一个Content-Length头。(HTTP 1.1新)
· 412 - Precondition Failed请求头中指定的一些前提条件失败(HTTP 1.1新)。
· 413 Request Entity Too Large目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个Retry-After头(HTTP 1.1新)。
· 414 - Request URI Too Long URI太长(HTTP 1.1新)。
· 415–不支持的媒体类型。
· 416 Requested Range Not Satisfiable服务器不能满足客户在请求中指定的Range头。(HTTP 1.1新)
· 417–执行失败。
· 423–锁定的错误。
5xx -服务器错误
服务器由于遇到错误而不能完成该请求。
· 500 - Internal Server Error服务器遇到了意料不到的情况,不能完成客户的请求。
· 500.12 -应用程序正忙于在 Web服务器上重新启动。
· 500.13 - Web服务器太忙。
· 500.15 -不允许直接请求 Global.asa
· 500.16 UNC授权凭据不正确。这个错误代码为 IIS 6.0所专用。
· 500.18 URL授权存储不能打开。这个错误代码为 IIS 6.0所专用。
· 500.100 -内部 ASP错误。
· 501 - Not Implemented服务器不支持实现请求所需要的功能,页眉值指定了未实现的配置。例如,客户发出了一个服务器不支持的PUT请求。
· 502 - Bad Gateway服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。亦说Web服务器用作网关或代理服务器时收到了无效响应。
· 502.1 - CGI应用程序超时。
· 502.2 - CGI应用程序出错。
· 503 - Service Unavailable服务不可用,服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个Retry-After头。这个错误代码为 IIS 6.0 所专用。
· 504 - Gateway Timeout网关超时,由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。(HTTP 1.1新)。
· 505 - HTTP Version Not Supported服务器不支持请求中所指明的HTTP版本。(HTTP 1.1新)
25、如何保证一个Service不被用户关闭
定义监视电池电量变化的广播接收器,在其中判断Service是否在运行,如果没有运行,则启用Serivice
26、 如何在应用程序中使用带某些固定数据的SQLite数据库
方法一:在OpenDatabaseHelperonCreate中,使用SQL语句添加这些数据
方法二:开发时,将数据添充到SQLite数据库中,将数据库文件添加到应用程序资源文件里。第一次运行时,将数据库复制到SD卡,应用程序打开此SQLite数据库文件
27、使用Android Studio时,如何加载第三方库
1)   加载jar包:将jar包复制到libs目录,在gradle中添加文件绑定
2)  加载so包:将so包复制到jniLibs目录
3)  加载模块:将项目导入到Android Studio中,在gradle中添加模块绑定
4)  加载Marven库:直接在gradle中添加库绑定
28、你在做一个页面,实现网络数据访问,JSON解析,然后将结果显示在ListView中,执行后发现程序没有崩溃,没有异常信息,但界面没有任何显示,你将如何进行调试排错?
按以下顺序进行检查:
1)   将所有try…catch中的异常信息进行打印,查看是否有异常产生
2)  如可以,将网络访问的URLLog中输出,并在浏览器中访问,看是否有结果
3)  Log中打印网络返回的字符串(需要将InputStream转换为字符串)
4)  字符串转换为JSON时是否转换成功
5)  JSON数据封装为Model类时是否可功,在Log中打印Model的所有属性值
6)  AdaptergetCount方法里,使用Log输出返回的结果
7)  getView方法里
a)        检查对应的元数据
b)        检查控件是否为空,及显示的样式等
c)        检查控件与数据的绑定
29、 AsyncTask必须要重写的方法和可以重写的方法有哪些?在什么时候执行?在哪个线程中执行?
必须重写的方法:
1)   doInBackground方法,此方法中写异步执行的代码,并返回异步执行的结果。此方法在子线程中执行
可以重写的方法:
1)   onPreExecute方法:在doInBackground之前执行
2)  onPoseExecute方法:在doInBackground之后执行,其参数为doInBackground方法返回的结果
3)  onProgress方法:异步执行的进度发生变化时执行
4)  onCancel方法:异步任务被取消时执行
以上4个方法均在UI线程(主线程)中执行。
30、 Content ProviderURI的组成部分有哪些?
URI由是部分组成:
A,标准的前缀: ContentProvider(内容提供者)的scheme已经由Android所规定, scheme为:content://
B,唯一标识整个Content Provider:主机名(或叫Authority)用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。
C,描述了数据的路径,确定返回哪类数据:路径(path)可以用来表示我们要操作的数据,路径的构建应根据业务而定
DID唯一标注请求的数据:我们要请求数据的ID。此部分是非必须的。
31、Android中的动画有哪些?
Android中动画可以分为两大类:帧动画、补间动画
1)   补间动画:你定义一个开始和结束,中间的部分由程序运算得到。主要有:旋转、平移、放缩和渐变;AlphaAnimation(渐变型动画)、scaleAnimation(缩放型动画)、 TranslateAnimation(平移型动画)、 RotateAnimation(旋转型动画)
2)  逐帧动画:Frame(把一连串的图片进行系列化连续播放,如同放电影的效果),它是通过播放一张一张图片来达到动画的效果
32、Android中音乐的播放方式有哪些
1)   MediaPlayer:主要用于播放音频,可以播放视频,但是一般不用其进行视频播放。
2)  SoundPool:主要用于播放一些短促的声音片段,主要优势是cpu资源占有量低,反应延迟小。
33、Android中视频的播放方式有哪些
1)   VideoView
2)  SurfaceView+ MediaPlayer
3)  其他第三方视频播放控件
34、如何在ListView中播放视频
1)   ListViewItem中,定义FrameLayout,用户承载视频播放控件和替代显示内容
2)  点击Item替代内容的播放按钮时,切换FrameLayout显示的内容,播放视频
3)  监听ScrollListener,对于正在播放视频的Item滚动出屏幕外时,停止视频的播放
4)  Item项播放与全屏播放的切换及状态保存
35、如何实现传感器开发
1)   获取系统服务(SENSOR_SERVICE)返回一个SensorManager对象
sensormanager = (SensorManager)getSystemSeriver(SENSOR_SERVICE);
2)  通过SensorManager对象获取相应的Sensor类型的对象
sensorObject = sensormanager.getDefaultSensor(sensor Type);
3)  声明一个SensorEventListener对象用于侦听Sensor事件,并重载onSensorChanged方法
SensorEventListener sensorListener = new SensorEventListener(){};
4)  注册相应的SensorService
sensormanager.registerListener(sensorListener, sensorObject, Sensor TYPE);
5)  销毁相应的SensorService
sensormanager.unregisterListener(sensorListener, sensorObject);
36、 说说你常用的Android应用程序首页面的布局结构
1)   RadioGroup+Fragment
2)  TabLayout+ViewPager+Fragment
3)  DrawerLayout+Fragment
4)  
37、如何实现ListViewGridView嵌套时的高度自适应
1)自定义类继承ListViewGridView,重写onMeasure方法
2)在布局Layout文件中,定义这个子类的控件,并将其高度设置为wrap_content
38、简述广告轮播的实现
1)   使用ViewPager+控件或Fragment实现内容的展示
2)  使用Timer实现定时器
39、 你使用过哪些ListView的上、下拉刷新
1)   使用onScrollListener结合ListViewheaderViewfooterView实现
2)  使用第三方如PullToRefreshListView实现
3)  使用SwipeRefreshLayout实现
40、 如何实现侧滑菜单
1)   DrawerLayout
2)  第三方SlideMenu
3)  SlidePaneLayout
另:NavigationView实现常规的侧滑菜单布局
41、Android 5.0的新特性有哪些
1)   全新Material Design设计风格
2)  支持多种设备
3)  全新的通知中心设计
4)  支持64ART虚拟机
5)  Project Volta电池续航改进计划
6)  全新的“最近应用程序”
7)  改进安全性
8)  不同数据独立保存
9)  改进搜索
10)新的API支持,蓝牙4.1USB Audio、多人分享等其它特性
42、Android 6.0的新特性有哪些
1)   锁屏下语音搜索
2)  指纹识别
3)  更完整的应用权限管理
4)  Doze电量管理
5)  Now on Tap功能
6)  App Links
43、你将要实现如下的界面,其中数据需要分页加载,请说出你实现此界面的思路
1)   主界面使用ListView,考虑分页可以使用PullToRefreshListView或者SwipeRefreshLayout嵌套ListView
2)  ListViewheaderView中,加载上部分的各选项,可选用LinearLayout嵌套LinearLayout实现
3)  设置onScrollListener监听器,监听滚动条的位置,若头视图滑出屏幕,则显示右上“按人气”视图
4)  网络访问部分
5)  网络访问返回的数据与界面的结合
6)  上面各选项点击与网络访问的结合
以下问题请结合你选择的公司及项目进行回答
44、你所在公司有多少人?开发人员有多少人?Android有多少人?
45、你所开发的X项目团队是如何组成的?
46、 如果你是X项目开发时的Leader,你如何进行项目分工的
47、你开发的X项目使用的网络访问框架是什么?为什么选择这个框架?
48、在开发X项目时,你遇到的最大的技术问题是什么?如何解决的?
49、 你所在公司对于开发过程中的源代码注释书写有什么要求
50、 你如何看待Android开发与iOS开发
0 0
原创粉丝点击