PHP基于二分法的手机号码归属查询与传统查询效率比较
出于对算法对于系统的影响的好奇,决定实验性的在实际生产环境中研究一下算法对系统效率的影响。二分法最重要的是对有序数据的查询定位,例如手机号码就是一个很贴切的有序排列的数据例子。
如果数据量很小,例如只有10条有序数据,要查询其中的第9条数据,轮询查询需要查询9次确定结果,二分法查询次数为3次(分别是匹配第5、8、9条记录)即可确定结果。数据量越大,二分法所带来的效率就是程2的阶乘递增,可以大大提升服务器的运行效率、提升用户等待时间、节省服务器资源。
实验环境:LAMP
实验数据:国内手机号码归属地。手机号码前7位代表一个号段,生成从1300000到1590000之间的所有号段按从小到大排列,大约30万条数据。
传统查询:对于任意手机号码,截取前7位,从数据库中第一条记录开始循环向下匹配,如果对照,则返回查询结果。
代码如下 | 复制代码 |
flock($fp,LOCK_SH); $note = fread($fp,filesize('./data.php')); //读取数据 fclose($fp); $note = explode("n",$note); array_pop($note); array_shift($note); $num = count($note); $_data = ''; //循环查询开始 for($i=1;$i<$num;$i++){ $row = explode(" ",$note[$i]); if($m == $row[0]){ $_data = $row; break; } } |
实测结果:最快0.03512秒、最慢0.63043秒、平均查询用时约为0.4秒。
二分法查询:对于任意手机号码,截取前7位。首先匹配数据库中最中间的第100000条数据,根据二分法原则,若匹配结果比中间值大,重新选择第二次匹配第100000到200000的中间值----第150000条数据。以此类推,直到查询到最后一位正确的值返回结果。那么每次的查询次数小于或等于17次。
代码如下 | 复制代码 |
flock($fp,LOCK_SH); |
实测结果:每次查询都在0.034—0.035之间。
结论:本试验可以看出,二分法数据查询效率比传统效率快10倍以上。本实验数据只有30万条,在普通的应用性数据查询时,数据量越大,越能显示出二分法的优越性(理论上讲,上千万的数据查询次数不超过30次便可准确定位),在更大量的数据的时候,查询效率或许能真的给人直观的反应。
curl在php中在性能方法要比较其它相同功能函数要高得多,下面我给大家介绍我自己常用的函数一个使用PHP curl 来做登陆后的抓取时使用;一个使用PHP curl来实现soap;我想你会感兴趣有哦。例子, 模拟登陆
代码如下 | 复制代码 |
/** * 模拟登陆 * $url 请求地址 * $post 需要POST的数据 * $cookie 登陆时取的的COOKIE * $cookiejar cookie要存到的位置 例如/tmp/test.cookie * $referer 上页地址 * **/ function vcurl($url, $post = '', $cookie = '', $cookiejar = '', $referer = ''){ $tmpInfo = ''; //用来存放cookie的文件 //初始化curl $curl = curl_init(); //设定目标网址 curl_setopt($curl, CURLOPT_URL, $url); //使用目前所用的浏览器代理 curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); //curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); //如果有Ref参数,则设置Referer头,否则自动设置Referer头 if($referer) { curl_setopt($curl, CURLOPT_REFERER, $referer); } else { curl_setopt($curl, CURLOPT_AUTOREFERER, 1); } //如果有post数据参数,则方法为POST,并且设置数据,否则为GET if($post) { //发送一个常规的POST请求,默认类型为:application/x-www-form-urlencoded,www.111cn.net表单提交 curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $post); } //如果有cookie参数,则设置 if($cookie) { curl_setopt($curl, CURLOPT_COOKIE, $cookie); } //如果有cookie文件参数,则设置存取Cookie文件名 if($cookiejar) { curl_setopt($curl, CURLOPT_COOKIEJAR, $cookiejar); curl_setopt($curl, CURLOPT_COOKIEFILE, $cookiejar); } //如果是302转移,则返回转移后的网址及内容 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); //设置执行的最大秒数 curl_setopt($curl, CURLOPT_TIMEOUT, 100); //返回内容中是否包含头信息 curl_setopt($curl, CURLOPT_HEADER, 0); //把返回的结果存在文件或者变量中,而不是直接显示在浏览器 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //执行函数后的返回结果 $tmpInfo = curl_exec($curl); //如果出错,显示错误信息 if (curl_errno($curl)) { $tmpInfo = '<pre><b>错误:</b><br />'.curl_error($curl); } //关闭curl对象 curl_close($curl); //返回结果 return $tmpInfo; } |
例子、soap
代码如下 | 复制代码 |
function vcurlsoap($url, $SoapRequest, $SoapAction) { $ch = curl_init (); //initiate the curl session curl_setopt ( $ch, CURLOPT_URL, $url ); //set to url to post to curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); // return data in a variable curl_setopt ( $ch, CURLOPT_HEADER, 0 ); curl_setopt ( $ch, CURLOPT_POST, 1 ); curl_setopt ( $ch, CURLOPT_POSTFIELDS, $SoapRequest ); // post the xml curl_setopt ( $ch, CURLOPT_TIMEOUT, 60 ); // set timeout in seconds curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, 0 ); $header = array ("Content-Type: text/xml" ); $header [] = "Content-Length: ".strlen($SoapRequest); if (! is_null ( $SoapAction )) $header [] = 'SOAPAction: "' . $SoapAction . '"'; curl_setopt ( $ch, CURLOPT_HTTPHEADER, $header ); $xmlResponse = curl_exec ( $ch ); curl_close ( $ch ); return $xmlResponse; } |
效果如下
代码如下 | 复制代码 |
index.php文件 php结合jquery异步上传图片(ajaxSubmit),以下为提交页面代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> function sky_upfiles(){ </script> |
doupfiles.php文件
代码如下 | 复制代码 |
<?php $photo_types=array('image/jpg', 'image/jpeg','image/png','image/pjpeg','image/gif','image/bmp','image/x-png');//定义上传格式 $upfile=$_FILES['upfile']; $file = $_FILES["upfile"]; if($max_size < $file["size"])//检查文件大小
|
最后把完整的php+jquery Ajax异步上传图片(ajaxSubmit)实例源码下载地址
一篇用php实现memcache缓存实例详解,这里利用了很多我们以前可能很少使用到的可用扩展,在php中共享内存也一样。使用一些共享的函数,无需安装任何扩展,开发人员就能够轻松操作内存段。
概述
共享内存是一种在相同机器中的应用程序之间交换数据的有效方式。一个进程可创建一个可供其他进程访问的内存段,只要它分配了正确的权限。每个内存段拥有一个惟一的 ID(称为 shmid),这个 ID 指向一个物理内存区域,其他进程可在该区域操作它。创建并提供了合适的权限之后,同一台机器中的其他进程就可以操作这些内存段:读取、写入和删除。
这表明使用 C 语言编写的应用程序可与使用其他语言(比如 Java™ 或 PHP)编写的应用程序共享信息。它们都可以共享信息,只要它们可访问和理解该信息。共享内存在针对大部分语言的实现中得到了广泛使用,所以访问应该不是问题。要理解信息,我们可以使用一种标准格式,比如 XML 或 JSON。
共享内存的使用是一种在进程之间交换数据的快速方法,主要因为在创建内存段之后传递数据,不会涉及内核。这种方法常常称为进程间通信 (IPC)。其他 IPC 方法包括管道、消息队列、RPC 和套接字。当使用需要彼此通信的应用程序的生态系统时,这种在应用程序之间快速、可靠地交换数据的能力非常有用。取决于生态系统的大小,使用数据库在应用程序之间交换信息的常用方法常常会导致查询缓慢,甚至 I/O 阻塞。使用共享内存,没有 I/O 会减缓开发人员的进度。
本文的提议非常简单,学习如何使用 PHP 创建和操作共享内存段,使用它们存储可供其他应用程序使用的数据集。即使没有使用共享内存交换数据的计划,它本身也在许多好处,因为它使应用程序能够远离 I/O 问题。将数据集直接存储在内存中具有诸多优势,从 Web 服务数据缓存到会话共享。它是一个非常有用的概念,每个 PHP 开发人员都应该知道。
共享内存和 PHP
PHP 拥有丰富的可用扩展,共享内存也一样。使用一些共享的函数,无需安装任何扩展,开发人员就能够轻松操作内存段。
回页首
创建内存段
共享内存函数类似于文件操作函数,但无需处理一个流,您将处理一个共享内存访问 ID。第一个示例就是 shmop_open 函数,它允许您打开一个现有的内存段或创建一个新内存段。此函数非常类似于经典的 fopen 函数,后者打开用于文件操作的流,返回一个资源供其他希望读取或写入该打开的流的函数使用。让我们看看清单 1 中的 shmop_open。
清单 1. shmop_open 函数
代码如下 | 复制代码 |
<?php $systemid = 864; // System ID for the shared memory segment $shmid = shmop_open($systemid, $mode, $permissions, $size); ?> |
该函数中出现的第一个事物是系统 ID 参数。这是标识系统中的共享内存段的数字。第二个参数是访问模式,它非常类似于 fopen 函数的访问模式。您可以在 4 种不同的模式下访问一个内存段:
•模式 “a”,它允许您访问只读内存段
•模式 “w”,它允许您访问可读写的内存段
•模式 “c”,它创建一个新内存段,或者如果该内存段已存在,尝试打开它进行读写
•模式 “n”,它创建一个新内存段,如果该内存段已存在,则会失败
第三个参数是内存段的权限。您必须在这里提供一个八进制值。
第四个参数提供内存段大小,以字节为单位。在写入一个内存段之前,您必须在它之上分配适当的字节数。
请注意,此函数返回一个 ID 编号,其他函数可使用该 ID 编号操作该共享内存段。这个 ID 是共享内存访问 ID,与系统 ID 不同,它以参数的形式传递。请注意不要混淆这两者。如果失败,shmop_open 将返回 FALSE。
回页首
向内存段写入数据
使用 shmop_write 函数向共享内存块写入数据。此函数的使用很简单,它仅接受 3 个参数,如清单 2 所示。
清单 2. 使用 shmop_write 向共享内存块写入数据
代码如下 | 复制代码 |
<?php $shmid = shmop_open(864, 'c', 0755, 1024); ?> |
这个函数类似于 fwrite 函数,后者有两个参数:打开的流资源(由 fopen 返回)和您希望写入的数据。shmop_write 函数也执行此任务。
第一个参数是 shmop_open 返回的 ID,它识别您操作的共享内存块。第二个参数是您希望存储的数据,最后的第三个参数是您希望开始写入的位置。默认情况下,我们始终使用 0 来表示开始写入的位置。请注意,此函数在失败时会返回 FALSE,在成功时会返回写入的字节数。
回页首
从内存段读取数据
从共享内存段读取数据很简单。您只需要一个打开的内存段和 shmop_read 函数。此函数接受一些参数,工作原理类似于 fread。参见清单 3,读取一个 PHP 文件的内容。
清单 3. 使用 shmop_read 读取一个文件的内容
代码如下 | 复制代码 |
<?php $stream = fopen('file.txt', 'r+'); ?> |
读取共享内存段的内容的过程与此类似,如清单 4 所示:
清单 4. 读取共享内存段的内容
代码如下 | 复制代码 |
<?php $shmid = shmop_open(864, 'c', 0755, 1024); ?> |
请留意这里的参数。shmop_read 函数将接受 shmop_open 返回的 ID,我们已知道它,不过它还接受另外两个参数。第二个参数是您希望从内存段读取的位置,而第三个是您希望读取的字节数。第二个参数可以始终为 0,表示数据的开头,但第三个参数可能存在问题,因为我们不知道我们希望读取多少字节。
这非常类似于我们在 fread 函数中的行为,该函数接受两个参数:打开的流资源(由 fopen 返回)和您希望从该流读取的字节数。使用filesize 函数(它返回一个文件中的字节数)来完整地读取它。
幸运的是,当使用共享内存段时,shmop_size 函数返回一个内存段的大小(以字节为单位),类似于 filesize 函数。参见清单 5。
清单 5. shmop_size 函数返回内存段大小,以字节为单位
代码如下 | 复制代码 |
<?php $shmid = shmop_open(864, 'c', 0755, 1024); $size = shmop_size($shmid); ?> |
回页首
删除内存段
我们学习了如何打开、写入和读取共享内存段。要完成我们的 CRUD 类,我们还需要学习如何删除内存段。该任务可使用 shmop_delete 函数轻松完成,该函数仅接受一个参数:我们希望删除的共享内存 ID。
清单 6. shmop_delete 标记要删除的内存段
代码如下 | 复制代码 |
<?php $shmid = shmop_open(864, 'c', 0755, 1024); ?> |
这不会实际删除该内存段。它将该内存段标记为删除,因为共享内存段在有其他进程正在使用它时无法被删除。shmop_delete 函数将该内存段标记为删除,阻止任何其他进程打开它。要删除它,我们需要关闭该内存段。
回页首
关闭内存段
打开一个共享内存段会 “附加” 到它。附加该内存段之后,我们可在其中进行读取和写入,但完成操作后,我们必须从它解除。这使用清单 7 中的 shmop_close 函数来完成。
这非常类似于处理文件时的 fclose 函数。打开包含一个文件的流并在其中读取或写入数据后,我们必须关闭它,否则将发生锁定。
清单 7. 使用 shmop_close 与一个内存段分开
代码如下 | 复制代码 |
<?php $shmid = shmop_open(864, 'c', 0755, 1024); ?> |
回页首
使用共享内存作为一个存储选项
有了共享内存和共享内存段上基本 CRUD 操作的基本知识,是时候应用此知识了。我们可以使用共享内存作为一种独特的存储选项,提供快速读/写操作和进程互操作性等优势。对于 Web 应用程序,这意味着:
•缓存存储(数据库查询、Web 服务数据、外部数据)
•会话存储
•应用程序之间的数据交换
在继续之前,我想介绍一个名为 SimpleSHM 小型库。SimpleSHM 是一个较小的抽象层,用于使用 PHP 操作共享内存,支持以一种面向对象的方式轻松操作内存段。在编写使用共享内存进行存储的小型应用程序时,这个库可帮助创建非常简洁的代码。要了解 SimpleSHM,请访问GitHub 页面。
您可以使用 3 个方法进行处理:读、写和删除。从该类中简单地实例化一个对象,可以控制打开的共享内存段。清单 8 展示了基本用途。
清单 8. SimpleSHM 基本用途
代码如下 | 复制代码 |
<?php $memory = new SimpleSHM; ?> |
请注意,这里没有为该类传递一个 ID。如果没有传递 ID,它将随机选择一个编号并打开该编号的新内存段。我们可以以参数的形式传递一个编号,供构造函数打开现有的内存段,或者创建一个具有特定 ID 的内存段,如清单 9 所示。
清单 9. 打开一个特定的内存段
代码如下 | 复制代码 |
<?php $new = new SimpleSHM(897); ?> |
神奇的方法 __destructor 负责在该内存段上调用 shmop_close 来取消设置对象,以与该内存段分离。我们将这称为 “SimpleSHM 101”。现在让我们将此方法用于更高级的用途:使用共享内存作为存储。存储数据集需要序列化,因为数组或对象无法存储在内存中。尽管这里使用了 JSON 来序列化,但任何其他方法(比如 XML 或内置的 PHP 序列化功能)也已足够。清单 10 给出了一个示例。
清单 10. 使用共享内存作为存储
代码如下 | 复制代码 |
<?php require('SimpleSHM.class.php'); $results = array( $data = json_encode($results); $memory = new SimpleSHM; print_r($storedarray); ?> |
我们成功地将一个数组序列化为一个 JSON 字符串,将它存储在共享内存块中,从中读取数据,去序列化 JSON 字符串,并显示存储的数组。这看起来很简单,但请想象一下这个代码片段带来的可能性。您可以使用它存储 Web 服务请求、数据库查询或者甚至模板引擎缓存的结果。在内存中读取和写入将带来比在磁盘中读取和写入更高的性能。
使用此存储技术不仅对缓存有用,也对应用程序之间的数据交换也有用,只要数据以两端都可读的格式存储。不要低估共享内存在 Web 应用程序中的力量。可采用许多不同的方式来巧妙地实现这种存储,惟一的限制是开发人员的创造力和技能
一个RTXServer web api接口的小实例,最后返回的是xml文件,与其它的区别不大,有兴趣的同学可参考学习。109天没发表博客,破了记录,至从换了公司后就没有机会使用CI,重要的原因是自己懒惰了,下班后的时间几乎都在玩吉他,所以一直没有找到可以分享的技术点
不过在这109天里可以肯定的事情是:我变了
在新公司接触得最多的是oa与RTX,而RTX其实也是很多玩法,这里就先将前几天趁空闲的时间整理下来的RTX可以通过web方式调用的接口列一下
值得提醒的是这些接口都需要设置访问权限不然访问时会提醒“IP受限制”
RTX Server强加了SDK访问安性,因此通过http方式访问cgi文件需要在SDKProperty.xml添加远程访问机器的IP地址,如下图所示,允许192.168.10.100通过http方式访问cgi文件
以下为所有接口的清单,你也可以访问这个地方来查看相关的API http://iamlze.cn/demo/RTX-API/
GetImage.cgi
获取指定用户的状态图片
仅支持GET传值
@param string receiver RTX用户名
@return 用户状态图片
@example http://localhost:8012/GetImage.cgi?receiver=XXXX
GetMobile.cgi
获取指定用户的手机号码
支持GET与POST传值
@param string receiver RTX用户名
@return 用户手机
@example http://localhost:8012/GetMobile.cgi?receiver=XXXX
GetSession.cgi
获取指定用户的RTX session
支持GET与POST传值
@param string receiver RTX用户名
@return RTX用户session
@example http://localhost:8012/GetSession.cgi?receiver=XXXX
GetAllDepts.php
获取RTX所有部门数据
@return 所有部门数据(json)
@example http://localhost:8012/GetAllDepts.php
GetAllUsers.php
获取RTX所有用户数据
@return 所有用户数据(json)
@example http://localhost:8012/GetAllUsers.php
GetUserBasicInfo.php
获取指定用户基本信息
仅支持GET
@param string user RTX用户名
@return 所有用户数据(json)
@example http://localhost:8012/GetUserBasicInfo.php?user=XXXX
Login.php
判断指定用户ID与密码是否存在RTXserver中
仅支持GET
@param string user RTX用户名
@param string pwd RTX密码
@return string 正确输出true 用户或密码错误输出false 参数缺失输出params is null
@example http://localhost:8012/Login.php?user=XXXX&pwd=XXXX
SendIM.cgi
发送IM信息
支持GET与POST传值 参数顺序随意
@param string sender 发消息人RTXid
@param string pwd 发送消息人RTX密码
@param string receivers 接收人(多个接收人之间使用,隔开)
@param string msg 消息内容
@param string sessionid RTX session
@return string
@example http://localhost:8012/SendIM.cgi?sender=XXXX&pwd=XXX&receivers=A;B&msg=CS么&sessionid=XXXX
SendNotify.cgi
发送通知信息
支持GET与POST传值 参数顺序随意
@param string title 通知标题
@param string msg 通知内容
@param string receiver 接收人(多个接收人之间使用,隔开,若为空表示广播)[option]
@param int delaytime 消息提醒框的停留时间(毫秒),0表示不自动消失
@param string okurl 成功后IE自动定位到指定的url 格式类似为:okurl=rtx.tencent.com 或者okurl=http://tx.tencent.com 注意:这里的url必须为绝对地址[option]
@param string errurl 失败后IE自动定位到指定的url[option]
@example http://localhost:8012/SendNotify.cgi?title=XXXX&msg=吃饭了&receiver=A;B&delaytime=2000
SendSMS.cgi
发送短信信息
支持GET与POST传值 参数顺序随意
@param string msg 短信内容
@param string receiver 接收人(多个接收人之间使用,隔开)
@param string sender 发送人
@param string okurl 成功后IE自动定位到指定的url 格式类似为:okurl=rtx.tencent.com 或者okurl=http://tx.tencent.com 注意:这里的url必须为绝对地址[option]
@param string errurl 失败后IE自动定位到指定的url[option]
@example http://localhost:8012/SendNotify.cgi?title=XXXX&msg=吃饭了&receiver=A;B&delaytime=2000
SignAuth.cgi
验证签名 仅支持GET 参数顺序随意
@param string user RTX用户ID
@param string sign 签名
@return string 成功为success! 失败为failed!
@example http://localhost:8012/SignAuth.cgi?user=XXXX&sign=XXXX
getstatus.php
获取用户在线状态仅支持GET
@param string username RTX用户名
@return int 0不在线 1在线
@example http://localhost:8012/getstatus.php?username=XXXX
userlist.php
获取所有用户列表(只含id与name)
@return string 用户列表(json)
@example http://localhost:8012/userlist.php
相关文章
- 支付宝支付在国内算是大家了,我们到处都可以使用支付宝了,下文整理介绍的是在安卓app应用中使用支付宝进行支付的开发例子。 之前讲了一篇博客关与支付宝集成获取...2016-09-20
- PHP+Ajax有许多的功能都会用到它小编今天就有使用PHP+Ajax实现的一个微信登录功能了,下面我们来看一个PHP+Ajax手机发红包的程序例子,具体如下所示。 PHP发红包基本...2016-11-25
- 华为手机怎么恢复已卸载的应用?有时候我们在使用华为手机的时候,想知道卸载的应用怎么恢复,这篇文章主要介绍了华为手机恢复应用教程,需要的朋友可以参考下...2020-06-29
- 很多用安卓智能手机的朋友是用九宫格锁屏,网上也有暴力删除手机图形锁的方法,不过我们可以用程序来破解。本文只提供技术学习,不能干坏事 安卓手机的图形锁(九宫格)...2016-09-20
- 华为手机怎么开启双时钟?华为手机是可以设置双时钟的,如果来回在两个有时差的地方工作,是可以设置双时钟显示,下面我们就来看看华为添加双时钟的技巧,需要的朋友可以参考下...2020-12-08
安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法
手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21- 怎么查询自己的联通手机号码是否已经实名认证?现在手机一批一批的开始实名制了,自己的手机号买的时候没有实名认证,怎么才能知道自己的手机是否被知名认证了呢?认证以后就不能充话费打电话了,下面我们们一起来看看两种查看方法...2016-07-04
华为手机蓝牙可以连接几个设备?华为设置蓝牙音频连接个数的技巧
华为手机蓝牙可以连接几个设备? 华为手机使用蓝牙的时候,想要知道能连接几个设备,这都是可以设置呢?下面我们就来看看华为设置蓝牙音频连接个数的技巧,需要的朋友可以参考下...2020-12-08- 小米手机负一屏该怎么设置?小米手机最近推出了负一屏的功能,集成了很多信息,可以放一些需要知道的信息,下面我们就来看看详细的教程,需要的朋友可以参考下。 最新的开...2016-12-15
oppo手机怎么设置充电提示音 oppo手机充电提示音设置方法
oppo手机充电提示音怎么关闭?用户要学会充电提示音的设置方法,这样才能熟练的操作更换提示音或者是关掉提示音,关于OPPO手机充电提示音的设置下面会有具体的介绍,各位用户一起来看看详细的操作方法吧...2020-12-08- 保千里打令VR手机怎么样?什么时候发布?全球首款VR手机保千里打令VR手机将于10月24日在深圳大梅沙国际水上运动中心隆重发布,对保千里打令VR手机不太了解朋友可以看看...2016-11-01
- 钉钉怎么双开登录两个账号?钉钉中想要双开登录两个账号,该怎么登录呢?下面我们就来看看小米手机双开钉钉的技巧,需要的朋友可以参考下...2020-06-29
- 明明我的手机配置那么高(都八核了)为什么玩游戏还会卡?对安卓手机来说玩游戏卡顿的原因一般有两种;性能不足导致的卡顿以及CPU发热降频导致的卡顿,详情我们来看看吧...2017-07-06
- 这篇文章主要介绍了微信小程序开发之获取用户手机号码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-05-18
- 您是否遇到过孩子想要玩手机又不好拒绝,或者是您想要给孩子配一个联系用的手机有担心孩子玩手机上瘾?如果您购买的是小米手机,那么MIUI的儿童模式就能很好地解决这个问题...2016-12-21
- wifi上网 几乎是不需要什么设置了,我们只要简单的输入wifi密码与用户名就可以自动连接wifi上网了,下面我以安卓4.1系统为实例 具体步骤 1.在安卓手机中点击“...2016-09-20
javascript 手机号码正则表达式验证函数 <font color=red>原创</font>
随着手机号码段的不断增加,以前网上的手机号码验证函数都不能那么完美的支持了,这里脚本之家编辑特为大家准备的一个简单的正则与手机验证的函数分析。...2021-05-07- Recovery模式是安卓系统特有的一个功能,进入Recovery模式可以刷机,也可以恢复出厂设置,同时进入Recovery模式的方法有很多,下面我来介绍利用手机助手快速进入Recovery模式...2016-09-20
- 小米手机如今也都为手机配备了越来越大容量的电池,但很多小米用户表示,自己手机电池容量明明很大,但费电仍然很快,这很可能是以为你有两个耗电大户的设置项目没关。下面就...2016-12-15
- 小编给大家带来一篇关于安卓手机缓存怎么清理的问题解答,有需要的可以参考一下   安卓手机怎么清理缓存 android清除程序缓存的方法  一,...2017-07-06