• 关于

    编码方法是啥

    的搜索结果

回答

原来你是问这个.... 改成(name).getBytes("ISO-8859-1") 试试 ######回复 @yumemor : getBytes是编码,new String是解码,你这么理解就对了,如果没有参数则是默认编码(一般是UTF-8)######不好意思,经过我刚刚测试,这种方式能解决 ,能告诉我为什么么? new String((name).getBytes(),"ISO-8859-1") new String(name.getBytes("ISO-8859-1")) 有什么区别呢?######不行的哈,基本所有编码都试过了,不行,上面已经说了######倒是可以考虑用过滤器来解决乱码,post的直接设置编码,get的写一个继承 HttpServletRequestWrapper的类###### post用过滤器即可 get请求修改tomcat的server.xml中的<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> 加上URIEncoding="编码" 当然这个编码应该跟你客户端编码一致 ###### 其实你们都误解了我说的意思,请大家认真看题目好吗?  为什么手动解码和配置文件还是不一样呢? 都是转换成UTF-8 。 ###### 1. 你看下System.out.print(Charset.defaultCharset());值是啥。 2. System.out.println(new String(name.getBytes("ISO-8859-1"), "ISO-8859-1"));看看能不能行。 3. 我个人觉得,配置文件和自己解码肯定都是可以解决的。 ######回复 @yumemor : 其实可以参看URLEncoder,URLDecoder两个类的编码解码的方法,编码的方法调用了getBytes,解码的调用了new String,如果你页面上编码是utf-8,则相当于调用了URLEncoder.encode(str, "UTF-8")这个方法,但tomcat默认是调用URLDecoder.decode(str_utf8, "ISO-8859-1"),所以你可以理解整个过程为new String(str.getBytes("utf-8"),"ISO-8859-1");所以会出现乱码,所以你只要用new String(str.getBytes("ISO-8859-1"),"utf-8");就可以转回来,如果java端默认编码为utf-8,new String(str.getBytes("ISO-8859-1"));也是同样的效果######回复 @maradona : 感谢!###### @yumemor 具体可以参照一下 http://blog.csdn.net/chenssy/article/details/42913511 或许对你有帮助,俺发现对这个理解又透彻了一点点

爱吃鱼的程序员 2020-06-05 12:18:50 0 浏览量 回答数 0

回答

机器学习方面的面试主要分成三个部分: 1. 算法和理论基础 2. 工程实现能力与编码水平 3. 业务理解和思考深度 1. 理论方面,我推荐最经典的一本书《统计学习方法》,这书可能不是最全的,但是讲得最精髓,薄薄一本,适合面试前突击准备。 我认为一些要点是: 统计学习的核心步骤:模型、策略、算法,你应当对logistic、SVM、决策树、KNN及各种聚类方法有深刻的理解。能够随手写出这些算法的核心递归步的伪代码以及他们优化的函数表达式和对偶问题形式。 非统计学习我不太懂,做过复杂网络,但是这个比较深,面试可能很难考到。 数学知识方面,你应当深刻理解矩阵的各种变换,尤其是特征值相关的知识。 算法方面:你应当深刻理解常用的优化方法:梯度下降、牛顿法、各种随机搜索算法(基因、蚁群等等),深刻理解的意思是你要知道梯度下降是用平面来逼近局部,牛顿法是用曲面逼近局部等等。 2. 工程实现能力与编码水平 机器学习从工程实现一般来讲都是某种数据结构上的搜索问题。 你应当深刻理解在1中列出的各种算法对应应该采用的数据结构和对应的搜索方法。比如KNN对应的KD树、如何给图结构设计数据结构。如何将算法map-red化等等。 一般来说要么你会写C,而且会用MPI,要么你懂Hadoop,工程上基本都是在这两个平台实现。实在不济你也学个python吧。 3. 非常令人失望地告诉你尽管机器学习主要会考察1和2 但是实际工作中,算法的先进性对真正业务结果的影响,大概不到30%。当然算法必须要足够快,离线算法最好能在4小时内完成,实时算法我没搞过,要求大概更高。 机器学习大多数场景是搜索、广告、垃圾过滤、安全、推荐系统等等。对业务有深刻的理解对你做出来的系统的结果影响超过70%。这里你没做过实际的项目,是完全不可能有任何体会的,我做过一个推荐系统,没有什么算法上的高大上的改进,主要是业务逻辑的创新,直接就提高了很明显的一个CTR(具体数目不太方便透露,总之很明显就是了)。如果你做过实际的项目,一定要主动说出来,主动让面试官知道,这才是最大最大的加分项目。 最后举个例子,阿里内部机器学习挑战赛,无数碾压答主10000倍的大神参赛。最后冠军没有用任何高大上的算法而是基于对数据和业务的深刻理解和极其细致的特征调优利用非常基本的一个算法夺冠。所以啥都不如真正的实操撸几个生产项目啊。

马铭芳 2019-12-02 01:21:30 0 浏览量 回答数 0

回答

@红薯 帮忙看看啊不关数据库的事,是Jdbc的问题!看错误提示!应该是JDBC限制了大小,改JDBC参数吧回复 @ToB蓝波湾:嗯jdbc参数?你是指那个jdbc的配置文件? http://baike.baidu.com/link?url=s6CKCQAeJQG5wA4xn3DLaikjD3WX3JPM5EUvhcLb7g2g39CnDwHyjpwn43UrvCwV6KxF4-5JOFrk3vjQA5VT6q这个选项我知道。但问题在于:我把max_allowed_packet设为4M,但实际上能上传的文件大小为2M。。。加大  max_allowed_packet这个参数的值这个选项我知道。但问题在于:我把max_allowed_packet设为4M,但实际上能上传的文件大小为2M。。为啥不用base64编码的呢.啥意思? 重新配置下jdbc看看效果如何。 http://www.oschina.net/question/100896_93181?sort=default&p=2#answers 怀疑你设置了,但是放错了位置没生效,另外需要重启。 解决方法,在my.ini里的[mysqld]增加如下部分[mysqld]max_allowed_packet=64M注意,在[client]和[mysql]部分增加无效,那个是客户端读取的参数。

爱吃鱼的程序员 2020-06-22 17:25:19 0 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

问题

DingTalkDemo 52013

酱油乐土 2019-12-01 21:15:26 4545 浏览量 回答数 4

回答

楼主业余菜鸟一个,上次问问题临时用新浪账号注册了这个网,这段时间偶然发现一个朋友加我QQ才知道还有朋友需要详细解答,废话不多说,上代码,支持中文的mybase64.js与修改后的tableExport.js,这个地方篇幅有限制,看博文吧,为了你们第一次写~http://my.oschina.net/MiloFriends/blog/466707###### 已自行解决,经查阅资料了解 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法,而且base64特别适合在http,mime协议下快速传输数据。 因此通过修改base64编码可以解决相关问题,至于修改的方法网上很多~ 第一次提问,没想到自己先解决了,看来难度不大,所以才没人提吧,还是先自己研究最靠谱~自问自答了 ######导出excel没有后缀,遇到过这个问题吗######怎么修改的,求助攻。。###### 用这个插件开始是中文没数据,将页面HTML中的要打印的table字符串(这个table是js拼接后插入到div的 )编码换成unicode码后,不在jquery.base64.js中的 _getbyte方法那报 throw "INVALID_CHARACTER_ERR: DOM Exception 5";这个异常了,能出来excel,但是没有数据,求教######怎么修改的,急求啊,我想了很多办法都没实现,就是不能导出中文######急切需要知道,有没有人知道怎么导出中文啊###### 楼主为啥不说啊 ,别卖关子啊 ######我把你修改的两个js引进去之后 ,可以成功导出excel,但是pdf的话 ,就报错: 渲染页面时发生错误。 PDF.js v1.0.1149 (build: bc7a110),楼主好人做到底吧,这个怎么解决啊? ######我把你修改的两个js引进去之后 ,可以成功导出excel,但是pdf的话 ,就报错: 渲染页面时发生错误。 PDF.js v1.0.1149 (build: bc7a110),楼主好人做到底吧,这个怎么解决啊? 很急。。。跪求。。。 ######<button class="btn btn-success" onClick ="$('#tablepnf').tableExport({type: 'pdf', escape: 'false'});">CSV Export</button>  table的边框线条不显示,中文乱码,怎么解决啊 ,跪求大神解答。。。

montos 2020-05-31 10:16:33 0 浏览量 回答数 0

回答

楼主业余菜鸟一个,上次问问题临时用新浪账号注册了这个网,这段时间偶然发现一个朋友加我QQ才知道还有朋友需要详细解答,废话不多说,上代码,支持中文的mybase64.js与修改后的tableExport.js,这个地方篇幅有限制,看博文吧,为了你们第一次写~http://my.oschina.net/MiloFriends/blog/466707###### 已自行解决,经查阅资料了解 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法,而且base64特别适合在http,mime协议下快速传输数据。 因此通过修改base64编码可以解决相关问题,至于修改的方法网上很多~ 第一次提问,没想到自己先解决了,看来难度不大,所以才没人提吧,还是先自己研究最靠谱~自问自答了 ######导出excel没有后缀,遇到过这个问题吗######怎么修改的,求助攻。。###### 用这个插件开始是中文没数据,将页面HTML中的要打印的table字符串(这个table是js拼接后插入到div的 )编码换成unicode码后,不在jquery.base64.js中的 _getbyte方法那报 throw "INVALID_CHARACTER_ERR: DOM Exception 5";这个异常了,能出来excel,但是没有数据,求教######怎么修改的,急求啊,我想了很多办法都没实现,就是不能导出中文######急切需要知道,有没有人知道怎么导出中文啊###### 楼主为啥不说啊 ,别卖关子啊 ######我把你修改的两个js引进去之后 ,可以成功导出excel,但是pdf的话 ,就报错: 渲染页面时发生错误。 PDF.js v1.0.1149 (build: bc7a110),楼主好人做到底吧,这个怎么解决啊? ######我把你修改的两个js引进去之后 ,可以成功导出excel,但是pdf的话 ,就报错: 渲染页面时发生错误。 PDF.js v1.0.1149 (build: bc7a110),楼主好人做到底吧,这个怎么解决啊? 很急。。。跪求。。。 ######<button class="btn btn-success" onClick ="$('#tablepnf').tableExport({type: 'pdf', escape: 'false'});">CSV Export</button>  table的边框线条不显示,中文乱码,怎么解决啊 ,跪求大神解答。。。

kun坤 2020-06-07 00:08:21 0 浏览量 回答数 0

回答

楼主业余菜鸟一个,上次问问题临时用新浪账号注册了这个网,这段时间偶然发现一个朋友加我QQ才知道还有朋友需要详细解答,废话不多说,上代码,支持中文的mybase64.js与修改后的tableExport.js,这个地方篇幅有限制,看博文吧,为了你们第一次写~http://my.oschina.net/MiloFriends/blog/466707###### 已自行解决,经查阅资料了解 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法,而且base64特别适合在http,mime协议下快速传输数据。 因此通过修改base64编码可以解决相关问题,至于修改的方法网上很多~ 第一次提问,没想到自己先解决了,看来难度不大,所以才没人提吧,还是先自己研究最靠谱~自问自答了 ######导出excel没有后缀,遇到过这个问题吗######怎么修改的,求助攻。。######用这个插件开始是中文没数据,将页面HTML中的要打印的table字符串(这个table是js拼接后插入到div的 )编码换成unicode码后,不在jquery.base64.js中的 _getbyte方法那报 throw "INVALID_CHARACTER_ERR: DOM Exception 5";这个异常了,能出来excel,但是没有数据,求教######怎么修改的,急求啊,我想了很多办法都没实现,就是不能导出中文######急切需要知道,有没有人知道怎么导出中文啊######楼主为啥不说啊 ,别卖关子啊 ######我把你修改的两个js引进去之后 ,可以成功导出excel,但是pdf的话 ,就报错: 渲染页面时发生错误。 PDF.js v1.0.1149 (build: bc7a110),楼主好人做到底吧,这个怎么解决啊? ######我把你修改的两个js引进去之后 ,可以成功导出excel,但是pdf的话 ,就报错: 渲染页面时发生错误。 PDF.js v1.0.1149 (build: bc7a110),楼主好人做到底吧,这个怎么解决啊? 很急。。。跪求。。。 ######<button class="btn btn-success" onClick ="$('#tablepnf').tableExport({type: 'pdf', escape: 'false'});">CSV Export</button>  table的边框线条不显示,中文乱码,怎么解决啊 ,跪求大神解答。。。

kun坤 2020-05-28 16:14:06 0 浏览量 回答数 0

回答

java.io.Reader 和 java.io.InputStream 组成了Java 输入类。Reader 用于读入16位字符,也就是Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。 Reader支持16位的Unicode字符输出,InputStream支持8位的字符输出。 Reader和InputStream分别是I/O库提供的两套平行独立的等级机构, ###### 1. 有 1000w 的数据,我的话用缓存了,例如 Redis,Memcached,是不是用 HashMap 或者 HashTable 都是找抽型? 2. InputStream 是针对二进制读取,即针对字节,Reader 是针对字符读取(例如有的一个字符实际站占用的是 3 个字节,但是对 Reader 的接口来说,只是一个字符) ######最他妈反感提了问题不给答案的面试官,装高深,其实这些玩意起先不懂都没关系,上网一查就懂了,面试的人怕的不是他了解得不够,而是不肯学######直接问你 HashTable 和Hashmap 又啥区别就是了嘛  绕一大圈。。真够装的~~######那HashTable真的可以避免大量的Key碰撞吗?######大量数据保存这个有没说是单线程环境下还是多线程环境下的呢?多线程环境下, HashTable确实是好的选择,因为其同步。单线程环境下的话,明显要选HashMap吧,并且单线程环境下会存在碰撞吗?这个我就没仔细研究过。###### 1 、HashMap对于大数据量的rehash等操作可能导致CPU过高,性能降低。HashTable散列算法比hashmap简单,但是线程安全。但是两个对大数据都没有什么优势。 2、字节和字符 ######面试官估计也是个半吊子。hashmap采用的是线性表加链表进行数据存储,虽然 hashcode可能会碰撞,但只要保证key的equals方法不误判就没有问题了。第二个问题reader是字符读取,它在底层持有一个Inputstream,通过缓存InputStream读取的字节数据并将字节进行编码以字符流的形式返回给你。###### 要求保存到 HashMap(不是Map?),面试官的答案却又是Hashtable。 ######嗯,是的 给我的感觉是,他挖了一个坑,想知道我是否知道能把它处理掉######一语道破天机######我也是这个感觉,就像面试官问,你上厕所是有左手还是用右用擦屁股,结果他的答案是用纸。。。###### hashtable可以避免 Key 大量碰撞的问题 不是###### 数据里有相同的key,那么碰撞就是客观存在的。 避免碰撞就使用key可以重复的容器, 大数据量可以使用MongoDB等

kun坤 2020-06-07 21:48:13 0 浏览量 回答数 0

回答

最好能统一把问题理好,再发邮件过去。否则,还是私下沟通更好。毕竟连续的几封邮件,人家老板以为出了什么大事呢。影响不好。######我的工作就是帮助他们完善接口,即使他们的接口烂得一塌糊涂也无所谓+1。###### 要是提供的接口服务里有BUG,还这种语气,的确有些不对了。 可对方说“方案无异议”,你说“对方提供的数据有缺少项目” ,这个感觉里面有内容啊 ######要通过统一的正式的流程走吧,你这今天提一个,明天提一个,确实不太好。你汇总一下,一起发过去,最好通过公司接口人######我的工作就是帮助他们完善接口,即使他们的接口烂得一塌糊涂也无所谓。######当对方接口正确来编码,后续出问题,你只要提供正确的调用参数日志,出啥问题都没你事######嘛蛋这是变相给他们测试接口吗,一次两次就算了,如果问题太多,打得他妈妈都不认识######沟通方法错了。应该是先非正式沟通(电话),以求达成一致意见,再正式沟通(邮件)记录问题,走下一步流程。######大仙来了。###### 你是有没用过中国淫联的sdk吧,那个才叫恶心 ######有问题一次性说完,陆陆续续发三个邮件这不是存心让别人过不去?######回复 @庄煌炜 : 总好过你什么建议都没给上来就SB######回复 @喜爱糖葫芦 : 这个SB @不日小鸡 确实说话,让人反感~######回复 @喜爱糖葫芦 : 请看我楼下两层给出的答案######怎么没关系,他改完代码,结果改完代码又出问题了,难道我不应该提么。######回复 @喜爱糖葫芦 : 这跟代码没有关系,这是做事方式的问题######码农何必为难码农,你这是一直为难对方的码农啊,你发现一个提交一个,为啥不一次性整理完? 一次性处理? 难道是你反映的他们没能处理好?######按常理,应该一并提交,有些代码质量实在太差的,一个bug过不去,后面没法玩了,这种就必须严厉的指出问题,耽误进度######如果第一个bug没解决不能往下进行怎么办?如果他们修改完一个bug后又出现了新的bug怎么办?您是怎么把引起的新bug和之前的bug一起提交的?######我觉得还是整理一下一起提出,最好先qq私聊沟通一下。

kun坤 2020-06-08 18:00:53 0 浏览量 回答数 0

回答

这个问题虽然只有两个2个动作:输入URL和呈现页面,但这背后发生了很多"有趣"的事情,这个过程也涉及到很多方面的技术,包括像浏览器、DNS、http、html、服务器等。如果让我来回答,它大致的过程应该是这样的:DNS解析-->建立连接,发送数据包 -->服务器响应请求,返回给浏览器-->浏览器渲染程序页面。 1.DNS解析 当我搜索这个问题的时候,首先在浏览器输入了一个URL地址,但URL中服务器地址是一个域名而不是一个指定的IP地址,路由器并不知道你想要查找的地址,那么DNS域名解析系统会将该域名解析成ip,而IP地址是唯一的, 每一个ip地址对应网络上的一台计算机 2.建立网络连接,发送数据包 由于1的努力,已经能够根据ip和端口号与网络上对应的服务器建立连接,浏览器这边会向服务器发送一个数据包,里面包含了大量的信息,但这个数据包有一定的格式。就像我给你邮个快递,也得遵循邮递公司的一些规则吧!我得写上我的身份信息、寄的物品、标明邮递地址....道理是一样的,到了网络中这些规则就是“Http协议(网络协议)”。 3.服务器响应请求,返回给浏览器 服务器会分解你的数据包,例如你查找的是一个文档,那么服务器可能会返回一个doc文档或者zip压缩资源给你;如果你访问的是一个链接页面,那么服务器相应的返回一个包含HTML/CSS标记文档,这些请求和响应都有一个通用的写法,这些规则也就是前面提到的"http协议"。客户端向服务器请求资源时,除了告诉服务器要请求的资源,同时还会附带一些其他的信息,这部分信息放在"header"部分(服务器响应请求也一样!),主要有请求头(略)和响应头, http响应头详解: Request URL:https://static.zhihu.com/static/revved/-/css/m.652b53b3.css Request Method:GET Status Code:200 OK (from cache) Remote Address:123.125.110.16:443 Response Headers accept-ranges:bytes //在整个返回体中本部分的字节位置 access-control-allow-origin://跨域请求,则允许所有域名的脚本访问该资源。 cache-control:max-age=600 //指定请求和响应遵循的缓存机制,当你请求头里设置no-cache时,是告诉服务器我这里没有缓存。响应头里这里设置的时间是600,意思浏览器600秒之内别来找我,自己去缓存找吧! content-encoding:gzip // web服务器支持的返回内容压缩编码类型为gzip,web服务器表明自己使用了什么压缩方法。 content-length:49207 //资源长度 content-type:text/css //告诉客户端,资源文件的类型,一般还有字符编码,例如charset=UTF-8,客户端将通过utf-8对资源进行解码,然后对资源进行html解析。 date:Mon, 07 Mar 2016 12:23:37 GMT//记录时间 expires:Mon, 07 Mar 2016 12:33:37 GMT //表明该实体将于什么时候过期 last-modified:Mon, 07 Mar 2016 07:19:19 GMT//请求资源的最后修改时间 server:nnws/1.7.3.6 //服务器信息,by the way!这是啥服务器? status:200 OK //状态码 version:HTTP/1.1 //http协议版本1.1 x-cache-lookup:Hit From MemCache Gz //查看服务器中是否有某个网页缓存,有则返回Hit,没有返回Miss看到http响应状态码我突然想到了404,= =!顺便带几个常见的: 100 Continue 继续,一般在发送post请求时,已发送了http、header之后服务端将返回此信息,表示确认,之后发送具体参数信息 200 OK 正常返回信息 201 Created 请求成功并且服务器创建了新的资源 301 Moved Permanently 请求的网页已永久移动到新位置。 400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。 404 Not Found 找不到如何与 URI 相匹配的资源。 500 Internal Server Error 最常见的服务器端错误。4.浏览器渲染呈现 浏览器拿到响应的页面代码,将其解析呈现在用户面前,至于为什么会是看到的这个样子,有时又是另外的一些页面效果,这里就涉及到web标准了,也就是我们经常提到的w3c标准。根据资源的类型,在网页上呈现给用户,这个过程叫网页渲染。解析和呈现的过程主要由浏览器的渲染引擎实现,浏览器的渲染引擎质量就决定了浏览器的好坏(引擎这一块已经超出了我的理解范围了)。

a123456678 2019-12-02 02:08:40 0 浏览量 回答数 0

回答

引用来自“hanzhankang”的答案 那地址是:http://111.186.100.77:8080/Wireless_Server/servelet/Updateservelet 不过http://111.186.100.77:8080  你这个像是外网地址,你确定正确能访问? 我把从网络读取的数据流转化字符串,用的方法是: int b; StringBuffer sb = new StringBuffer(); while((b = in.read())!=-1 ){ sb.append((char)b); } System.out.println(sb); 打印出来: 10-20 10:47:26.079: I/System.out(32577): <?xml version="1.0" encoding="utf-8"?> 10-20 10:47:26.079: I/System.out(995): <menulist> 10-20 10:47:26.079: I/System.out(995): <> 10-20 10:47:26.079: I/System.out(995): <menu> 10-20 10:47:26.089: I/System.out(995): <id>1</id> 10-20 10:47:26.089: I/System.out(995): <name>宫ä¿é¸¡ä¸</name> 10-20 10:47:26.089: I/System.out(995): </menu> 10-20 10:47:26.089: I/System.out(995): <menu> 10-20 10:47:26.089: I/System.out(995): <id>2</id> 10-20 10:47:26.089: I/System.out(995): <name>é¦è¾£åè±ä¸</name> 10-20 10:47:26.089: I/System.out(995): </menu> 10-20 10:47:26.089: I/System.out(995): <menu> 10-20 10:47:26.089: I/System.out(995): <id>3</id> 10-20 10:47:26.089: I/System.out(995): <name>çè¾ä»</name> 10-20 10:47:26.089: I/System.out(995): </menu> 10-20 10:47:26.089: I/System.out(995): <menu> 10-20 10:47:26.089: I/System.out(995): <id>4</id> 10-20 10:47:26.089: I/System.out(995): <name>åæ¤éé¾é±¼</name> 10-20 10:47:26.099: I/System.out(995): </menu> 10-20 10:47:26.099: I/System.out(995): <menu> 10-20 10:47:26.099: I/System.out(995): <id>5</id> 10-20 10:47:26.099: I/System.out(995): <name>红ç§è</name> 10-20 10:47:26.099: I/System.out(995): </menu> 10-20 10:47:26.099: I/System.out(995): <menu> 10-20 10:47:26.099: I/System.out(995): <id>6</id> 10-20 10:47:26.099: I/System.out(995): <name>æé³ä¸åè</name> 10-20 10:47:26.099: I/System.out(995): </menu> 10-20 10:47:26.099: I/System.out(995): </menulist> 这就证明读取到了网络的xml,但是解析的时候出来问题。 接着我在本地的assets文件夹里写了一个xml文件: <?xml version="1.0" encoding="utf-8"?> <menulist> <menu> <id>1</id> <name>张三</name> </menu> <menu> <id>2</id> <name>李四</name> </menu> <menu> <id>3</id> <name>王五</name> </menu> <menu> <id>4</id> <name>高小小</name> </menu> <menu> <id>5</id> <name>李大大</name> </menu> <menu> <id>6</id> <name>郭剩剩</name> </menu> </menulist> 用同样的解析方法,可以解析出来,并且保存到SQLite数据表中。 这样看来是不是因为网络读取的xml文件格式有问题,所以导致的解析错误呢? 因为网络的xml是根据服务器的数据库文件自动生成的,所以到底该怎么弄呢?我没思路了又 ######回复 @hanzhankang : 最后发现就是空尖括号的错误,多谢多谢啦!!######回复 @skywxx : 估计是编码问题了,那个应该也不影响,判断一个xml文件正确的方法是用浏览器能不能正确打开不报错。 编码问题比较好解决,可以通过设置 过滤器 或者在读取的时候、放送的时候设置,这方面的资料网上很多的。######回复 @hanzhankang : 我也不知道为什么有<>因为服务器端的xml文件是根据数据库中表里的数据产生的,<>怎么产生的我也很纳闷。编码问题?应该是在数据库端的响应中设置,是吧?######估计是你的编码有问题,系统无法解析,就出现异常了吧、######首先你要把获取来的内容输出(记得统一编码格式),再根据内容解析出来数据。你要确保输出的内容符合xml编码规范。第三行为啥还有个“<>”?我看错了?######你先用浏览器看看能不能访问: http://111.186.100.77:8080/Wireless_Serverservelet/UpdataServelet######可以访问,说明,不会出现获取服务器数据被封的情况吧?######是可以访问的###### String urlStr = HttpUtil.BASE_URL + "servelet/UpdataServelet"; 和 http://111.186.100.77:8080/Wireless_Serverservelet/UpdataServelet 比起来,是不是多了个“servelet/”??? ######我定义的 BASE_URL 是:public static final String BASE_URL = "http://111.186.100.77:8080/Wireless_Server",然后加上后边的servelet/Updateservelet###### http://111.186.100.77:8080/Wireless_Server/Updateservelet 是你想访问的地址还是 http://111.186.100.77:8080/Wireless_Server/servelet/Updateservelet ######你最后把访问的 全网站打印出来,便于分析。######回复 @skywxx : 这个不是看你在哪个文件夹下的,而是看你在web.xml文件件下的配置,你把配置贴出来看看。######我改成http://111.186.100.77:8080/Wireless_Server/Updateservelet,还是报相同的错误.Updateservelet.java是在Servelet文件夹下的,所以我前边加了一个Servelet###### 引用来自“hanzhankang”的答案 http://111.186.100.77:8080/Wireless_Server/Updateservelet 是你想访问的地址还是 http://111.186.100.77:8080/Wireless_Server/servelet/Updateservelet <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.wang.servlet.LoginServlet</servlet-class> </servlet> <servlet> <servlet-name>PayMoneyServlet</servlet-name> <servlet-class>com.wang.servlet.PayMoneyServlet</servlet-class> </servlet> <servlet> <servlet-name>PayServlet</servlet-name> <servlet-class>com.wang.servlet.PayServlet</servlet-class> </servlet> <servlet> <servlet-name>UpdateServlet</servlet-name> <servlet-class>com.wang.servlet.UpdateServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/servlet/LoginServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>PayMoneyServlet</servlet-name> <url-pattern>/servlet/PayMoneyServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>PayServlet</servlet-name> <url-pattern>/servlet/PayServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>UpdateServlet</servlet-name> <url-pattern>/servlet/UpdateServlet</url-pattern> </servlet-mapping> <filter> <filter-name>EF</filter-name> <filter-class>com.wang.filter.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>EF</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> web.xml是这样的,昨天整程序整的晕得连汉语意思都看不懂了,你看看我这里边UpdateServlet ###### 那地址是:http://111.186.100.77:8080/Wireless_Server/servelet/Updateservelet 不过http://111.186.100.77:8080  你这个像是外网地址,你确定正确能访问? ######回复 @hanzhankang : 今天我换了一个思路,现在本地文件夹assets中写了一个xml,然后解析这个,程序是可以正常运行的,这就证明解析方法没错。那怎样看一下是不是读取过来数据 呢?######回复 @skywxx : 既然获取了数据,你就好好解析结果,dom,sax都无所谓的,网上也有代码,很好找的!xml,json数据格式最好都尝试一下,这些都是很实用的!######回复 @hanzhankang : 我try/catch异常,现在报了这个异常,好像是SAX解析的异常,但是我用的是DOM解析啊,这是什么原因呢?org.xml.sax.SAXParseException: name expected (position:START_TAG <null>@3:2 in java.io.InputStreamReader@411cce48)######回复 @skywxx : 我想你做了这个例子就知道原理是什么了,你的方法已经很好了,其他的方法也是对原始方法的封装!######关于android 手机端与服务器端数据传递的各种形式,你是怎么学习的啊?有没有好书推荐?

kun坤 2020-06-07 14:36:53 0 浏览量 回答数 0

回答

Java基本类型及其包装有哪些? Java基本类型-整数类型byte、short、int和long byte:字节型;short:短整型;int:整型;long:长整型。 刚开始学习时有种疑惑,为啥弄这么多整数类型? 从字节型到长整型,整数的范围总是在不断增加,不够用了自然就要扩展范围,添加新的类型;若范围小的整数浪费空间太多,又会影响程序,所以在使用时就有了类型供我们选择。 Java基本类型-- 浮点型float和double https://developer.aliyun.com/ask/280806 Java基本类型-字符型char Java采用的是Unicode编码格式,字符类型的变量不仅可以接收单字符常量,还可以接收0~65535之间的整数。 转义字符表(有些特殊含义的字符需要通过\来协助) Java基本类型-布尔型boolean Java中的布尔型只表示字面true和false,不同C++之处,如果将一个整数值赋值给布尔类型变量,编译器将报错。 Java基本类型- Java常量默认类型有哪些? 在Java中整型常量默认int类型,如果想要使用long类型常量,需要在常量后添加L/l字符,例如:15L 浮点数默认为double类型,如果想要float类型需要添加F/f,例如:3.14F Java基本类型-- 基本类型的范围包括哪些? 我们可以利用基本类型的包装类中的关键字MAX_VALUE和MIN_VALUE,打印出基本类型的范围。 public class PrintRange { public static void main(String[] args) { System.out.println("byte: "+Byte.MIN_VALUE+" ~ "+Byte.MAX_VALUE); System.out.println("short: "+Short.MIN_VALUE+" ~ "+Short.MAX_VALUE); System.out.println("int: "+Integer.MIN_VALUE+" ~ "+Integer.MAX_VALUE); System.out.println("long: "+Long.MIN_VALUE+" ~ "+Long.MAX_VALUE); System.out.println("float: "+Float.MIN_VALUE+" ~ "+Float.MAX_VALUE); System.out.println("double: "+Double.9+" ~ "+Double.MAX_VALUE); System.out.println("char: "+Character.MIN_VALUE+" ~ "+Character.MAX_VALUE); } } Java基本类型-基本类型间的相互转换- 隐式转换、显式转化 隐式转换 范围小的类型可以自动转换为范围大的类型,大范围类型能容纳小范围类型(也称显示转换为扩展转换)这些转换都是兼容的。 显式转换 大的范围转换为小范围类型,会造成信息丢失(也称隐式转换为窄化转换),不兼容性转换。如图,利用类型转换操作符(cast)进行显示转换。 浮点数转换为整数的小数问题 float和double类型转换为整数时,总是舍去小数点后面的部分,称此行为为截尾。 如果对小数点后面的部分进行四舍五入,即舍入操作,需要利用java.lang.Math中的round()方法 Java基本类型-基本类型和包装类之间的转换- 自动装箱和拆箱 Java5出现的特性,基本类型和封装类之间可以进行自动拆箱和装箱进行类型转换(由基类转换为包装类)。 ** 包装类中还包含很多将包装类装换为其他基类的接口,详细的可以查看Java API文档** java基本类型-- 基本类型和String类型之间的转换 在我们进行Java GUI界面开发时,通常会获取文本输入框的值,这就可能涉及到String类型转换为基本类型的问题。 public class PrintRange { public static void main(String[] args) { //基类转换为String类型 int a = 125; String s = String.valueOf(a); //String类型转换为基类 a = Integer.parseInt(s); } } String转换为基类利用的是基类对应包装类的parse···方法,基类转换字符串用的是String类中的valueOf方法,这些在Java API中都有介绍。 Java基本类型作为方法参数传递中的转换

问问小秘 2020-03-30 14:41:23 0 浏览量 回答数 0

回答

方法里写的是啥内容回复<aclass='referer'target='_blank'>@快速开发师:可能我接触的场景基本没有太多重复编码工作吧,感觉理解不到这个技巧要解决什么问题;-P。每个项目里自己根据特定的项目预先定义各自的代码,我只不过提出了一种批量替换的可行方案;回复<aclass='referer'target='_blank'>@快速开发师:不是很明白,每个项目代码都不同,我这里怎么统一写内容呢?你自己写的什么就是什么 http://www.eova.cn/ 别人做的系统,可能这样举例就比较容易明白。 我一般遇到大量重复工作都做成可配置的组建,自动生产出功能,至今没遇到需要生产代码的场景。回复<aclass='referer'target='_blank'>@快速开发师:我说的自定义组件范围很广,刚才就用你的做了一个自定义组建<divsidxxx><p>helloworld</p></div>回复<aclass='referer'target='_blank'>@乌龟壳:麻烦,拜托,我不需要自定义组件,也不要把我写的跟跟那什么非要集成他的类似于这种1:publicclassMyControl:Control2:{...7:}相比,我只是拖拽容器,容器里放的是什么是什么,我最讨厌的就是这种强迫行为。回复<aclass='referer'target='_blank'>@快速开发师:我并非否认你的工作成果,只是觉得这个世界是守恒的,快速开发的前提是有人帮你做了铺垫,如果从整体上来看,其实无论那种方式工作量都必须存在的。所以要快速开发除了不要制造负面障碍,如很多java框架特别是ORM徒增开发复杂度,就是帮别人多写点代码,写得越多(越对)别人开发越快。至于生成代码还是做成组件还是不讨论了吧。回复<aclass='referer'target='_blank'>@快速开发师:不知道你用过VisualStudio没有,你做的是它的子集,包括你强调的自定义控件。另外拖拽和生成代码还是生成配置,完全是不相干的事情,拖拽是拖拽,生成什么是后面转化的事。由于你只写了几百行不到的代码,所以功能有限,只是在某一方面可以做到快速制作界面(因为你预先做好了那些代码),其它方面比如设计一个门户网站,拖拽并不能降低工作量。感觉我们偏题了~~~回复<aclass='referer'target='_blank'>@乌龟壳:跟你解析一下,我这个拖拽,只是拖,任何代码放进去就可以了,拖拽跟你何种组件没多大关系。面向接口编程非也,是面向人脑编程,就是”copy改“省了很多copy步骤,把需要copy的代码预先定义到代码里等待被替换,替换就是改,改个名字而已。

爱吃鱼的程序员 2020-06-09 13:53:15 0 浏览量 回答数 0

问题

哈希表 7月10日 【今日算法】

游客ih62co2qqq5ww 2020-07-11 07:14:35 6 浏览量 回答数 1

问题

如何彻底消灭Bug?

问问小秘 2020-06-29 11:07:58 13 浏览量 回答数 2

问题

SSH面试题

琴瑟 2019-12-01 21:46:22 3489 浏览量 回答数 0

问题

从一道面试题谈谈一线大厂码农应该具备的基本能力 7月16日 【今日算法】

游客ih62co2qqq5ww 2020-07-22 13:45:47 118 浏览量 回答数 1

回答

PHP面试干货 1、进程和线程 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于: 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。 2、apache默认使用进程管理还是线程管理?如何判断并设置最大连接数? 一个进程可以开多个线程 默认是进程管理 默认有一个主进程 Linux: ps -aux | grep httpd | more 一个子进程代表一个用户的连接 Conf/extra/httpd-mpm.conf 多路功能模块 http -l 查询当前apache处于什么模式下 3、单例模式 单例模式需求:只能实例化产生一个对象 如何实现: 私有化构造函数 禁止克隆对象 提供一个访问这个实例的公共的静态方法(通常为getInstance方法),从而返回唯一对象 需要一个保存类的静态属性 class demo { private static $MyObject; //保存对象的静态属性 private function __construct(){ //私有化构造函数 } private function __clone(){ //禁止克隆 } public static function getInstance(){ if(! (self::$MyObject instanceof self)){ self::$MyObject = new self; } return self::$MyObject; } } 4、安装完Apache后,在http.conf中配置加载PHP文件以Apache模块的方式安装PHP,在文件http.conf中首先要用语句LoadModule php5_module "e:/php/php5apache2.dll"动态装载PHP模块,然后再用语句AddType application/x-httpd-php .php 使得Apache把所有扩展名为PHP的文件都作为PHP脚本处理 5、debug_backtrace()函数能返回脚本里的任意行中调用的函数的名称。该函数同时还经常被用在调试中,用来判断错误是如何发生的 function one($str1, $str2) { two("Glenn", "Quagmire"); } function two($str1, $str2) { three("Cleveland", "Brown"); } function three($str1, $str2) { print_r(debug_backtrace()); } one("Peter", "Griffin"); Array ( [0] => Array ( [file] => D:\www\test\result.php [line] => 9 [function] => three [args] => Array ( [0] => Cleveland [1] => Brown ) ) [1] => Array ( [file] => D:\www\test\result.php [line] => 5 [function] => two [args] => Array ( [0] => Glenn [1] => Quagmire ) ) [2] => Array ( [file] => D:\www\test\result.php [line] => 16 [function] => one [args] => Array ( [0] => Peter [1] => Griffin ) ) ) 6、输出用户的IP地址,并且判断用户的IP地址是否在192.168.1.100 — 192.168.1.150之间 echo $ip=getenv('REMOTE_ADDR'); $ip=str_replace('.','',$ip); if($ip<1921681150 && $ip>1921681100) { echo 'ip在192.168.1.100—–192.168.1.150之间'; } else { echo 'ip不在192.168.1.100—–192.168.1.150之间'; } 7、请将2维数组按照name的长度进行重新排序,按照顺序将id赋值 $tarray = array( array('id' => 0, 'name' => '123'), array('id' => 0, 'name' => '1234'), array('id' => 0, 'name' => '1235'), array('id' => 0, 'name' => '12356'), array('id' => 0, 'name' => '123abc') ); foreach($tarray as $key=>$val) { $c[]=$val['name']; } function aa($a,$b) { if(strlen($a)==strlen($b)) return 0; return strlen($a)>strlen($b)?-1:1; } usort($c,'aa'); $len=count($c); for($i=0;$i<$len;$i++) { $t[$i]['id']=$i+1; $t[$i]['name']=$c[$i]; } print_r($t); 8、表单数据提交方式POST和GET的区别,URL地址传递的数据最大长度是多少? POST方式提交数据用户不可见,是数据更安全,最大长度不受限制,而GET方式传值在URL地址可以看到,相对不安全,对大长度是2048字节。 9、SESSION和COOKIE的作用和区别,SESSION信息的存储方式,如何进行遍历 SESSION和COOKIE都能够使值在页面之间进行传递,SESSION存储在服务器端,数据更安全,COOKIE保存在客户端,用户使用手段可以进行修改,SESSION依赖于COOKIE进行传递的。Session遍历使用$_SESSION[]取值,cookie遍历使用$_COOKIE[]取值。 10、什么是数据库索引,主键索引,唯一索引的区别,索引的缺点是什么 索引用来快速地寻找那些具有特定值的记录。 主键索引和唯一索引的区别:主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”,每个表只能有一个主键。唯一索引索引列的所有值都只能出现一次,即必须唯一。 索引的缺点: 1、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 2、索引需要占用物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,需要的空间就会更大。 3、当对表中的数据进行增加、删除、修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 11、数据库设计时,常遇到的性能瓶颈有哪些,常有的解决方案 瓶颈主要有: 1、磁盘搜索 优化方法是:将数据分布在多个磁盘上 2、磁盘读/写 优化方法是:从多个磁盘并行读写。 3、CPU周期 优化方法:扩充内存 4、内存带宽 12、include和require区别 include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码。 require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码。 13、文件上传时设计到点 和文件上传有关的php.ini配置选项(File Uploads): file_uploads=On/Off:文件是否允许上传 upload_max_filesize上传文件时,单个文件的最大大小 post_max_size:提交表单时,整个post表单的最大大小 max_file_uploads =20上传文件的个数 内存占用,脚本最大执行时间也间接影响到文件的上传 14、header常见状态 //200 正常状态 header('HTTP/1.1 200 OK'); // 301 永久重定向,记得在后面要加重定向地址 Location:$url header('HTTP/1.1 301 Moved Permanently'); // 重定向,其实就是302 暂时重定向 header('Location: http://www.maiyoule.com/'); // 设置页面304 没有修改 header('HTTP/1.1 304 Not Modified'); // 显示登录框, header('HTTP/1.1 401 Unauthorized'); header('WWW-Authenticate: Basic realm="登录信息"'); echo '显示的信息!'; // 403 禁止访问 header('HTTP/1.1 403 Forbidden'); // 404 错误 header('HTTP/1.1 404 Not Found'); // 500 服务器错误 header('HTTP/1.1 500 Internal Server Error'); // 3秒后重定向指定地址(也就是刷新到新页面与 <meta http-equiv="refresh" content="10;http://www.maiyoule.com/ /> 相同) header('Refresh: 3; url=http://www.maiyoule.com/'); echo '10后跳转到http://www.maiyoule.com'; // 重写 X-Powered-By 值 header('X-Powered-By: PHP/5.3.0'); header('X-Powered-By: Brain/0.6b'); //设置上下文语言 header('Content-language: en'); // 设置页面最后修改时间(多用于防缓存) $time = time() - 60; //建议使用filetime函数来设置页面缓存时间 header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT'); // 设置内容长度 header('Content-Length: 39344'); // 设置头文件类型,可以用于流文件或者文件下载 header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="example.zip"'); header('Content-Transfer-Encoding: binary'); readfile('example.zip');//读取文件到客户端 //禁用页面缓存 header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Pragma: no-cache'); //设置页面头信息 header('Content-Type: text/html; charset=iso-8859-1'); header('Content-Type: text/html; charset=utf-8'); header('Content-Type: text/plain'); header('Content-Type: image/jpeg'); header('Content-Type: application/zip'); header('Content-Type: application/pdf'); header('Content-Type: audio/mpeg'); header('Content-Type: application/x-shockwave-flash'); //.... 至于Content-Type 的值 可以去查查 w3c 的文档库,那里很丰富 15、ORM和ActiveRecord ORM:object relation mapping,即对象关系映射,简单的说就是对象模型和关系模型的一种映射。为什么要有这么一个映射?很简单,因为现在的开发语言基本都是oop的,但是传统的数据库却是关系型的。为了可以靠贴近面向对象开发,我们想要像操作对象一样操作数据库。还可以隔离底层数据库层,我们不需要关心我们使用的是mysql还是其他的关系型数据库 ActiveRecord也属于ORM层,由Rails最早提出,遵循标准的ORM模型:表映射到记录,记录映射到对象,字段映射到对象属性。配合遵循的命名和配置惯例,能够很大程度的快速实现模型的操作,而且简洁易懂。 ActiveRecord的主要思想是: 1. 每一个数据库表对应创建一个类,类的每一个对象实例对应于数据库中表的一行记录;通常表的每个字段在类中都有相应的Field; 2. ActiveRecord同时负责把自己持久化,在ActiveRecord中封装了对数据库的访问,即CURD;; 3. ActiveRecord是一种领域模型(Domain Model),封装了部分业务逻辑; ActiveRecord比较适用于: 1. 业务逻辑比较简单,当你的类基本上和数据库中的表一一对应时, ActiveRecord是非常方便的,即你的业务逻辑大多数是对单表操作; 2. 当发生跨表的操作时, 往往会配合使用事务脚本(Transaction Script),把跨表事务提升到事务脚本中; 3. ActiveRecord最大优点是简单, 直观。 一个类就包括了数据访问和业务逻辑. 如果配合代码生成器使用就更方便了; 这些优点使ActiveRecord特别适合WEB快速开发。 16、斐波那契方法,也就是1 1 2 3 5 8 ……,这里给出两种方法,大家可以对比下,看看哪种快,以及为什么 function fibonacci($n){ if($n == 0){ return 0; } if($n == 1){ return 1; } return fibonacci($n-1)+fibonacci($n-2); } function fibonacci($n){ for($i=0; $i<$n; $i++){ $r[] = $i<2 ? 1 : $r[$i-1]+$r[$i-2]; } return $r[--$i]; } 17、约瑟夫环,也就是常见的数猴子,n只猴子围成一圈,每只猴子下面标了编号,从1开始数起,数到m那么第m只猴子便退出,依次类推,每数到m,那么那个位置的猴子退出,那么最后剩下的猴子下的编号是啥。 function yuesefu($n,$m) { $r=0; for($i=2; $i<=$n; $i++) { $r=($r+$m)%$i; } return $r+1; } 18、冒泡排序,大致是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束 function bubbleSort($arr){ for($i=0, $len=count($arr); $i<$len; $i++){ for($j=0; $j<$len; $j++){ if($arr[$i]<$arr[$j]){ $tmp = $arr[$j]; $arr[$j] = $arr[$i]; $arr[$i] = $tmp; } } } return $arr; } 19、快速排序,也就是找出一个元素(理论上可以随便找一个)作为基准,然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。 function quickSort($arr){ $len = count($arr); if($len <=1){ return $arr; } $key = $arr[0]; $leftArr = $rightArr= array(); for($i=1; $i<$len; $i++){ if($arr[$i] <= $key){ $leftArr[] = $arr[$i]; } else{ $rightArr[] = $arr[$i]; } } $leftArr = quickSort($leftArr); $rightArr = quickSort($rightArr); return array_merge($leftArr, array($key), $rightArr); } 20、(递归的)列出目录下所有文件及目录,这里也有两种方法 function listDir($path){ $res = dir($path); while($file = $res->read()){ if($file == '.' || $file == '..'){ continue; } if(is_dir($path . '/' .$file)){ echo $path . '/' .$file . "\r\n"; listDir($path . '/' .$file); } else{ echo $path . '/' .$file . "\r\n"; } } $res->close(); } function listDir($path){ if(is_dir($path)){ if(FALSE !== ($res = opendir($path))){ while(FALSE !== ($file = readdir($res))){ if($file == '.' || $file == '..'){ continue; } $subPath = $path . '/' . $file; if(is_dir($subPath)){ echo $subPath . "\r\n"; listDir($subPath); } else{ echo $subPath . "\r\n"; } } } } } 21、找出相对的目录,比如/a/b/c/d/e.php相对于/a/b/13/34/c.php是/c/d/ function ralativePath($a, $b){ $a = explode('/', dirname($a)); $b = explode('/', dirname($b)); $c = '/'; foreach ($a as $k=> $v){ if($v != $b[$k]){ $c .= $v . '/'; } } echo $c; } 22、快速找出url中php后缀 function get_ext($url){ $data = parse_url($url); return pathinfo($data['path'], PATHINFO_EXTENSION); } 23、正则题,使用正则抓取网页,以网页meta为utf8为准,若是抓取的网页编码为big5之类的,需要转化为utf8再收录 function preg_meta($meta){ $replacement = "\\1utf8\\6\\7"; $pattern = '#(<meta\s+http-equiv=(\'|"|)Content-Type(\'|"|)\s+content=(\'|"|)text/html; charset=)(\w+)(\'|"|)(>)#i'; return preg_replace($pattern, $replacement, $meta); } echo preg_meta("<meta http-equiv=Content-Type content='text/html; charset=big5'><META http-equiv=\"Content-Type\" content='text/html; charset=big5'>"); 24、不用php的反转函数倒序输出字符串,如abc,反序输出cba function revstring($str){ for($i=strlen($str)-1; $i>=0; $i--){ echo $str{$i}; } } revstring('abc'); 25、常见端口 TCP 21端口:FTP 文件传输服务 SSH 22端口:SSH连接linux服务器,通过SSH连接可以远程管理Linux等设备 TCP 23端口:TELNET 终端仿真服务 TCP 25端口:SMTP 简单邮件传输服务 UDP 53端口:DNS 域名解析服务 TCP 80端口:HTTP 超文本传输服务 TCP 110端口:POP3 “邮局协议版本3”使用的端口 TCP 443端口:HTTPS 加密的超文本传输服务 TCP 1521端口:Oracle数据库服务 TCP 1863端口:MSN Messenger的文件传输功能所使用的端口 TCP 3389端口:Microsoft RDP 微软远程桌面使用的端口 TCP 5631端口:Symantec pcAnywhere 远程控制数据传输时使用的端口 UDP 5632端口:Symantec pcAnywhere 主控端扫描被控端时使用的端口 TCP 5000端口:MS SQL Server使用的端口 UDP 8000端口:腾讯QQ 26、linux常用的命令 top linux进程实时监控 ps 在Linux中是查看进程的命令。ps查看正处于Running的进程 mv 为文件或目录改名或将文件由一个目录移入另一个目录中。 find 查找文件 df 可显示所有文件系统对i节点和磁盘块的使用情况。 cat 打印文件类容 chmod 变更文件或目录的权限 chgrp 文件或目录的权限的掌控以拥有者及所诉群组来管理。可以使用chgrp指令取变更文件与目录所属群组 grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。 wc 为统计指定文件中的字节数、字数、行数,并将统计结果显示输出 27、对于大流量的网站,您采用什么样的方法来解决访问量问题 首先,确认服务器硬件是否足够支持当前的流量 其次,优化数据库访问。 第三,禁止外部的盗链。 第四,控制大文件的下载。 第五,使用不同主机分流主要流量 第六,使用流量分析统计软件 28、$_SERVER常用的字段 $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名 $_SERVER['SERVER_NAME'] #当前运行脚本所在服务器主机的名称 $_SERVER['REQUEST_METHOD'] #访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT” $_SERVER['QUERY_STRING'] #查询(query)的字符串 $_SERVER['HTTP_HOST'] #当前请求的 Host: 头部的内容 $_SERVER['HTTP_REFERER'] #链接到当前页面的前一页面的 URL 地址 $_SERVER['REMOTE_ADDR'] #正在浏览当前页面用户的 IP 地址 $_SERVER['REMOTE_HOST'] #正在浏览当前页面用户的主机名 $_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对路径名 $_SERVER['SCRIPT_NAME'] #包含当前脚本的路径。这在页面需要指向自己时非常有用 $_SERVER['REQUEST_URI'] #访问此页面所需的 URI。例如,“/index.html” 29、安装php扩展 进入扩展的目录 phpize命令得到configure文件 ./configure --with-php-config=/usr/local/php/bin/php-config make & make install 在php.ini中加入扩展名称.so 重启web服务器(nginx/apache) 30、php-fpm与nginx PHP-FPM也是一个第三方的FastCGI进程管理器,它是作为PHP的一个补丁来开发的,在安装的时候也需要和PHP源码一起编译,也就是说PHP-FPM被编译到PHP内核中,因此在处理性能方面更加优秀;同时它在处理高并发方面也比spawn-fcgi引擎好很多,因此,推荐Nginx+PHP/PHP-FPM这个组合对PHP进行解析。 FastCGI 的主要优点是把动态语言和HTTP Server分离开来,所以Nginx与PHP/PHP-FPM经常被部署在不同的服务器上,以分担前端Nginx服务器的压力,使Nginx专一处理静态请求和转发动态请求,而PHP/PHP-FPM服务器专一解析PHP动态请求 #fastcgi FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP。 FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器。这在处理高并发访问时,几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少被使用了。 FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。 Nginx+FastCGI运行原理 Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket,(这个socket可以是文件socket,也可以是ip socket)。为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接纳到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运作过程。 31、ajax全称“Asynchronous Javascript And XML”(异步JavaScript和XML)

小川游鱼 2019-12-02 01:41:29 0 浏览量 回答数 0

回答

PHP面试干货 1、进程和线程 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于: 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。 2、apache默认使用进程管理还是线程管理?如何判断并设置最大连接数? 一个进程可以开多个线程 默认是进程管理 默认有一个主进程 Linux: ps -aux | grep httpd | more 一个子进程代表一个用户的连接 Conf/extra/httpd-mpm.conf 多路功能模块 http -l 查询当前apache处于什么模式下 3、单例模式 单例模式需求:只能实例化产生一个对象 如何实现: 私有化构造函数 禁止克隆对象 提供一个访问这个实例的公共的静态方法(通常为getInstance方法),从而返回唯一对象 需要一个保存类的静态属性 class demo { private static $MyObject; //保存对象的静态属性 private function __construct(){ //私有化构造函数 } private function __clone(){ //禁止克隆 } public static function getInstance(){ if(! (self::$MyObject instanceof self)){ self::$MyObject = new self; } return self::$MyObject; } } 4、安装完Apache后,在http.conf中配置加载PHP文件以Apache模块的方式安装PHP,在文件http.conf中首先要用语句LoadModule php5_module "e:/php/php5apache2.dll"动态装载PHP模块,然后再用语句AddType application/x-httpd-php .php 使得Apache把所有扩展名为PHP的文件都作为PHP脚本处理 5、debug_backtrace()函数能返回脚本里的任意行中调用的函数的名称。该函数同时还经常被用在调试中,用来判断错误是如何发生的 function one($str1, $str2) { two("Glenn", "Quagmire"); } function two($str1, $str2) { three("Cleveland", "Brown"); } function three($str1, $str2) { print_r(debug_backtrace()); } one("Peter", "Griffin"); Array ( [0] => Array ( [file] => D:\www\test\result.php [line] => 9 [function] => three [args] => Array ( [0] => Cleveland [1] => Brown ) ) [1] => Array ( [file] => D:\www\test\result.php [line] => 5 [function] => two [args] => Array ( [0] => Glenn [1] => Quagmire ) ) [2] => Array ( [file] => D:\www\test\result.php [line] => 16 [function] => one [args] => Array ( [0] => Peter [1] => Griffin ) ) ) 6、输出用户的IP地址,并且判断用户的IP地址是否在192.168.1.100 — 192.168.1.150之间 echo $ip=getenv('REMOTE_ADDR'); $ip=str_replace('.','',$ip); if($ip<1921681150 && $ip>1921681100) { echo 'ip在192.168.1.100—–192.168.1.150之间'; } else { echo 'ip不在192.168.1.100—–192.168.1.150之间'; } 7、请将2维数组按照name的长度进行重新排序,按照顺序将id赋值 $tarray = array( array('id' => 0, 'name' => '123'), array('id' => 0, 'name' => '1234'), array('id' => 0, 'name' => '1235'), array('id' => 0, 'name' => '12356'), array('id' => 0, 'name' => '123abc') ); foreach($tarray as $key=>$val) { $c[]=$val['name']; } function aa($a,$b) { if(strlen($a)==strlen($b)) return 0; return strlen($a)>strlen($b)?-1:1; } usort($c,'aa'); $len=count($c); for($i=0;$i<$len;$i++) { $t[$i]['id']=$i+1; $t[$i]['name']=$c[$i]; } print_r($t); 8、表单数据提交方式POST和GET的区别,URL地址传递的数据最大长度是多少? POST方式提交数据用户不可见,是数据更安全,最大长度不受限制,而GET方式传值在URL地址可以看到,相对不安全,对大长度是2048字节。 9、SESSION和COOKIE的作用和区别,SESSION信息的存储方式,如何进行遍历 SESSION和COOKIE都能够使值在页面之间进行传递,SESSION存储在服务器端,数据更安全,COOKIE保存在客户端,用户使用手段可以进行修改,SESSION依赖于COOKIE进行传递的。Session遍历使用$_SESSION[]取值,cookie遍历使用$_COOKIE[]取值。 10、什么是数据库索引,主键索引,唯一索引的区别,索引的缺点是什么 索引用来快速地寻找那些具有特定值的记录。 主键索引和唯一索引的区别:主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”,每个表只能有一个主键。唯一索引索引列的所有值都只能出现一次,即必须唯一。 索引的缺点: 1、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 2、索引需要占用物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,需要的空间就会更大。 3、当对表中的数据进行增加、删除、修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。 11、数据库设计时,常遇到的性能瓶颈有哪些,常有的解决方案 瓶颈主要有: 1、磁盘搜索 优化方法是:将数据分布在多个磁盘上 2、磁盘读/写 优化方法是:从多个磁盘并行读写。 3、CPU周期 优化方法:扩充内存 4、内存带宽 12、include和require区别 include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码。 require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码。 13、文件上传时设计到点 和文件上传有关的php.ini配置选项(File Uploads): file_uploads=On/Off:文件是否允许上传 upload_max_filesize上传文件时,单个文件的最大大小 post_max_size:提交表单时,整个post表单的最大大小 max_file_uploads =20上传文件的个数 内存占用,脚本最大执行时间也间接影响到文件的上传 14、header常见状态 //200 正常状态 header('HTTP/1.1 200 OK'); // 301 永久重定向,记得在后面要加重定向地址 Location:$url header('HTTP/1.1 301 Moved Permanently'); // 重定向,其实就是302 暂时重定向 header('Location: http://www.maiyoule.com/'); // 设置页面304 没有修改 header('HTTP/1.1 304 Not Modified'); // 显示登录框, header('HTTP/1.1 401 Unauthorized'); header('WWW-Authenticate: Basic realm="登录信息"'); echo '显示的信息!'; // 403 禁止访问 header('HTTP/1.1 403 Forbidden'); // 404 错误 header('HTTP/1.1 404 Not Found'); // 500 服务器错误 header('HTTP/1.1 500 Internal Server Error'); // 3秒后重定向指定地址(也就是刷新到新页面与 <meta http-equiv="refresh" content="10;http://www.maiyoule.com/ /> 相同) header('Refresh: 3; url=http://www.maiyoule.com/'); echo '10后跳转到http://www.maiyoule.com'; // 重写 X-Powered-By 值 header('X-Powered-By: PHP/5.3.0'); header('X-Powered-By: Brain/0.6b'); //设置上下文语言 header('Content-language: en'); // 设置页面最后修改时间(多用于防缓存) $time = time() - 60; //建议使用filetime函数来设置页面缓存时间 header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT'); // 设置内容长度 header('Content-Length: 39344'); // 设置头文件类型,可以用于流文件或者文件下载 header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="example.zip"'); header('Content-Transfer-Encoding: binary'); readfile('example.zip');//读取文件到客户端 //禁用页面缓存 header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Pragma: no-cache'); //设置页面头信息 header('Content-Type: text/html; charset=iso-8859-1'); header('Content-Type: text/html; charset=utf-8'); header('Content-Type: text/plain'); header('Content-Type: image/jpeg'); header('Content-Type: application/zip'); header('Content-Type: application/pdf'); header('Content-Type: audio/mpeg'); header('Content-Type: application/x-shockwave-flash'); //.... 至于Content-Type 的值 可以去查查 w3c 的文档库,那里很丰富 15、ORM和ActiveRecord ORM:object relation mapping,即对象关系映射,简单的说就是对象模型和关系模型的一种映射。为什么要有这么一个映射?很简单,因为现在的开发语言基本都是oop的,但是传统的数据库却是关系型的。为了可以靠贴近面向对象开发,我们想要像操作对象一样操作数据库。还可以隔离底层数据库层,我们不需要关心我们使用的是mysql还是其他的关系型数据库 ActiveRecord也属于ORM层,由Rails最早提出,遵循标准的ORM模型:表映射到记录,记录映射到对象,字段映射到对象属性。配合遵循的命名和配置惯例,能够很大程度的快速实现模型的操作,而且简洁易懂。 ActiveRecord的主要思想是: 1. 每一个数据库表对应创建一个类,类的每一个对象实例对应于数据库中表的一行记录;通常表的每个字段在类中都有相应的Field; 2. ActiveRecord同时负责把自己持久化,在ActiveRecord中封装了对数据库的访问,即CURD;; 3. ActiveRecord是一种领域模型(Domain Model),封装了部分业务逻辑; ActiveRecord比较适用于: 1. 业务逻辑比较简单,当你的类基本上和数据库中的表一一对应时, ActiveRecord是非常方便的,即你的业务逻辑大多数是对单表操作; 2. 当发生跨表的操作时, 往往会配合使用事务脚本(Transaction Script),把跨表事务提升到事务脚本中; 3. ActiveRecord最大优点是简单, 直观。 一个类就包括了数据访问和业务逻辑. 如果配合代码生成器使用就更方便了; 这些优点使ActiveRecord特别适合WEB快速开发。 16、斐波那契方法,也就是1 1 2 3 5 8 ……,这里给出两种方法,大家可以对比下,看看哪种快,以及为什么 function fibonacci($n){ if($n == 0){ return 0; } if($n == 1){ return 1; } return fibonacci($n-1)+fibonacci($n-2); } function fibonacci($n){ for($i=0; $i<$n; $i++){ $r[] = $i<2 ? 1 : $r[$i-1]+$r[$i-2]; } return $r[--$i]; } 17、约瑟夫环,也就是常见的数猴子,n只猴子围成一圈,每只猴子下面标了编号,从1开始数起,数到m那么第m只猴子便退出,依次类推,每数到m,那么那个位置的猴子退出,那么最后剩下的猴子下的编号是啥。 function yuesefu($n,$m) { $r=0; for($i=2; $i<=$n; $i++) { $r=($r+$m)%$i; } return $r+1; } 18、冒泡排序,大致是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束 function bubbleSort($arr){ for($i=0, $len=count($arr); $i<$len; $i++){ for($j=0; $j<$len; $j++){ if($arr[$i]<$arr[$j]){ $tmp = $arr[$j]; $arr[$j] = $arr[$i]; $arr[$i] = $tmp; } } } return $arr; } 19、快速排序,也就是找出一个元素(理论上可以随便找一个)作为基准,然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。 function quickSort($arr){ $len = count($arr); if($len <=1){ return $arr; } $key = $arr[0]; $leftArr = $rightArr= array(); for($i=1; $i<$len; $i++){ if($arr[$i] <= $key){ $leftArr[] = $arr[$i]; } else{ $rightArr[] = $arr[$i]; } } $leftArr = quickSort($leftArr); $rightArr = quickSort($rightArr); return array_merge($leftArr, array($key), $rightArr); } 20、(递归的)列出目录下所有文件及目录,这里也有两种方法 function listDir($path){ $res = dir($path); while($file = $res->read()){ if($file == '.' || $file == '..'){ continue; } if(is_dir($path . '/' .$file)){ echo $path . '/' .$file . "\r\n"; listDir($path . '/' .$file); } else{ echo $path . '/' .$file . "\r\n"; } } $res->close(); } function listDir($path){ if(is_dir($path)){ if(FALSE !== ($res = opendir($path))){ while(FALSE !== ($file = readdir($res))){ if($file == '.' || $file == '..'){ continue; } $subPath = $path . '/' . $file; if(is_dir($subPath)){ echo $subPath . "\r\n"; listDir($subPath); } else{ echo $subPath . "\r\n"; } } } } } 21、找出相对的目录,比如/a/b/c/d/e.php相对于/a/b/13/34/c.php是/c/d/ function ralativePath($a, $b){ $a = explode('/', dirname($a)); $b = explode('/', dirname($b)); $c = '/'; foreach ($a as $k=> $v){ if($v != $b[$k]){ $c .= $v . '/'; } } echo $c; } 22、快速找出url中php后缀 function get_ext($url){ $data = parse_url($url); return pathinfo($data['path'], PATHINFO_EXTENSION); } 23、正则题,使用正则抓取网页,以网页meta为utf8为准,若是抓取的网页编码为big5之类的,需要转化为utf8再收录 function preg_meta($meta){ $replacement = "\\1utf8\\6\\7"; $pattern = '#(<meta\s+http-equiv=(\'|"|)Content-Type(\'|"|)\s+content=(\'|"|)text/html; charset=)(\w+)(\'|"|)(>)#i'; return preg_replace($pattern, $replacement, $meta); } echo preg_meta("<meta http-equiv=Content-Type content='text/html; charset=big5'><META http-equiv=\"Content-Type\" content='text/html; charset=big5'>"); 24、不用php的反转函数倒序输出字符串,如abc,反序输出cba function revstring($str){ for($i=strlen($str)-1; $i>=0; $i--){ echo $str{$i}; } } revstring('abc'); 25、常见端口 TCP 21端口:FTP 文件传输服务 SSH 22端口:SSH连接linux服务器,通过SSH连接可以远程管理Linux等设备 TCP 23端口:TELNET 终端仿真服务 TCP 25端口:SMTP 简单邮件传输服务 UDP 53端口:DNS 域名解析服务 TCP 80端口:HTTP 超文本传输服务 TCP 110端口:POP3 “邮局协议版本3”使用的端口 TCP 443端口:HTTPS 加密的超文本传输服务 TCP 1521端口:Oracle数据库服务 TCP 1863端口:MSN Messenger的文件传输功能所使用的端口 TCP 3389端口:Microsoft RDP 微软远程桌面使用的端口 TCP 5631端口:Symantec pcAnywhere 远程控制数据传输时使用的端口 UDP 5632端口:Symantec pcAnywhere 主控端扫描被控端时使用的端口 TCP 5000端口:MS SQL Server使用的端口 UDP 8000端口:腾讯QQ 26、linux常用的命令 top linux进程实时监控 ps 在Linux中是查看进程的命令。ps查看正处于Running的进程 mv 为文件或目录改名或将文件由一个目录移入另一个目录中。 find 查找文件 df 可显示所有文件系统对i节点和磁盘块的使用情况。 cat 打印文件类容 chmod 变更文件或目录的权限 chgrp 文件或目录的权限的掌控以拥有者及所诉群组来管理。可以使用chgrp指令取变更文件与目录所属群组 grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。 wc 为统计指定文件中的字节数、字数、行数,并将统计结果显示输出 27、对于大流量的网站,您采用什么样的方法来解决访问量问题 首先,确认服务器硬件是否足够支持当前的流量 其次,优化数据库访问。 第三,禁止外部的盗链。 第四,控制大文件的下载。 第五,使用不同主机分流主要流量 第六,使用流量分析统计软件 28、$_SERVER常用的字段 $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名 $_SERVER['SERVER_NAME'] #当前运行脚本所在服务器主机的名称 $_SERVER['REQUEST_METHOD'] #访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT” $_SERVER['QUERY_STRING'] #查询(query)的字符串 $_SERVER['HTTP_HOST'] #当前请求的 Host: 头部的内容 $_SERVER['HTTP_REFERER'] #链接到当前页面的前一页面的 URL 地址 $_SERVER['REMOTE_ADDR'] #正在浏览当前页面用户的 IP 地址 $_SERVER['REMOTE_HOST'] #正在浏览当前页面用户的主机名 $_SERVER['SCRIPT_FILENAME'] #当前执行脚本的绝对路径名 $_SERVER['SCRIPT_NAME'] #包含当前脚本的路径。这在页面需要指向自己时非常有用 $_SERVER['REQUEST_URI'] #访问此页面所需的 URI。例如,“/index.html” 29、安装php扩展 进入扩展的目录 phpize命令得到configure文件 ./configure --with-php-config=/usr/local/php/bin/php-config make & make install 在php.ini中加入扩展名称.so 重启web服务器(nginx/apache) 30、php-fpm与nginx PHP-FPM也是一个第三方的FastCGI进程管理器,它是作为PHP的一个补丁来开发的,在安装的时候也需要和PHP源码一起编译,也就是说PHP-FPM被编译到PHP内核中,因此在处理性能方面更加优秀;同时它在处理高并发方面也比spawn-fcgi引擎好很多,因此,推荐Nginx+PHP/PHP-FPM这个组合对PHP进行解析。 FastCGI 的主要优点是把动态语言和HTTP Server分离开来,所以Nginx与PHP/PHP-FPM经常被部署在不同的服务器上,以分担前端Nginx服务器的压力,使Nginx专一处理静态请求和转发动态请求,而PHP/PHP-FPM服务器专一解析PHP动态请求 #fastcgi FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP。 FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器。这在处理高并发访问时,几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少被使用了。 FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。 Nginx+FastCGI运行原理 Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket,(这个socket可以是文件socket,也可以是ip socket)。为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接纳到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运作过程。 31、ajax全称“Asynchronous Javascript And XML”(异步JavaScript和XML)

小川游鱼 2019-12-02 01:41:29 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 企业建站模板