2015最新最全 Android 谷歌消息推送GCM 详细使用教程

       因为项目是非大陆的手机项目,所以当要使用到消息推送的时候,百度了一下,国内的消息方案可以是:

1.百度云推送。也确实很快就可以搭建客户端和服务端,加载他的sdk,大概花了半个小时,就可以在手机端收到推送的消息。不过我想说说缺点,很多时候,消息推送过来延迟很严重,果然免费的没有好的质量,这一点学习到了,即使是大平台没有利益的驱使,呵呵,有点偏题了,还有一个重要的原因是在国外百度云推送肯定是不能使用的,这个方案取消。

2.极光推送,由于验证过海外是否可以使用,没有购买过付费的版本,也就不评论了。极光推送免费的搭建则比百度来的更快,大概花了10分钟就可以搭建完,并很快收到消息,并且有一点比百度好用的是不用专门去运行客户端拿到固定ID,极光只要安装了它的SDK的设备,都可以在控制台收到消息。当然了,因为不确定海外是否可用,我也放弃了。

          注:关于上述两种推送方案的教程请进到他们的官方网站,下载文档和源码,可以体验一下,这里就不介绍了。

3.本文的重点来了,第三种方案就是谷歌google平台,在前几年推出的GCM消息推送机制,GCM全称Google Cloud Messaging,关于这个机制的架构设计理念,我就不说了,可以自行百度一下,大概就是设备注册了之后,发送给谷歌的云服务并保留,当有消息时,本地服务器将消息发送给谷歌服务器,然后谷歌向注册过的设备发送消息。(有理解的错误,可以去官方查看详细解释,传送门在此:谷歌官网GCM图解(需要使用VPN访问谷歌的官网,请没有VPN的同学自己想办法了,我无能为力,公司给我专门购买的VPN)。

            =============================分割线,以下是在手机上增加谷歌GCM消息推送机制的详细教程,纯手打,尊重劳动成果===========================


       使用GCM消息推送机制的大前提如下:

      1.由于大陆屏蔽谷歌的服务,所以需要的前提是购买一个VPN,能够访问谷歌GCM云服务器,如果没有这个最最基本的条件,下面的内容都是建立在此基础上,如下图:



         2.第2个最关键的前提条件是有一个google 开发者账号,有了vpn之后,到谷歌官网注册一个开发者账号,需要使用信用卡25美元购买,两天之后就可以使用,注册开发者账号主要是拿到程序的ID和最关键的每个开发者拥有的API,参考如下谷歌官方介绍注册流程:谷歌开发者账号注册流程,网上的很多创建create project都过时了,现在谷歌有新版的界面,不过过程也差不多,只不过界面和操作不一样了而已,如下图:

        A.登陆你的谷歌账号,建立一个活动也就是project,网址传送门:谷歌开发者个人中心,这个网站是:https://console.developers.google.com/,别进到别的谷歌网站上,否则是无法创建应用程序的,如图:


     建好一个活动之后,会有一个ID号,这是区分每个活动project也就是中文的程序的唯一识别号,保存它,因为后续推送消息服务需要使用到它。

     B.建好一个project之后,需要拿到一个凭证(谷歌叫做凭证,也就是我说的最重要的API KEY,后面的应用程序,谷歌推送服务必须使用它来识别设备和发送消息,务必保存,如下图:


           



       C.拿到API Key你就可以开始你的谷歌推送服务之旅了,具体的使用过程有明白的可以问我,我也是被网上以前的教程误导的很厉害,总觉得新界面这个没有那个没有,就是那个create project一开始就没明白,怎么改版之后变成了活动,这些中文的翻译害死人。还有那个api key,怎么就翻译成了凭证,一开始怎么找也找不到。


         3.具备了上述的条件,下面的一步是有一台内置了谷歌google play 服务的手机,一个很不幸的消息是如果你觉得你手上的红米、锤子、乐视或者等等国产手机,谷歌服务是被剔除了的,那么这些真机是无法使用,换句话说配置好了服务端和客户端,消息还是接收不到,谷歌的推送GCM服务都是建立在基本的谷歌服务上面的,但别担心,有一个东西叫做模拟器。我说下我使用模拟器碰到的问题:

           A.如果使用eclipse ADT内置的服务器,那么需要你的模拟器有google api,你的android 系统有这个服务,如下图:


         这个其实很简单,启动sdk manager,选择android 4.3以上全部未安装的api就可以了,安装好之后,就是启动一个android 模拟器了,选中刚才你下载的android api版本,新建一个,如下图:



    c.创建好之后就可以了。不过后面我会告诉你 eclipse ADT自带的模拟器有一个很严重的问题:第一运行实在太卡太慢


    4.   第四个大前提就是模拟器或者手机,必须使用邮箱或者设置里面的添加账号,加入刚刚注册好的谷歌账号,否则无法使用谷歌推送服务以及你要玩的谷歌应用市场的游戏,如下图:


      输入你的谷歌账号,添加完成之后,就可以使用了,如下图:



    

     5.由于自带的模拟器速度实在无法忍受,最后选择了Bluestacks模拟器,速度实在是快的惊人,而且可以happy流畅的玩游戏,截图给你们看看,gif图片太大了,无法上传:


  

       B.添加谷歌账号,如图:




         输入你的谷歌账号,建好之后,一切准备工作都已经准备完成,就可以开心的正式进入谷歌gcm消息推送开发了。


=========================================分割线,谷歌android gcm 消息推送开发正式流程==============================================

       1.开发android 客户端,参考链接,感谢这位前辈:Android 消息推送gcm之客户端


      2.开发android 服务器端java版本具体流程:参考链接,还是这位前辈一篇博文:Android 消息推送gcm之java服务端

       

      本着不重复造轮子的精神,csdn有两篇博文实在写的太详细太专业,以至于我也不想重复啰嗦的进行陈列了,也有源代码例子,只要具备上述的所有前提条件,运行客户端和服务端程序,替换掉project ID和API KEY,就可以顺利的收到google 推送的消息,截图如下:

         服务端运行之后,会打印出一个注册ID,也就是每台设备的注册ID,接着在bluestacks模拟器运行的你加入推送消息服务的程序就会收到消息,如下图:

         红色模糊的部分是为了公司保密所需要,我的测试代码就不上传了,提供前辈的例子链接,他的博文里面也有,如下链接:

客户端代码:客户端代码csdn下载链接

服务端代码:服务端谷歌推送代码csdn下载链接


    至此所有谷歌推送服务gcm的流程就走完了,不过上述测试代码只是支持发送单一设备的,需要每次添加注册的设备号到服务端,修改之后才能发送到特定设备,存在极大缺陷,后续的按组发送的功能代码,等项目完成之后,会贴出关键代码,敬请期待!!!请尊重劳动成功,转载请注明出处,欢迎探讨。


===========================分割线,上述前辈实现的是发送单个设备的方法,我更新代码,可以发送多个设备==================

package com.ives.server;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.google.android.gcm.server.Constants;
import com.google.android.gcm.server.Message;
import com.google.android.gcm.server.MulticastResult;
import com.google.android.gcm.server.Result;
import com.google.android.gcm.server.Sender;

public class Main {
	private static final String apiKey = "AIzaSyDIqNvArRmXFdpSnbvJU1u0lYyY63jrbzY";
	//private static String deviceRegId = "APA91bHwe5H3Ihl-fKWIdXjq-xS76NLAOqpyt3IViUHVflyONw_xsfzbL69pRV_0FMEVVgCjKMEMLLDjOs4GTqR9t83ckzmG6nQDtjl4ZMFzNrFwar5GPue-J9vyNRjBdasLJEFo9AVZ";
	private static String deviceRegId = "APA91bHkqE9t5TwC3jusIKihNorDwzqlxidIndzE3WqkN7VwY2YOMclWt89AuO6sEtvlWhU6zQ8ktD6igatUru93i_KmVzbfDa4MzgrXwiVI-Hdn4aVPRgdTyvJLNq_JQPb-bgV63x7Y";
	
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("APA91bHwe5H3Ihl-fKWIdXjq-xS76NLAOqpyt3IViUHVflyONw_xsfzbL69pRV_0FMEVVgCjKMEMLLDjOs4GTqR9t83ckzmG6nQDtjl4ZMFzNrFwar5GPue-J9vyNRjBdasLJEFo9AVZ");
		list.add("APA91bHkqE9t5TwC3jusIKihNorDwzqlxidIndzE3WqkN7VwY2YOMclWt89AuO6sEtvlWhU6zQ8ktD6igatUru93i_KmVzbfDa4MzgrXwiVI-Hdn4aVPRgdTyvJLNq_JQPb-bgV63x7Y");
		
		Sender sender = new Sender(apiKey);
		Message message = new Message.Builder().addData("看看是否能接收到消息", "呵呵").build();
		//Result result = null;
		MulticastResult resultMulti = null;
		try {
			
			
			//result = sender.send(message, deviceRegId, 5);
			//public MulticastResult send(Message message, List<String> regIds, int retries) throws IOException {
			resultMulti = sender.send(message, list, 5);
				
			System.out.println(resultMulti.getMulticastId());
			System.out.println(resultMulti.getRetryMulticastIds());
			System.out.println(resultMulti.getSuccess());
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}

运行结果:

8307243719071538299
[]
0



    2.前辈的代码每次发送过来的信息都是系统默认的,所以肯定需要定制,修改服务端代码为:

package com.ives.server;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.google.android.gcm.server.Constants;
import com.google.android.gcm.server.Message;
import com.google.android.gcm.server.MulticastResult;
import com.google.android.gcm.server.Result;
import com.google.android.gcm.server.Sender;

public class Main {
	private static final String apiKey = "AIzaSyDIqNvArRmXFdpSnbvJU1u0lYyY63jrbzY";
	//private static String deviceRegId = "APA91bHwe5H3Ihl-fKWIdXjq-xS76NLAOqpyt3IViUHVflyONw_xsfzbL69pRV_0FMEVVgCjKMEMLLDjOs4GTqR9t83ckzmG6nQDtjl4ZMFzNrFwar5GPue-J9vyNRjBdasLJEFo9AVZ";
	private static String deviceRegId = "APA91bHkqE9t5TwC3jusIKihNorDwzqlxidIndzE3WqkN7VwY2YOMclWt89AuO6sEtvlWhU6zQ8ktD6igatUru93i_KmVzbfDa4MzgrXwiVI-Hdn4aVPRgdTyvJLNq_JQPb-bgV63x7Y";
	
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("APA91bHwe5H3Ihl-fKWIdXjq-xS76NLAOqpyt3IViUHVflyONw_xsfzbL69pRV_0FMEVVgCjKMEMLLDjOs4GTqR9t83ckzmG6nQDtjl4ZMFzNrFwar5GPue-J9vyNRjBdasLJEFo9AVZ");
		list.add("APA91bHkqE9t5TwC3jusIKihNorDwzqlxidIndzE3WqkN7VwY2YOMclWt89AuO6sEtvlWhU6zQ8ktD6igatUru93i_KmVzbfDa4MzgrXwiVI-Hdn4aVPRgdTyvJLNq_JQPb-bgV63x7Y");
		
		Sender sender = new Sender(apiKey);
		Message message = new Message.Builder().addData("message", "google").build();
		//Result result = null;
		MulticastResult resultMulti = null;
		try {
			
			
			//result = sender.send(message, deviceRegId, 5);
			//public MulticastResult send(Message message, List<String> regIds, int retries) throws IOException {
			resultMulti = sender.send(message, list, 5);
				
			System.out.println(resultMulti.getMulticastId());
			System.out.println(resultMulti.getCanonicalIds());
			System.out.println(resultMulti.getResults());
		} catch (IOException e) {
			e.printStackTrace();
		}
		//为空,则消息未发送给任何设备
				if (resultMulti.getResults() != null) {
					 int canonicalRegId = resultMulti.getCanonicalIds();
					 //用户注册了新的注册id,或者谷歌服务器刷新了注册id。
					 //用户注册了新id,旧的id会被保存一段时间。此时使用旧id发送消息,设备即使已使用新id,依然可以收到
					
					} else {
					
					}
		
	}

}

     在客户端GCMIntentService.java接收消息的类修改为,其实就是使用intent的bundle类来接收消息,如下代码:
@Override
	protected void onMessage(Context context, Intent intent) {
		Log.i(TAG, "Received message");
		Bundle bData = intent.getExtras();

		// 處理 bData 內含的訊息
		// 在本例中, 我的 server 端程式 gcm_send.php 傳來了 message, campaigndate, title,
		// description 四項資料
		String message = bData.getString("message");
		Log.i(TAG, "Received message");
		// String message = getString(R.string.gcm_message);
		displayMessage(context, message);
		// notifies user
		generateNotification(context, message);
	}


//==========================================分割线2016年5月18日10:28:31=====================================================

当后面想再加平板项目的谷歌gcm的时候,找建立project的网站花了好长时间,记录一下网站,主要是搜谷歌开发者后台:https://play.google.com/apps/publish/?hl=zh&dev_acc=14503070423488587985#ServicesAndApisPlace:p=tmp.14503070423488587985.1446424805266




1、什么是兼容性测试?兼容性测试侧重哪些方面? 5 2、我现在有个程序,发现在Windows上运行得很慢,怎么判别是程序存在问题还是软硬件系统存在问题? 5 3、测试的策略有哪些? 5 4、正交表测试用例设计方法的特点是什么? 5 5、描述使用bugzilla缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程? 5 6、你觉得bugzilla在使用的过程中,有什么问题? 5 7、描述测试用例设计的完整过程? 6 8、单元测试的策略有哪些? 6 9、LoadRunner分哪三部分? 6 10、LoadRunner进行测试的流程? 6 什么是并发?在lordrunner中,如何进行并发的测试?集合点失败了会怎么样? 6 12、使用QTP做功能测试,录制脚本的时候,要验证多个用户的登录情况/查询情况,如何操作? 6 13、QTP中的Action有什么作用?有几种? 6 14、TestDirector有些什么功能,如何对软件测试过程进行管理? 7 15、你所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)? 7 16、条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录? 8 17、Beta测试与Alpha测试有什么区别? 8 18、软件的评审一般由哪些人参加?其目的是什么? 8 19、测试活动中,如果发现需求文档不完善或者不准确,怎么处理? 8 20、阶段评审与项目评审有什么区别? 8 21、阐述工作版本的定义? 8 22、什么是桩模块?什么是驱动模块? 8 23、什么是扇入?什么是扇出? 8 24、你认为做好测试计划工作的关键是什么? 8 25、你认为做好测试用例工作的关键是什么? 9 26、简述一下缺陷的生命周期? 9 27、软件的安全性应从哪几个方面去测试? 9 28、软件配置管理工作开展的情况和认识? 9 29、你觉得软件测试通过的标准应该是什么样的? 10 30、引入测试管理的含义? 10 31、一套完整的测试应该由哪些阶段组成? 10 32、单元测试的主要内容? 10 33、集成测试也叫组装测试或者联合测试,请简述集成测试的主要内容? 10 34、简述集成测试与系统测试关系? 10 35、软件测试的文档测试应当贯穿于软件生命周期的全过程,其中用户文档是文档测试的重点。那么软件系统的用户文档包括哪些? 10 36、软件系统中除用户文档之外,文档测试还应该关注哪些文档? 10 37、简述软件系统中用户文档的测试要点? 11 38、单元测试主要内容是什么? 11 39、如何理解强度测试? 13 40、如何理解压力、负载、性能测试测试? 13 41、什么是系统瓶颈? 13 42、文档测试主要包含什么内容? 13 43、功能测试用例需要详细到什么程度才是合格的? 14 44、配置和兼容性测试的区别是什么? 14 45、软件文档测试主要包含什么? 15 46、没有产品说明书和需求文档地情况下能够进行黑盒测试吗? 15 47、测试中的“杀虫剂怪事”是指什么? 15 48、在配置测试中,如何判断发现的缺陷是普通问题还是特定的配置问题? 15 49、为什么尽量不要让时间有富裕的员工去做一些测试? 16 50、完全测试程序是可能的吗? 16 51、软件测试的风险主要体现在哪里? 16 52、发现的缺陷越多,说明软件缺陷越多吗? 16 53、所有的软件缺陷都能修复吗?所有的软件缺陷都要修复吗? 17 54、软件测试人员就是QA吗? 17 55、如何减少测试人员跳槽带来的损失? 17 56、测试产品与测试项目的区别是什么? 17 57、和用户共同测试(UAT测试)的注意点有哪些? 18 58、如何编写提交给用户的测试报告? 18 59、测试工具在测试工作中是什么地位? 18 60、什么是软件测试软件测试的目的? 18 61、简述负载测试与压力测试的区别。 19 62、写出bug报告流转的步骤,每步的责任人及主要完成的工作。 19 63、写出bug报告当中一些必备的内容。 19 64、开发人员老是犯一些低级错误怎么解决? 20 65、画出软件测试的V模型图。 20 66、为什么要在一个团队中开展软件测试工作? 20 67、您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作? 20 68、您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……) 20 69、您认为做好测试用例设计工作的关键是什么? 21 70、请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。 21 71、测试计划工作的目的是什么?测试计划工作的内容都包括什么?其中哪些是最重要的? 22 72、您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 22 73、请以您以往的实际工作为例,详细的描述一次测试用例设计的完整的过程。 23 74、您以往是否曾经从事过性能测试工作?如果有,请尽可能的详细描述您以往的性能测试工作的完整过程。 23 75、你对测试最大的兴趣在哪里?为什么? 23 76、你以前工作时的测试流程是什么? 24 77、当开发人员说不是BUG时,你如何应付? 24 78、软件的构造号与版本号之间的区别?BVT(BuildVerificationTest) 24 79、您以往的工作中,一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录? 25 80、您以往所从事的软件测试工作中,是否使用了一些工具来进行软件缺陷(Bug)的管理?如果有,请结合该工具描述软件缺陷(Bug)跟踪管理的流程。 25 81、您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么? 25 82、单元测试、集成测试、系统测试的侧重点是什么? 25 83、集成测试通常都有那些策略? 25 84、一个缺陷测试报告的组成 25 85、基于WEB信息管理系统测试时应考虑的因素有哪些? 25 86、软件测试项目从什么时候开始,?为什么? 26 87、需求测试注意事项有哪些? 26 88、简述一下缺陷的生命周期 26 89、你在你所在的公司是怎么开展测试工作的?是如何组织的? 26 90、你认为理想的测试流程是什么样子? 26 91、您在从事性能测试工作时,是否使用过一些测试工具?如果有,请试述该工具的工作原理,并以一个具体的工作中的例子描述该工具是如何在实际工作中应用的。 26 92、软件测试活动的生命周期是什么? 26 93、请画出软件测试活动的流程图? 26 94、针对缺陷采取怎样管理措施? 26 95、什么是测试评估?测试评估的范围是什么? 26 96、如果能够执行完美的黑盒测试,还需要进行白盒测试吗?为什么? 26 97、测试结束的标准是什么? 26 98、软件验收测试除了alpha ,beta测试以外,还有哪一种? 26 99、做测试多久了?以前做过哪些项目?你们以前测试的流程是怎样的?用过哪些测试工具? 27 100、请就如何在开发中进行软件质量控制说说你的看法 27 101、一套完整的测试应该由哪些阶段组成?分别阐述一下各个阶段。 27 102、软件测试的类型有那些?分别比较这些不同的测试类型的区别与联系。 27 103、测试用例通常包括那些内容?着重阐述编制测试用例的具体做法 27 104、在分别测试winform的C/S结构与测试WEB结构的软件是,应该采取什么样的方法分别测试?他们存在什么样的区别与联系? 27 105、在测试winform的C/S结构软件时,发现这个软件的运行速度很慢,您会认为是什么原因?您会采取哪些方法去检查这个原因? 27 106、描述使用bugzilla缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程 27 107、你都用什么测试方法 针对不同的产品或者系统或者模块,有不同的测试方法。总体而言有白盒测试和黑盒测试。 27 108、怎么编写案例 案例的编写与测试阶段的定义有很大的关系。系统测试和unit测试的案例可能不同。总体而言测试案例根据系统的需求而定。 27 109、怎么才能够全面的测试到每一个点 测试的全面性主要需要在设计测试计划的时候考虑,从测试策略,产品需求等等多个角度考虑从而定义全部的测试点。 27 110、谈谈软件测试技术,以及如何提高 27 111、谈谈软件测试职业发展,以及个人的打算 27 112、谈谈软件测试在企业的地位,也可以结合软件生命周期来谈 27 113、一般公司里实际的软件测试流程是什么样的?你们公司又是怎样的? 27 114、软件工程师要具有那些素质? 27 115、你会哪些测试工具?怎么操作? 27 116、你能不能说下你的3到5年的职业计划(规划) 27 117、你觉得你来应聘有那些优势? 27 其他问题:(有可能清晰的思路比确切的答案更重要) 27 开发及环境搭建类面试题 28 1、描述软件产生内存泄露的原因以及检查方式。(可以结合一种开发语言进行描述) 28 2、简述什么是值传递,什么是地址传递,两者区别是什么? 28 3、结构化程序设计和面向对象程序设计各自的特点及优缺点是什么? 28 4、简述什么是存储过程和触发器? 28 5、使用C语言编写一个函数,用于交换两个变量的值(地址传递)。 29 6、请简述DNS、活动目录、域的概念。 29 7、描述TCP/IP协议的层次结构,以及每一层中重要协议。 29 8、简述子网掩码的用途。 29 9、说出4种以上常用的操作系统及其主要的应用范围(微软的操作系统除外)。 29 10、在Linux系统中,一个文件的访问权限是755,其含义是什么? 29 11、Windows操作系统中PATH环境变量的作用是什么? 30 12、Ghost的主要用途和常用方法? 30 13、在RedHat中,从root用户切到userl用户,一般用什么命令? 30 14、Linux中,一般怎么隐藏文件? 30 15、如何将自己的本地磁盘(D)做成FTP供远端主机使用? 30 16、对RUP.CMM,CMMI,XP,PSP.TSP的认识? 30 17、DNS是什么,它是如何工作的? 31 18、防火墙如何保证安全的?主要有哪些? 31 19、目前流行的操作的系统有哪些?请举例说明安装操作系统的注意事项? 33 20、简述一下c/s模式或者b/s模式? 33 21、TCP/UDP有哪些区别? 34 22、ISO模型?HUB、tch、Router是ISO的第几层设备? 34 23、内存有哪几种存储组织结构.请分别加以说明? 34 人力资源面试题 34 1、你的测试职业发展是什么?你自认为做测试的优势在哪里? 34 2、你为什么想离开目前的职务? 34 3、你对我们公司了解有多少? 34 4、你找工作时,最重要的考虑因素为何? 34 5、为什么我们应该录取你? 34 6、请谈谈你个人的最大特色。 34 7、一个测试工程师应具备那些素质和技能? 35 8、您认为在测试人员同开发人员的沟通过程中,如何提高沟通的效率和改善沟通的效果?维持测试人员同开发团队中其他成员良好的人际关系的关键是什么? 35 9、在您以往的测试工作中,最让您感到不满意或者不堪回首的事情是什么?您是如何来对待这些事情的? 35 10、在即将完成这次笔试前,您是否愿意谈一些自己在以往的学习和工作中获得的工作经验和心得体会?(可以包括软件测试、过程改进、软件开发或者与此无关的其他方面) 35 11、为什么选择测试这行? 35 12、你的工作通常能在时限内完成吗.(我想问一下就是她问这个问题的动机是什么) 35 13、通常你对于别人批评你会有什么样的反应 35 14、如果明知这样做不对,你还会依主管的指过去做吗? 35 15、如果你接到一个客户抱怨的电话,你确知无法解决他的问题,你会怎么处理? 35 16、请就软件测试人员应该具备什么样的基本素质说说你的看法。 36 17、你在五年内的个人目标和职业目标分别是什么? 36 18、你怎样做出自己的职业选择? 36
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值