Tomcat性能調優

1、集成apache

? ? ? 雖然Tomcat也可以作web服務器,但是處理靜態html的速度比不上apache,且其作為web服務器的功能遠不如Apache,因此把apache和tomcat集成起來,講html和jsp功能部分進行明確的分工,讓tomcat只處理jsp部分,其他的由apache、IIS等web服務器去處理,因此大大提供tomcat的運行效率。

部署方式:

  • 安裝apache服務器
  • 部署tomcat
  • 將mod_jk.so拷貝到modules目錄下面
  • 修改httpd.conf和mod_jk.conf

使用場景:大量使用靜態頁面的應用系統

?

2、apache+tomcat集群

? ? ?對于并發要求很高的系統,需要采取負載均衡的方式來分擔tomcat服務器的壓力。

負載均衡實現的四種方式:

1)通過DNS,但只能簡單的實現輪流分配,不能處理故障。

2)基于MS IIS、Windows 2003 Server本身自帶的負載均衡服務。

3)硬件方式,通過交換機功能或專門的負載均衡設備來實現。

4)通過一臺負載均衡服務器實現,上面安裝軟件。

? ? 使用apache http server做負載均衡器、集群節點使用tomcat來實現上述的第4種方式,即:apache+tomcat集群來實現負載均衡。該方式可以最大程度的發揮服務器的性能,可以在配置較高的服務器上部署多個tomcat,也可以在多臺服務器上分別部署tomcat,apache和tomcat整合的方式使用JK的方式。經驗證,系統對大用戶量使用的響應方面,apache+3tomcat集群>apache+2tomcat集群>apache集成tomcat>單個tomcat,并且采用多個tomcat時,如果一個tomcat宕機,系統可以繼續使用,所以硬件系統性能足夠優越的情況下,需要盡量發揮軟件的性能,可以采用增加tomcat集群的方式。

apache+tomcat集群使用的配置文件:

  • httpd.conf
  • mod_jk.conf(對jk信息的配置,包括jk的路徑等)
  • workers.properties(對tomcat服務器的連接定義文件)

apache需要調整的運行參數:

1)設置mpm參數

  • ThreadPerChild---用于設置每個進程的線程數(在windows環境下默認是64,最大值是1920,建議值100~500)
  • MaxRequestPerChild---每個子進程能夠處理的最大請求數(很大程度上取決于服務器的內存,建議值3000)

2)關閉DNS和名字解析

  • HostnameLookup ?off

3)打開UseCanonicalName模塊

  • UseCanonicalName on

4)關閉多余模塊,一般來說,不需要加載的模塊有mod_include.so、mod_autoindex.so、mod_access.so、mod_auth.so

5)打開KeepAlive支持

  • ? ? ?KeepAlive on
  • ? ? ?KeepAliveTimeout 15
  • ? ? ?MaxKeepAliveRequests 1000

部署方式:

  • 安裝apache服務器
  • 部署tomcat集群
  • 將mod_jk.so拷貝到modules目錄下面
  • 修改相關配置文件

使用場景:并發用戶數高的系統

?

3、JVM調優

1)JDK版本選擇

? ? ?在滿足項目需要的前提下,盡量選用版本較高的JVM,一般來說高版本產品在速度和效率上比低版本會有改進。?JDK1.4比JDK1.3性能提高了近10%-20%,JDK1.5比JDK1.4性能提高25%-75%。

2)JVM版本選擇?

? ? ?SUN的JVM動態庫有client和server兩個版本,分別針對桌面應用和服務器應用做了相應的優化,client版本加載速度較快,server版本加載速度較慢但運行起來較快。在命令行輸入 java -version 可以看到jvm目前配置的是哪個版本。如果要修改jvm的版本,可更改默認java.exe調用的jvm.dll,這個由jvm.cfg決定。編輯%JAVA_HOME%/jre/lib/i386/jvm.cfg文件,里面第一行寫的是-client(默認就是client版本),把第二行的-server KNOWN 放到第一行, 如下所示:

-server KNOWN?
-client KNOWN?
-hotspot ALIASED_TO -client?
-classic WARN?
-native ERROR?
-green ERROR

然后重啟tomcat,在命令行下輸入java -version ,就可以看到類似如下的信息:

java version "1.6.0_13"?
Java(TM) SE Runtime Environment (build 1.6.0_13-b03 )?
Java HotSpot(TM) Server VM (build 11.3-b02 , mixed mode)

? ? ?表明Tomcat已經修改為使用Server版本的JVM,可進行對比測試,對比一下Client版本的JVM和Server版本的性能差異,從而決定采用哪個版本的JVM。另外,也可以考慮更換其它廠商的JVM,例如Oracle的JRockit等。


3)JVM參數調優

JVM啟動參數配置例子:
export JAVA_OPTS="-server -Xms1400M -Xmx1400M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=128M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=31 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.headless=true “

?

4、tomcat容器本身調優

1)禁用DNS查詢

? ? 消除因DNS查詢所消耗的時間,可以在tomcat種關閉DNS查詢:

  • ? ? enableLookups="false" ? ---server.xml文件中

2)調整線程數

? ? ? Tomcat使用線程池加速響應速度來處理請求。在Java中線程是程序運行時的路徑,是在一個程序中與其它控制線程無關的、能夠獨立運行的代碼段。它們共享相同的地址空間。多線程幫助程序員寫出CPU最大利用率的高效程序,使空閑時間保持最低,從而接受更多的請求。?

? ? ?Tomcat4中可以通過修改minProcessors和maxProcessors的值來控制線程數

? ? ? ?這些值在安裝后就已經設定為默認值并且是足夠使用的,但是隨著站點的擴容而改大這些值。minProcessors服務器啟動時創建的處理請求的線程數應該足夠處理一個小量的負載。也就是說,如果一天內每秒僅發生5次單擊事件,并且個每請求任務處理需要1秒鐘,那么預先設置線程數為5就足夠了。但在你的站點訪問量較大時就需要設置更大的線程數,指定為參數maxProcessors的值。maxProcessors的值也是有上限的,應防止流量不可控制(或者惡意的服務攻擊),從而導致超出了虛擬機使用內存的大小。如果要加大并發連接數,應同時加大這兩個參數(但別忘了:web server允許的最大連接數還受制于操作系統的內核參數設置)。

  Tomcat5對這些參數(server.xml中)進行了調整:

  • maxThreads:Tomcat使用線程來處理接收的每個請求。這個值表示Tomcat可創建的最大的線程數
  • acceptCount:指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理。
  • connnectionTimeout:網絡連接超時,單位:毫秒。設置為0表示永不超時,這樣設置有隱患的。通常可設置為30000毫秒。
  • minSpareThreads:Tomcat初始化時創建的線程數
  • maxSpareThreads:一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程。

? ? 最好的方式是多設置幾次并且進行測試,觀察響應時間和內存使用情況。在不同的機器、操作系統或虛擬機組合的情況下可能會不同,而且并不是所有人的web站點的流量都是一樣的,因此沒有一刀切的方案來確定線程數的值。

?

5、ARP庫

? ? ?所謂的Apache Tomcat Native library其實叫APR,全稱為:Apache Portable Runtime and Tomcat。Apache Tomcat Native library是Apache為了提升Tomcat的性能開發的一套本地化Socket、Thread、IO組件,也就是說它有高級IO功能, 操作系統級別的功能調用, 以及本地進程處理等等, 這些都能使Tomcat更像一個Web Server(像Apache那樣), 而不是只能用來解釋JSP, 也就是說提升單獨的Tomcat作為服務器的吞吐性能。

? ? ? Tomcat中使用APR庫,其實就是在Tomcat中使用JNI(Java Native Interface的縮寫,中文為JAVA本地調用)的方式來讀取文件以及進行網絡傳輸。可以大大提升Tomcat對靜態文件的處理性能,同時如果你使用了HTTPS方式傳輸的話,也可以提升SSL的處理性能。一般在Windows下,可以直接下載編譯好的二進制版本的dll庫文件來使Tomcat啟用APR,一般建議拷貝庫文件tcnative-1.dll到Tomcat的bin目錄下。而在Linux下,可以直接解壓和安裝bin目錄下的tomcat_native.tar.gz文件。

怎么才能判斷Tomcat是否已經啟用了APR庫呢?方法是通過看Tomcat的啟動日志catalina.out:

如果沒有啟用APR,則啟動日志一般有這么一條:?org.apache.coyote.http11.Http11Protocol start?

如果啟用了APR,則這條日志就會變成:?org.apache.coyote.http11.Http11AprProtocol start

? ? ?APR資料參考:http://tomcat.apache.org/tomcat-5.5-doc/apr.html

?

安裝部署APR:

1. Windows下安裝APR
? ? 用于Windows的APR是一個名稱為:tcnative-1.dll的文件。可到下面網址下載匹配版本的tcnative-1.dll,把下載的tcnative-1.dll文件放到<$JAVA_HOME>/bin目錄下,啟動Tomcat就可以看到Tomcat已經加載部署了APR:Loaded APR based Apache Tomcat Native library 1.1.20

2. Linux下安裝APR
1)安裝APR
到http://apr.apache.org下載apr-1.2.12.tar.gz,然后用以下命令安裝:
tar -xvf apr-1.2.12.tar.gz
cd apr-1.2.12
./configure --prefix=/tomcat/apr
make
make install

2)安裝APR-UTIL
到http://apr.apache.org下載apr-util-1.2.12.tar.gz,然后用以下命令安裝:
tar -xvf apr-util-1.2.12.tar.gz
cd apr-util-1.2.12
./configure --prefix=/tomcat/apr --with-apr=/tomcat/apr
make
make install

3)安裝tomcat native library
cd /usr/local/tomcat/bin
tar zxvf tomcat-native.tar.gz
cd tomcat-native-1.1.10-src/jni/native
./configure --prefix=/tomcat/apr -- with-apr=/tomcat/apr –with-java-home=/usr/jdk
make
make install

4)編輯tomcat/bin/catalina.sh
將JAVA_OPTS="$CATALINA_OPTS -Djava.library.path= tomcat/apr/lib"
加在# ----- Execute The Requested Command -----------------------------------------前面

5)添加環境變量
# vi /etc/profile
添加:
export LD_LIBRARY_PATH=/usr/local/apr/lib

6)重啟Tomcat后,查看Tomcat輸出日志,可見APR成功加載了
# vim /usr/local/tomcat/logs/catalina.out

信息: Loaded Apache Tomcat Native library 1.1.10.
2008-7-8 10:20:27 org.apache.catalina.core.AprLifecycleListener init
信息: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
2008-7-8 10:20:27 org.apache.coyote.http11.Http11AprProtocol init

?

6、Compression壓縮

? ? ?HTTP壓縮可以大大提高瀏覽網站的速度,它的原理是在客戶端請求網頁后,從服務器端將網頁文件壓縮,再下載到客戶端,由客戶端的瀏覽器負責解壓縮并瀏覽。相對于普通的瀏覽過程HTML,CSS,JS, Text,可以節省40%左右的流量。更為重要的是,它可以對動態生成的,包括CGI、PHP, JSP, ASP, Servlet, SHTML等輸出的網頁也能進行壓縮,壓縮效率驚人。

  • compression="on" 打開壓縮功能
  • compressionMinSize="2048" 啟用壓縮的輸出內容大小,這里面默認為2KB
  • noCompressionUserAgents="gozilla, traviata" 對于以下的瀏覽器,不啟用壓縮
  • compressableMimeType="text/html,text/xml" 壓縮類型

(server.xml中)配置以后是這樣的:

復制代碼
<Connector port="8088" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"compression="on" compressionMinSize1="2048" noCompressionUserAgents="gozilla, traviata" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"/>
復制代碼

?

Tomcat調優綜述:

? ? ?根據以上分析,如果想要Tomcat達到最優的效果,首先要爭取使得操作系統以及網絡資源達到最優,并且最好使用高版本的JDK。對于有大量靜態頁面的系統,采用Apache集成Tomcat的方式,把靜態頁面交由Apache處理,動態部分交由Tomcat處理,能極大解放Tomcat的處理能力。使用ARP庫也能極大的提高Tomcat對靜態文件的處理能力。對于并發要求較高的系統,采用Apache加Tomcat集群的方式,將負載分別分擔到多個Tomcat上,能很大的提高系統的性能,充分利用硬件資源。同時需要對Tomcat自身進行優化,包括增大內存、調節并發線程數等。

?

重要參數說明:

1)maxThreads?- 連接線程數監控與調整

? ? ?maxThreads是最大并發線程數,如果同時的并發請求量超過這個值,Tomcat也不會再增加線程,這時并發請求將進入隊列。增加maxThreads的值可以加大Tomcat的并發處理能力,但是設置過高的maxThreads值也會對性能帶來影響,占有過多的系統資源,甚至造成Tomcat崩潰。線程數可在Tomcat的Manager狀態頁面進行監控。

針對Tomcat7進行試驗,以說明maxThreads對于Tomcat服務器性能的影響:

Tomcat堆內存設置為256M,用LoadRunner啟動50個虛擬用戶測試JpetStore主頁面(http://192.168.1.101:8080/jpetstore/shop/index.shtml),可得到以下測試結果:
(1)、默認配置maxThreads=200,平均事務響應時間:0.390
(2)、maxThreads=5,平均事務響應時間:0.355
(3)、maxThreads=50,平均事務響應時間:0.369
(4)、maxThreads=3,平均事務響應時間:0.559
可以看到,當maxThreads設置比較小時,Tomcat處理請求的速度有所下降。如果我們在測試腳本中設置嚴格的并發(插入集合點lr_Rendezvous函數),可得到以下結果:
(1)、maxThreads=3,平均事務響應時間:2.609
(2)、maxThreads=50,平均事務響應時間:0.597
可以看到,在高強度的并發情況下,如果Tomcat的maxThreads值設置比較小,會嚴重影響性能,一般需要設置大于最大同時并發請求數。
注意:一般Web服務器允許的最大連接數還受限制于操作系統的內核參數設置,通常Windows是2000個左右,Linux是1000個左右。在CentOS 中可以用以下命令查看Socket最大連接數:ulimit -a
其中的open files是允許打開的最大文件數,CentOS默認是1024。這個數值可通過修改vi /etc/security/limits.conf文件來設置,例如修改為32768,可在文件后添加:
* soft nofile 32768
* hard nofile 32768
保存,重啟系統后就生效了。

為了證明這個Linux系統參數對Socket連接的影響,我們可以進行對比試驗,修改/etc/security/limits.conf:
* soft nofile 200
* hard nofile 200
在LoadRunner中啟動200個VU并發(設置集合點),在Controller的Connection和Connection per Second圖中看到連接數偏少(相比起默認設置的1024):

(1)、參數設置為200
平均事務響應時間:19.664
Connections:177.376
Connections per Second-New Connection:28.082
Connections per Second-Connection Shutdown:28.082

(2)、參數設置為1024(默認設置)
平均事務響應時間:2.712
Connections:315.136
Connections per Second-New Connection:114.000
Connections per Second-Connection Shutdown:114.000

在Socket連接建立受到限制的情況下,Tomcat的并發處理能力也受到明顯的影響,平均事務響應時間急劇上升。

?

2)connectionTimeout?– 連接超時的設置

? ? ?connectionTimeout是Connector從接受連接到提交URI的等待的時間(單位是毫秒),默認設置為60000(即60秒)。connectionTimeout如果設置得比較小的話,可能造成大量用戶訪問網站時出現“502”異常。

telnet試驗:直接用telnet連上tomcat,如果不保持持續地輸入,則連接很快會斷開(如果connectionTimeout時間設置得比較小的話);如果一直不停輸入,連接會被繼續保持。

關于該項的詳細解釋和配置可參考tomcat幫助文檔:http://tomcat.apache.org/tomcat-5.5-doc/config/http.html

?

?

3)acceptCount?- 最大排隊數的設置

? ? ?acceptCount是指當所有線程都已經被用于處理請求時,允許多少新的連接請求進入排隊隊列等候處理,當隊列滿的時候,任何新的請求都將被拒絕。默認設置值為100。
配置例子如下:

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="800" acceptCount="1000"/>


其中:maxThreads是Tomcat啟動的最大線程數,默認值為200;acceptCount是當Tomcat起動的線程數達到最大時,接受排隊的請求個數,默認值為100,這兩個值一起工作,可能出現下面三種情況:

  • 情況1:接受一個請求,此時Tomcat啟動的線程數還沒有到達maxThreads設置的個數,Tomcat會啟動一個線程來處理此請求。
  • 情況2:接受一個請求,此時Tomcat啟動的線程數已經到達maxThreads設置的個數,Tomcat會把此請求放入等待隊列,等待空閑線程可用。
  • 情況3:接受一個請求,此時Tomcat啟動的線程數已經到達maxThreads設置的個數,而且等待隊列中的請求個數也達到了acceptCount設置的個數,此時Tomcat會直接拒絕此次請求,返回connection refused的錯誤。

?

?

關于Sun’s HotSpot JVM的其它與性能相關的調整參數參考:

http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#PerformanceTuning

?

轉載于:https://www.cnblogs.com/hllnj2008/p/3993592.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258148.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258148.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258148.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【轉】sip中的subscribe和notify擴展應用技術

http://blog.csdn.net/hwz119/article/details/3965322轉載于:https://www.cnblogs.com/matthew-2013/p/4917207.html

再讀《被神化的框架》

開發框架&#xff0c;構件&#xff0c;組件非常地多&#xff0c;而且&#xff0c;趨勢是越來越多&#xff0c;特別是在java中。當然也不是說其它平臺的少。而特別是框架越來越被神化了&#xff0c;似乎用之解決一切問題&#xff0c;不用就要敲壞鍵盤。對于老衲這樣的打字員來說…

河南推出近萬億PPP投資計劃 鄭州實現智慧城市全覆蓋

1 近萬億PPP項目啟動 眼下&#xff0c;國內財經新聞的熱點聚焦在PPP開發上&#xff0c;這與PPP支撐國內經濟平衡運行的一支強勁力量正被政府看好。就連二級市場也出現了PPP概念的搶籌現象。 9月27日&#xff0c;股市再一次遭遇拋售&#xff0c;大盤創出階段性新低&#xff0c;然…

java基礎實例代碼_Java基礎實例

打印等腰三角形代碼public class ForForTest{public static void main(String []args){for(int x0;x<5;x){for(int yx1;y<5;y){System.out.print(" ");}for(int z0;zSystem.out.print("* ");}System.out.println();}}}折半查找代碼&#xff1a;//練習…

###《Effective STL》--Chapter3

點擊查看Evernote原文。 #author: gr #date: 2014-09-13 #email: forgeruigmail.com Chapter3 關聯容器 Topic 22: 切勿直接修改set或multiset中的鍵 修改元素的值可以通過下面五步操作&#xff0c;避免作類型轉換。 struct IDNumberLess : public binary…

如何獲取網絡資源?

# encodingutf-8 #python 2.7.10 #xiaodeng #如何獲取網絡資源&#xff1f; #HTTP權威指南 26頁#url就是因特網資源的標準化名稱&#xff0c;他指向每一條電子信息&#xff0c;告訴你他們位于何處&#xff0c;以及如何與之交互。 #URL是瀏覽器尋找信息時所需的資源位置。 #一個…

Loadrunner多服務器連接問題

今天用想增加一個壓力機,在服務器管理列表里怎么也連不上,后來解決方法如下:1. 關閉所有loadrunner組件,并手動結束lr_開頭的進程2.找到惠普loadrunner安裝目錄(C:\Program Files\HP\LoadRunner\bin),手動運行magentproc.exe即可最新內容請見作者的GitHub頁&#xff1a;http://…

java 常量存儲_JAVA?存儲空間 寄存器 堆棧 堆 常量存儲 非RAM存儲

&#xff11;.寄存器這是最快的存儲區&#xff0c;因為它位于處理器內部&#xff0c;數量極其有限&#xff0c;所以寄存器根據需求進行分配&#xff0c;你不能直接控制&#xff0c;也不能在程序中感 覺到寄存器存在的任何跡象。2.堆棧位于通用RAM(隨機訪問存儲器)中&#xff0…

物聯網安防技術融合在細分領域的應用分析

物聯網的核心是業務和應用的創新。物聯網技術與智能化技術的深度融合&#xff0c;加快了行業的智能化發展&#xff0c;促使了行業需求在應用層上的落地。安防技術架構是物聯網架構的一個子集&#xff0c;傳統安防是一個相對保守的行業。現代安防和物聯網在業務和技術上的融合發…

一個強大的工具來模擬數百萬??并發用戶負載測試:Gryphon

Gryphon是由網易自主研發的能夠模擬千萬級別并發用戶的一個軟件&#xff0c;目的是能夠用較少的資源來模擬出大量并發用戶&#xff0c;并且能夠更加真實地進行壓力測試&#xff0c; 以解決網絡消息推送服務方面的壓力測試的問題和傳統壓力測試的問題。Gryphon分為兩個程序&…

java 反射與泛型_Java基礎系列 - 泛型和反射機制

package com.test5;import java.lang.reflect.Field;import java.lang.reflect.Method;/*** Java泛型和反射機制(泛型的好處 代碼安全簡單&#xff0c;自動裝箱拆箱&#xff0c;提高代碼的重用率)*/public class test5 {public static void main(String[] args) {Employer empl…

Linux環境下的Popush部署——張凱

完成情況&#xff1a; 已按照相關部署文檔完成了所有任務&#xff0c;包括軟件包的安裝與配置&#xff0c;以及對各種開發語言的支持&#xff0c;以及gdb的調試功能的支持 遇到的主要問題&#xff1a; 由于從大二以來我基本上所有的開發工作都是在Linux下做的&#xff0c;因此對…

【c++】標準模板庫STL入門簡介與常見用法

一、STL簡介 1、什么是STL STL&#xff08;Standard Template Library&#xff09;標準模板庫&#xff0c;主要由容器、迭代器、算法、函數對象、內存分配器和適配器六大部分組成。STL已是標準C的一部分&#xff0c;使用STL開發系統可以提高開發效率。 2、容器&#xff08;Cont…

強連通分量(學習心得)

定義&#xff1a;有向圖強連通分量&#xff1a;在有向圖G中&#xff0c;如果兩個頂點vi,vj間&#xff08;vi>vj&#xff09;有一條從vi到vj的有向路徑&#xff0c;同時還有一條從vj到vi的有向路徑&#xff0c;則稱兩個頂點強連通如果有向圖G的每兩個頂點都強連通&#xff0c…

java for的增強_Java基礎之增強for循環

平時大家for循環應該用的不少&#xff0c;特別是增強for循環&#xff0c;簡單快捷。但是在增強for中做刪除操作&#xff0c;卻會拋出java.util.ConcurrentModificationException&#xff0c;一起來看下。上面的代碼&#xff0c;在for循環執行完if中的remove&#xff0c;遍歷下一…

window.history 和 DWZ 框架

DWZ框架的ajax請求返回的一般都是一個HTML片段&#xff0c;整個頁面是由一個個HTML片段組成的&#xff0c;可以由TAB切換其內容&#xff0c;但是只有一個body和HEAD&#xff0c;一般head 和 菜單欄是不會動的。 今天遇到一個問題&#xff0c;當一個點擊進入一個tab頁面時&#…

大道至簡(第六章)讀后感

大道至簡&#xff08;第六章&#xff09;讀后感 還是不樂意去讀&#xff0c;但總算可以耐心的讀下去了&#xff0c;這也許也算是讀大道至簡以來的收獲之一吧。第六章的題目是從編程到工程&#xff0c;看到工程二字&#xff0c;讓我不由想起了前幾天和高中同學聊天。他報的燕大土…

遏止個人信息泄露亟待立法跟進

據報道&#xff0c;近日全國30個省份275位艾滋病感染者稱接到了詐騙電話&#xff0c;艾滋病感染者的個人信息疑似被大面積泄露。無獨有偶&#xff0c;近日票務網站大麥網因賬號信息被竊取&#xff0c;間接導致全國多地用戶受騙。目前至少有17名受害者&#xff0c;被騙至少54萬元…

確認類是否可以在運行期使用

問題: 你正在使用最新版的 SDK 中的一些類,但是你不確定這些類是否能在你程序運行的設 備中可用,因為有可能你部署的目標設備要比最新版 SDK 早。 方案: 用NSClassFromString函數. 傳入類的名稱字符串符。若是返回值為空(nil),則表示這個類無法在這臺設備上使用;反之,這個類則…

最新hosts,更新hosts,可用

點擊這里&#xff0c;全選后復制&#xff0c;粘貼到C:\Windows\System32\drivers\etc的hosts里面&#xff0c;把原來的置換了轉載于:https://www.cnblogs.com/zzw1994/p/4940924.html