ThinkinginLINQHarnessingthePowerofFunctionalProgrammingin.
NETApplicationsSudiptaMukherjeeThinkinginLINQ:Harnessingthepoweroffunctionalprogramingin.
NETapplicationsCopyright2014bySudiptaMukherjeeThisworkissubjecttocopyright.
AllrightsarereservedbythePublisher,whetherthewholeorpartofthematerialisconcerned,specificallytherightsoftranslation,reprinting,reuseofillustrations,recitation,broadcasting,reproductiononmicrofilmsorinanyotherphysicalway,andtransmissionorinformationstorageandretrieval,electronicadaptation,computersoftware,orbysimilarordissimilarmethodologynowknownorhereafterdeveloped.
Exemptedfromthislegalreservationarebriefexcerptsinconnectionwithreviewsorscholarlyanalysisormaterialsuppliedspecificallyforthepurposeofbeingenteredandexecutedonacomputersystem,forexclusiveusebythepurchaserofthework.
DuplicationofthispublicationorpartsthereofispermittedonlyundertheprovisionsoftheCopyrightLawofthePublisher'slocation,initscurrentversion,andpermissionforusemustalwaysbeobtainedfromSpringer.
PermissionsforusemaybeobtainedthroughRightsLinkattheCopyrightClearanceCenter.
ViolationsareliabletoprosecutionundertherespectiveCopyrightLaw.
ISBN-13(pbk):978-1-4302-6845-1ISBN-13(electronic):978-1-4302-6844-4Trademarkednames,logos,andimagesmayappearinthisbook.
Ratherthanuseatrademarksymbolwitheveryoccurrenceofatrademarkedname,logo,orimage,weusethenames,logos,andimagesonlyinaneditorialfashionandtothebenefitofthetrademarkowner,withnointentionofinfringementofthetrademark.
Theuseinthispublicationoftradenames,trademarks,servicemarks,andsimilarterms,eveniftheyarenotidentifiedassuch,isnottobetakenasanexpressionofopinionastowhetherornottheyaresubjecttoproprietaryrights.
Whiletheadviceandinformationinthisbookarebelievedtobetrueandaccurateatthedateofpublication,neithertheauthorsnortheeditorsnorthepublishercanacceptanylegalresponsibilityforanyerrorsoromissionsthatmaybemade.
Thepublishermakesnowarranty,expressorimplied,withrespecttothematerialcontainedherein.
ManagingDirector:WelmoedSpahrLeadEditor:JamesDeWolfDevelopmentEditors:RussellJonesTechnicalReviewer:FabioClaudioFerracchiatiEditorialBoard:SteveAnglin,MarkBeckner,GaryCornell,LouiseCorrigan,JamesDeWolf,JonathanGennick,RobertHutchinson,MichelleLowman,JamesMarkham,MatthewMoodie,JeffOlson,JeffreyPepper,DouglasPundick,BenRenow-Clarke,GwenanSpearing,MattWade,SteveWeissCoordinatingEditor:KevinWalterCopyEditor:SharonWilkeyCompositor:SPiGlobalIndexer:SPiGlobalArtist:SPiGlobalCoverDesigner:AnnaIshchenkoDistributedtothebooktradeworldwidebySpringerScience+BusinessMediaNewYork,233SpringStreet,6thFloor,NewYork,NY10013.
Phone1-800-SPRINGER,fax(201)348-4505,e-mailorders-ny@springer-sbm.
com,orvisitwww.
springeronline.
com.
ApressMedia,LLCisaCaliforniaLLCandthesolemember(owner)isSpringerScience+BusinessMediaFinanceInc.
(SSBMFinanceInc.
).
SSBMFinanceInc.
isaDelawarecorporation.
Forinformationontranslations,pleasee-mailrightsrights@apress.
com,orvisitwww.
apress.
com.
ApressandfriendsofEDbooksmaybepurchasedinbulkforacademic,corporate,orpromotionaluse.
eBookversionsandlicensesarealsoavailableformosttitles.
Formoreinformation,referenceourSpecialBulkSales–eBookLicensingwebpageatwww.
apress.
com/bulk-sales.
Anysourcecodeorothersupplementarymaterialreferencedbytheauthorinthistextisavailabletoreadersatwww.
apress.
com.
Fordetailedinformationabouthowtolocateyourbook'ssourcecode,gotowww.
apress.
com/source-code/.
Sohan,thisisforyou,myson.
Youhavebeenmyinspiration.
vContentsataGlanceAbouttheAuthorxxvAbouttheTechnicalReviewerxxviiAcknowledgmentsxxixIntroductionxxxiChapter1:ThinkingFunctionally1Chapter2:SeriesGeneration7Chapter3:TextProcessing49Chapter4:RefactoringwithLINQ89Chapter5:RefactoringwithMoreLINQ109Chapter6:CreatingDomain-SpecificLanguages123Chapter7:StaticCodeAnalysis151Chapter8:ExploratoryDataAnalysis165Chapter9:InteractingwiththeFileSystem195AppendixA:LeanLINQTips205AppendixB:TamingStreamingDatawithRx.
NET211Index231viiContentsAbouttheAuthorxxvAbouttheTechnicalReviewerxxviiAcknowledgmentsxxixIntroductionxxxiChapter1:ThinkingFunctionally11-1.
UnderstandingFunctionalProgramming11-2.
UsingFuncinC#toRepresentFunctions21-3.
UsingVariousTypesofFunctions2GeneratorFunctions3StatisticalFunctions3ProjectorFunctions3Filters31-4.
UnderstandingtheBenefitsofFunctionalProgramming4Composability4LazyEvaluation4Immutability4Parallelizable4Declarative51-5.
GettingLINQPad5ContentsviiiChapter2:SeriesGeneration72-1.
MathandStatistics:FindingtheDotProductofTwoVectors7Problem7Solution7HowItWorks82-2.
MathandStatistics:GeneratingPythagoreanTriples8Problem8Solution8HowItWorks92-3.
MathandStatistics:FindingaWeightedSum9Problem9Solution9HowItWorks102-4.
MathandStatistics:FindingthePercentileforEachElementinanArrayofNumbers10Problem10Solution10HowItWorks122-5.
MathandStatistics:FindingtheDominatorinanArray12Problem12Solution12HowItWorks132-6.
MathandStatistics:FindingtheMinimumNumberofCurrencyBillsRequiredforaGivenAmount13Problem13Solution13HowItWorks142-7.
MathandStatistics:FindingMovingAverages14Problem14Solution15HowItWorks15Contentsix2-8.
MathandStatistics:FindingaCumulativeSum16Problem16Solution16HowItWorks172-9.
RecursiveSeriesandPatterns:GeneratingRecursiveStructuresbyUsingL-SystemGrammar17Problem17Solution17HowItWorks182-10.
RecursiveSeriesandPatternsStep-by-StepGrowthofAlgae18Problem18Solution18HowItWorks192-11.
RecursiveSeriesandPatterns:GeneratingLogoCommandstoDrawaKochCurve20Problem20Solution20HowItWorks212-12.
RecursiveSeriesandPatterns:GeneratingLogoCommandstoDrawaSierpinskiTriangle21Problem22Solution22HowItWorks222-13.
RecursiveSeriesandPatterns:GeneratingFibonacciNumbersNonrecursively(MuchFaster)23Problem23Solution23HowItWorks242-14.
RecursiveSeriesandPatterns:GeneratingPermutations24Problem24Solution24HowItWorks25Contentsx2-15.
RecursiveSeriesandPatterns:GeneratingaPowerSetofaGivenSet26Problem26Solution26HowItWorks272-16.
Collections:PickingEverynthElement27Problem27Solution27HowItWorks282-17.
Collections:FindingtheLargerorSmallerofSeveralSequencesatEachIndex28Problem28Solution28HowItWorks302-18.
NumberTheory:GeneratingArmstrongNumbersandSimilarNumberSequences31Problem31Solution31HowItWorks332-19.
NumberTheory:GeneratingPascal'sTriangleNonrecursively34Problem34Solution35HowItWorks362-20.
GameDesign:FindingAllWinningPathsinanArbitraryTic-Tac-ToeBoard36Problem36Solution37HowItWorks382-21.
SeriesinGameDesign:SolvingGoFigure38Problem38Solution39HowItWorks40Contentsxi2-22.
MiscellaneousSeries:FindingMatchingPairsfromTwoUnsortedCollections41Problem41Solution41HowItWorks422-23.
MiscellaneousSeries:UsingaLookup-BasedApproach42Problem43Solution43HowItWorks432-24.
MiscellaneousSeries:SolvingtheFizzBuzzChallengeinaLINQOne-Liner44Problem44Solution45HowItWorks462-25.
MiscellaneousSeries:SolvingtheFizzBuzzChallengebyUsingSetTheory46Problem46Solution46HowItWorks47Summary48Chapter3:TextProcessing493-1.
SimulatingaT9WordSuggestion49Problem50Solution50HowItWorks513-2.
SimulatingaGestureKeyboard53Problem53Solution53HowItWorks543-3.
CloningPeterNorvig'sSpelling-CorrectionAlgorithm54Problem55Solution55HowItWorks57Contentsxii3-4.
ReversingaSentenceWordbyWord57Problem57Solution57HowItWorks583-5.
CreatingaWordTriangle58Problem58Solution58HowItWorks593-6.
FindingAnagrams59Problem59Solution59HowItWorks603-7.
CheckingforAnagramsWithoutSortingCharacters60Problem60Solution60HowItWorks613-8.
CreatingaRudimentaryProgrammingLanguageIdentifierandAutomaticSyntaxHighlighter62Problem62Solution62HowItWorks643-9.
CreatingaWord-LadderSolver66Problem66Solution66HowItWorks683-10.
FormattingontheFly69Problem69Solution70HowItWorks71Contentsxiii3-11.
SolvingEricLippert'sComma-QuibblingProblem71Problem72Solution72HowItWorks723-12.
GeneratingRandomSerials72Problem72Solution73HowItWorks733-13.
GeneratingAllSubstringsofaGivenString74Problem74Solution74HowItWorks753-14.
CreatingaScrabbleCheater75Problem75Solution75HowItWorks773-15.
FindingAlltheSubsequencesofaGivenString79Problem79Solution79HowItWorks803-16.
SqueezingaParagraphtoFillTightly82Problem82Solution82HowItWorks833-17.
PrintingtheLinesofaSong83Problem83Solution84HowItWorks85Contentsxiv3-18.
MiningAbbreviationsandFullFormsfromNewsArticles85Problem85Solution85HowItWorks86Summary87Chapter4:RefactoringwithLINQ894-1.
ReplacingLoopsbyUsingLINQOperators89AGeneralStrategytoTransformaLooptoaLINQQuery904-2.
TheAnyOperator91Problem91Solution91HowItWorks914-3.
TheAllOperator91Problem91Solution91HowItWorks914-4.
TheTakeOperator92Problem92Solution92HowItWorks924-5.
TheSkipOperator92Problem92Solution93HowItWorks934-6.
TheTakeWhileOperator93Problem93Solution93HowItWorks93Contentsxv4-7.
TheSkipWhileOperator94Problem94Solution94HowItWorks944-8.
TheWhereOperator95Problem95Solution95HowItWorks954-9.
TheZipOperator95Problem95Solution95HowItWorks964-10.
OrderByandOrderByDescendingOperators96Problem96Solution96HowItWorks974-11.
TheDistinctOperator97Problem97Solution97HowItWorks974-12.
TheUnionOperator98Problem98Solution98HowItWorks984-13.
TheIntersectOperator99Problem99Solution99HowItWorks99Contentsxvi4-14.
TheExceptOperator100Problem100Solution100HowItWorks1004-15.
TheConcatOperator101Problem101Solution101HowItWorks1014-16.
TheSequenceEqualOperator101Problem101Solution101HowItWorks1024-17.
TheOfTypeOperator103Problem103Solution103HowItWorks1034-18.
TheCastOperator103Problem103Solution103HowItWorks1034-19.
TheAggregateOperator104Problem104Solution104HowItWorks1044-20.
ReplacingNestedLoops105TheSelectManyOperator105RemovingNestedLoopsbyUsingSelectMany105ReplacingIf-ElseBlocksInsideaLoop106Contentsxvii4-21.
RunningCodeinParallelUsingAsParallel()andAsOrdered()Operators106Problem107Solution107HowItWorks108Summary108Chapter5:RefactoringwithMoreLINQ1095-1.
GettingMoreLINQ1095-2.
UsingtheScanOperator109Problem109Solution109HowItWorks1105-3.
UsingtheSliceOperator110Problem110Solution110HowItWorks1115-4.
UsingtheInterleaveOperator111Problem111Solution111HowItWorks1125-5.
UsingtheWindowedOperator113Problem113Solution113HowItWorks1145-6.
UsingtheCartesianOperator115Problem115Solution115HowItWorks115Contentsxviii5-7.
UsingthePartitionOperator116Problem116Solution117HowItWorks1185-8.
UsingtheIndexOperator118Problem118Solution119HowItWorks1195-9.
UsingthePairWiseOperator119Problem119Solution120HowItWorks1205-10.
TheForEachOperator121Problem121Solution121HowItWorks1215-11.
UsingtheMinBy/MaxByOperator122Problem122Solution122HowItWorks122Summary122Chapter6:CreatingDomain-SpecificLanguages1236-1.
FeeltheDifference1236-2.
CreatingaSimpleDSLforMathematicians124Problem124Solution124HowItWorks1286-3.
TestingArmstrongbyUsingNUnit129Problem129Solution129HowItWorks133Contentsxix6-4.
ExposingArmstrongasanExternalDSL133Problem133Solution134HowItWorks1396-5.
CloningHandyF#FunctionsbyUsingLINQ139Problem140Solution140HowItWorks1456-6.
LazilyGeneratingItemsfromaRecurrenceRelation146Problem146Solution147HowItWorks149Summary149Chapter7:StaticCodeAnalysis1517-1.
FindingVerboseTypeNamesinthe.
NET3.
5Framework151Problem151Solution151HowItWorks1527-2.
FindingtheNumberofOverloadsforaMethod152Problem153Solution153HowItWorks1547-3.
FindingtheSizeofaNamespace154Problem154Solution154HowItWorks1557-4.
FindingtheCode-to-Comment(C#Style)Ratio156Problem156Solution156HowItWorks157Contentsxx7-5.
FindingtheSizeofTypes158Problem158Solution158HowItWorks1597-6.
GeneratingDocumentationAutomatically159Problem159Solution159HowItWorks1607-7.
FindingInheritanceRelationships161Problem161Solution161HowItWorks1627-8.
LocatingComplexMethods162Problem162Solution163HowItWorks164Summary164Chapter8:ExploratoryDataAnalysis1658-1.
AnalyzingtheTitanicSurvivorsDataset165Problem166Solution166HowItWorks167Problem168Solution168HowItWorks1708-2.
ConvertingSurveyMonkeyResultstoCSV170Problem170Solution170HowItWorks172Contentsxxi8-3.
AnalyzingTrendsinBabyNames172Problem173Solution173HowItWorks1778-4.
AnalyzingStockValues177Problem177Solution177HowItWorks1798-5.
AnalyzingGitLogs179Problem180Solution180HowItWorks181Problem182Solution182HowItWorks1848-6.
AnalyzingMovieRatings184Problem185Solution185HowItWorks1878-7.
IdentifyingFlowersbyUsingMachineLearning191Problem191Solution191HowItWorks193Summary193Chapter9:InteractingwiththeFileSystem1959-1.
ComparingTwoCSVFiles195Problem195Solution195HowItWorks196Contentsxxii9-2.
FindingtheTotalFileSizeinaDirectory197Problem197Solution197HowItWorks1979-3.
CloningLINUXHeadandTailCommands197Problem198Solution198HowItWorks1999-4.
LocatingFileswiththeSameName(PossibleDuplicates)199Problem199Solution200HowItWorks2009-5.
FindingExact-DuplicateFiles200Problem200Solution200HowItWorks2019-6.
OrganizingDownloadsAutomatically201Problem201Solution201HowItWorks2029-7.
FindingFilesModifiedLastWeek202Problem202Solution203HowItWorks2039-8.
LocatingDeadFiles(FileswithZeroBytes)203Problem203Solution204HowItWorks204AppendixA:LeanLINQTips205Tip1205Explanation205ContentsxxiiiTip2205Explanation205Tip3206Explanation206Tip4206Explanation206Tip5206Explanation206Tip6206Explanation206Tip7207Explanation207Tip8207Explanation207Tip9207Explanation207Tip10207Explanation207Tip11208Explanation208Tip12208Explanation208Tip13208Explanation208Tip14208Explanation208Tip15209Explanation209Tip16209Explanation209ContentsxxivTip17209Explanation209AppendixB:TamingStreamingDatawithRx.
NET211ABriefExplanationoftheInterfaces213GettingRx.
NET213UsingRx.
NETinLINQPad213CreatingObservablesandSubscribing216Range216Repeat217Never217Interval217Generate217ToObservable219CreatingObservablesfrom.
NETEvents219Subscribe220CombiningObservableCollections220Concat220Merge221Amb223Zip223PartitioningObservables225Window225Time-TaggingObservables226Timestamp226TimeInterval227Rx.
NETShowcase228CreatingaSignatureCaptureScreen228LiveFileSystemWatcher229Summary230Index231xxvAbouttheAuthorSudiptaMukherjeeisanexperiencedprogrammer.
BorninShibpur,atownintheHowrahdistrictofWestBengalinIndia,hegrewupinBally,anothersmalltownintheHowrahdistrict.
HehasbeenworkingwithC#andLINQsincetheywerefirstreleased,andisanenthusiasticadvocateforLINQ.
Sudiptaisaprolificauthor,whosepreviousbooksincludeDataStructuresUsingC(http://goo.
gl/pttSh)and.
NET4.
0Generics:Beginner'sGuide(http://goo.
gl/LwVmZ5).
Hisinterestsaredatastructure,algorithms,textprocessing,machinelearning,naturallanguageprocessing,programminglanguages,andtoolsdevelopment.
Whennotworkingathisdayjoborwritingbooks,Sudiptalikesspendingtimewithhisfamilyandfollowinghispassionofsketchingandpainting.
SudiptalivesinBangaloreandcanbecontactedviae-mailatsudipto80@yahoo.
comoronTwitter@samthecoder.
xxviiAbouttheTechnicalReviewerFabioClaudioFerracchiatiisaseniorconsultantandasenioranalyst/developerusingMicrosofttechnologies.
HeworksatBluArancioSpA(www.
bluarancio.
com)asasenioranalyst/developerandMicrosoftDynamicsCRMSpecialist.
HeisaMicrosoftCertifiedSolutionDeveloperfor.
NET,aMicrosoftCertifiedApplicationDeveloperfor.
NET,aMicrosoftCertifiedProfessional,andaprolificauthorandtechnicalreviewer.
Overthepasttenyears,he'swrittenarticlesforItalianandinternationalmagazinesandcoauthoredmorethantenbooksonavarietyofcomputertopics.
xxixAcknowledgmentsAbooklikethiscan'tbepublishedwithoutcontinuoussupportfromthepublisher,editors,andthetechnicalreviewer.
IamverythankfultoJamesT.
DeWolfandKevinWalterofApressforbeingpatientandsupportive.
Ihadincrediblesupportfrommydevelopmenteditor,RussellJones.
IalsowanttothankFabioClaudioFerracchiatiforhisinvaluablehelpinreviewingandrunningeachandeveryprogramthatIwrote.
Thanksalot,gentlemen.
Anybodywhohaseverwrittenatechnicalbookwillprobablytellyouthatitisnoteasytofollowthispathuntiltheend.
Itrequiresalotofpatienceandsupport.
ThankstoGod,Ihavealotapatience.
AndIhadtremendoussupport,especiallyfrommywife,Mou,andeverybodyinmyfamily.
Thankyou,sweetheart!
Lastbutnotleast,IwanttothankGodonceagainforgivingmemylittleangel,Sohan.
Itissuchajoytobewithhim.
Ihavelearnedalotfromhim;hisperseveranceespeciallyhashelpedmeovercomesomeofmyownstumblingblocksinlife.
xxxiIntroductionThisbookwon'tteachyouthebasicsofLINQ.
Itwillteachyouhowtouseitappropriately.
Havingajackhammerisgreatonlyifyouknowhowtouseitproperly;otherwise,youarenotmuchbetteroffthansomeonewithahammer.
LINQispowerful.
Powerfulbeyondmeasure.
Ihopeyouwillseesomeofthatpowerbyfollowingtheexamplesinthebook.
Hereisabriefwalk-throughofthechapters:Chapter1:ThinkingFunctionallyOurgenerationofprogrammershasbeenraisedwithobject-orientedprogrammingideas.
Thisinitialchapterisdedicatedtoshowinghowfunctionalprogrammingisdifferentfromobject-orientedprogramming.
Thischaptersetsthecontextfortherestofthebook.
Chapter2:SeriesGenerationThischapterhasrecipesforgeneratingseveralseriesusingLINQ.
Forexample,itshowshowtogeneraterecursivepatternsandmathematicalseries.
Chapter3:TextProcessingTextprocessingisablankettermusedtocoverarangeoftasks,fromgenerationoftexttospell-checking.
ThischaptershowshowtouseLINQtoperformseveraltext-processingtasksthatareseeminglycommonplace.
Chapter4:RefactoringwithLINQLegacycodebasesgrow,andgrowfast—fasterthanyoumightthinktheywould.
Maintainingsuchhugecodeblockscanbecomeanightmare.
WhenisthelasttimeyouhadtroubleunderstandingwhatsomecomplexloopcodedoesThischaptershowshowtorefactoryourlegacyloopstoLINQ.
Chapter5:RefactoringwithMoreLINQMoreLINQisanopensourceLINQAPIthathasseveralmethodsforslicinganddicingdata.
SomeoftheseoperatorsareeasilycomposableusingotherLINQoperators.
Butsomearealsotrulyhelpfulinminimizingthetotalnumberofcodelines.
ThischaptershowshowyoucanbenefitfromusingMoreLINQ.
Chapter6:CreatingDomain-SpecificLanguagesUsingLINQDomain-specificlanguages(DSLs)aregaininginpopularitybecausetheyconveytheintentoftheprogrammerverynicely.
ThischaptershowshowtocreateseveralDSLs.
Chapter7:StaticCodeAnalysisLINQtreatseverythingasdata.
Codeisalsodata.
Thischaptershowshow,byusingLINQ-to-Reflection,youcandoalotofmetaprogrammingin.
NET.
IntroductionxxxiiChapter8:ExploratoryDataAnalysisThischaptershowshowyoucanuseLINQtosolveseveraldataanalysistasks.
Ihopeyoufindthischapterenjoyable,becausetheexamplesarereallyinteresting.
Chapter9:InteractionwiththeFileSystemIhavealwayswishedthatWindowsExplorerincludedbetterfeaturesforqueryingthefilesystem.
However,byusingLINQ,youcanbuildyourowncustomqueriesquickly.
Thischaptershowsyousomeexamplesthatcanbeusefulintherealworld.
AppendixA:LeanLINQTipsLINQisanAPIthatprovidesseveraloperatorstoexpressyourintent.
Althoughthatissuperpowerful,itcomeswithaprice.
Ifyoudon'tknowhowtheseoperatorsworkinternally,youmightendupusingacombinationthatresultsinslowercode.
Thisappendixprovidessomehard-earnedknowledgeabouthowtoglueLINQoperatorstogetherforoptimumperformance.
AppendixB:TamingStreamingDatawithRx.
NETBeingreactiveisimportantwhendealingwithstreamingdata.
Microsoft'süber-coolframework,Rx.
NET,isafantasticAPIfordealingwithstreamingdataandasyncoperations.
ThisappendixshowshowtouseRx.
NETtotacklestreamingdata.
最近我们是不是在讨论较多的是关于K12教育的问题,培训机构由于资本的介入确实让家长更为焦虑,对于这样的整改我们还是很支持的。实际上,在云服务器市场中,我们也看到内卷和资本的力量,各大云服务商竞争也是相当激烈,更不用说个人和小公司服务商日子确实不好过。今天有看到UCloud发布的夏季促销活动,直接提前和双十一保价挂钩。这就是说,人家直接在暑假的时候就上线双十一的活动。早年的双十一活动会提前一周到十天...
racknerd发表了2021年美国独立日的促销费用便宜的vps,两种便宜的美国vps位于洛杉矶multacom室,访问了1Gbps的带宽,采用了solusvm管理,硬盘是SSDraid10...近两年来,racknerd的声誉不断积累,服务器的稳定性和售后服务。官方网站:https://www.racknerd.com多种加密数字货币、信用卡、PayPal、支付宝、银联、webmoney,可以付...
官方网站:点击访问CDN客服QQ:123008公司名:贵州青辞赋文化传媒有限公司域名和IP被墙封了怎么办?用cloudsecre.com网站被攻击了怎么办?用cloudsecre.com问:黑客为什么要找网站来攻击?答:黑客需要找肉鸡。问:什么是肉鸡?答:被控的服务器和电脑主机就是肉鸡。问:肉鸡有什么作用?答:肉鸡的作用非常多,可以用来干违法的事情,通常的行为有:VPN拨号,流量P2P,攻击傀儡,...
syntaxhighlighter为你推荐
您的iphonelowercasecss更新iosspeakingphp伺服器win7思科ipad支持ipad支持ipad支持ipad步骤ios
深圳域名空间 国外php主机 la域名 双11抢红包攻略 eq2 ca4249 ftp教程 新天域互联 柚子舍官网 hinet 傲盾官网 美国免费空间 河南移动m值兑换 如何用qq邮箱发邮件 卡巴斯基免费试用版 raid10 移动服务器托管 中国电信测速网站 东莞主机托管 全能空间 更多