精华内容
下载资源
问答
  • FPGA现状

    万次阅读 多人点赞 2019-07-16 19:51:42
     目前中国IC厂商FPGA这个细分领域和国外巨头的差距远远比其他领域要大。  FPGA技术门槛非常高,核心技术只掌握及其少数的公司手上,而且xilinx和atlera手头握有6000多项专利,对后进者形成很高的技术壁垒,...

      FPGA国内现状

      目前中国IC厂商在FPGA这个细分领域和国外巨头的差距远远比其他领域要大。

      FPGA技术门槛非常高,核心技术只掌握在及其少数的公司手上,而且xilinx和atlera手头握有6000多项专利,对后进者形成很高的技术壁垒,国内厂商要么和国外巨头专利交叉授权,要么花钱买专利,但当前我们并没有多少专利可以和xilinx和altera进行交叉许可,购买难度更大,这不仅仅是资金的问题。从canyon bridge收购latTIce被美国否决来看,凡涉及到美国国家安全的高新技术公司,我国是不可能通过收购来获得的,latTIce在行业内充其量是第二团队尚且如此,业界领先的企业我国更难获得。

      国内FPGA的发展只能靠自主,虽然这个过程可能会很漫长,但除此之外没有更好的选择。芯片的自主设计是实现信息安全的最底层保障。这也是为什么与信息处理相关的基础芯片(手机芯片、PC处理器等)需要实现自制的原因。在目前FPGA的技术和供给几乎全部来源于美国,包括欧洲和日本等技术强国也没有掌握到核心技术。

      对于中国而言,国家促进集成电路发展已经提升至国家战略。同时特殊的应用场景(军工、导弹、航天航空)的要求的FPGA,国外对中国是禁运的,这也从另一方面促成国内FPGA自制的契机。目前,国内生产的FPGA主要用于军工、通讯、航空航天等领域。

      在民用领域,国内是FPGA需求最大的市场,现在Xilinx、Altera最大的客户就在中国,通讯市场华为中兴烽火包揽了全国60%以上的量。中国FPGA的发展红利在于需求市场足够大,有需求就要有相应产品来支持。这对于国内厂家就是机会,目前,同方国芯片已经和华为中兴合作,想实现一部分的国产替代。

      最后,从技术角度来说,我们已经不像10年前基本不懂核心技术。国内半导体产业链的不断成熟完善,以及芯片设计能力的不断加强,我们自己可以自主设计和流片ARM架构的手机CPU(海思麒麟、大唐联芯),并成功实现商业化,这在10年前都不敢相信。在我们在过去积累的技术沉淀和创新能力,已经使得我们在FPGA的特定应用领域(军工、通讯)实现一定程度上的自我供给。未来也可能类似于CPU+FPGA用于云数据中心节中,这些应用领域都是信息高度敏高的地方,使用自主设计的芯片更能实现安全可控。

    FPGA市场现状和未来趋势如何?

      中国FPGA的机遇

      为了满足经济发展和国防需求,打破美国的垄断,中国政府多年来投入了数百亿科研经费,通过逆向工程方式仿制美国对我禁运的FPGA产品。但由于知识产权、生产工艺和软件技术等多方面的限制,仿制品种有限,技术无法突破,难以满足国家安全的需要。随着国际形势的变化,通过走私进口禁运产品的渠道可能被切断,进口的关键芯片也可能被人为地嵌入后门通道或定时炸弹等模块,严重危及国家安全。

      我们不得不承认国产FPGA产业与国际巨头还存在较大的差距,不论从产品性能、功能、功耗、软件、应用支撑上都有差距。甚至成本上,我们的优势也不大。

      但是,中国拥有超过50亿元的FPGA市场。“十二五”期间,中国的可编程器件市场仍将保持年均30%以上的增长速度。中国尤其是北京等重要研究部门急需也长期需要FPGA用于国家安全和重点应用,比如航天航空、信息安全、知识产品保护等。此外,中国电子产品市场要求敏捷快速的研发周期和少量多样的产品形态,最适合FPGA应用。

      因此,中国FPGA产业享有巨大的发展空间,机遇与挑战并存。

      全球FPGA市场发展前景展望

      当今,半导体市场格局已成三足鼎立之势,FPGA,ASIC和ASSP三分天下。市场统计数据表明,FPGA已经逐步侵蚀ASIC和ASSP的传统市场,并处于快速增长阶段。

      在全球市场中,Xilinx、Altera两大公司对FPGA的技术与市场仍然占据绝对垄断地位。两家公司占有将近90%市场份额,专利达6000余项之多,而且这种垄断仍在加强。同时,美国政府对我国的FPGA产品与技术出口进行苛刻的审核和禁运,使得国家在航天、航空乃至国家安全领域都受到严重制约。因此,研发具有自主知识产权的FPGA技术与产品对打破美国企业和政府结合构成的垄断,及国家利益意义深远。

      作为一种可编程逻辑器件,FPGA在短短二十多年中从电子设计的外围器件逐渐演变为数字系统的核心。伴随半导体工艺技术的进步,FPGA器件的设计技术取得了飞跃发展及突破。通过FPGA器件的发展历程来看,今后仍将朝下以下几个方向发展:

      ·高密度、高速度、宽频带、高保密;

      ·低电压、低功耗、低成本、低价格;

      ·IP软/硬核复用、系统集成;

      ·动态可重构以及单片集群;

      ·紧密结合应用需求,多元化发展。

      此外,集成了FPGA架构、硬核CPU子系统(ARM/MIPS/MCU)及其他硬核IP的芯片已经发展到了一个“关键点”,它将在今后数十年中得到广泛应用,为系统设计人员提供更多的选择。例如,以应用为导向,在受专利保护的FPGA平台架构上无缝集成特定功能模块,以形成具备行业竞争优势(高性价比)的独特产品。Altera、Cypress®半导体、Intel®和Xilinx®公司等供应商相继在最近一年发布或者开始发售SoCFPGA器件。

      在FPGA领域,Xilinx和Altera长期稳坐第一第二的位置。根据最新Form-10K数据显示,其分别占有48%和41%的市场份额。其中Xilinx净销售额为23.1亿美元,净收入为6.3亿美元;Altera净销售额为19.5亿美元,净收入为7.8亿美元。这两家公司一直以来是市场和技术的领头羊,而剩余的市场份额被LatTIce占据多数。

      为了在竞争中占据主动,Xilinx与Altera新近分别宣布其下一代FPGA产品都将采用高k金属栅技术的 28nm工艺,以满足诸如云计算、移动互联网和3G应用等领域所不断增长的带宽需求。由于PLD器件采用更高技术的工艺节点制造,无疑可以降低成本、提升性能,尤其是能够改进一直以来为ASIC所诟病的功耗水平,以适应更广阔的设计应用。

      Xilinx和Altera虽然控制世界将近90%的FPGA市场,但是他们的产品是大多以纯FPGA为主。“平台化”已成为FPGA一个发展趋势,尽管Xilinx和Altera在FPGA“平台化”方面在最近几年也有涉及,但概念和特点比较简单,没有完全形成气候。

      权威市场调研机构Gartner 2010年初的预测数据表明,FPGA正处于一个加速增长的市场势态中。未来5年,市场平均增长幅度超过12.6%,这种增长幅度远大于ASIC和ASSP市场。同时,市场数据表明其行业平均毛利大于60%。FPGA行业需要更大的市场规模,以吸引更多的使用者。预计未来5年,随着产量增加,成本进一步降低,FPGA市场份额将会持续增大。

     

    今天先就从FPGA开始说起吧。

    FPGA——现场可编程门阵列,是指一切通过软件手段更改、配置器件内部连接结构和逻辑单元,完成既定设计功能的数字集成电路。换个简单通俗的介绍方式,就好比一个全能运动员,游泳如孙杨、跨栏像刘翔、网球能力堪比李娜,FPGA就是这么神奇的可以通过设定而实现各种复杂的功能电路。FPGA的核心优点:可编程灵活性高、开发周期短、并行计算可编程灵活性高。同时FPGA也有自身的很多需要解决的问题,FPGA限制因素:成本、功耗和编程设计。

    关于国产FPGA发展现状以及未来发展前景趋势详解

    市场空间:

    根据权威市场调研机构Gartner数据显示,2014年全球FPGA市场总规模达到50亿美金,其中,中国的市场份额有15亿美金,中国市场占全球市场的三分之一。分析机构预计2015年至2020年全球FPGA市场的年复合增长率为9%,到2020年全球FPGA 市场规模将达84亿美金。

    具体细分领域来看,在FPGA被用于深度学习之前,FPGA主要有3大应用方向:(1)通信设备的高速接口电路设计,FPGA可以用来做高速信号处理,一般如果AD采样率高,数据速率高,这时就需要FPGA对数据进行处理,比如对数据进行抽取滤波,降低数据速率,使信号容易处理,传输,存储;(2)数字信号处理方向/数学计算方向,包括图像处理,雷达信号处理,医学信号处理等,优势是实时性好,用面积换速度,比CPU快的多;(3)SOPC,即利用FPGA这个平台搭建的一个嵌入式系统的底层硬件环境,然后设计者在上面进行嵌入式软件开发。

    FPGA国际市场

    1984年Xilinx刚刚创造出FPGA时,它还是简单的胶合逻辑芯片,而如今在信号处理和控制应用中,它已经取代了自定制专用集成电路(ASIC)和处理器。短短30年的历史长河中,超过上百家行业巨头杀入这个市场,不过最后大部分都铩羽而归。这些公司包括了Intel、Philips、Agere Systems、AMD以及摩托罗拉等国际知名的芯片设计厂商。这是因为,赛灵思Altera在这个领域深耕几十年,两家持续不断地军备竞赛,占据了90%市场,提前布局的专利保护对后来者形成了强大的市场壁垒,几乎封锁了所有通向FPGA商用产品的通途。而MicrosemilatTIce,QuickLogic曾经挑战他们的霸主地位,但是他们的市场份额加起来也不到10%。而最后也因为种种原因市场份额不断下滑,并没有实现对双寡头的突破和挑战。

    可以说,FPGA是全球芯片设计业最需要技术和垄断突破的产品之一,在所有的芯片领域中属于最难以突破和打破格局的技术产品。

    Xilinx:发明的FPGA颠覆了半导体世界,创立了Fabless(无晶圆厂)的半导体模式。Xilinx的产品组合融合了 FPGA、SoC 和 3DIC 系列 All Programmable 器件,以及全可编程的开发模型,包括软件定义的开发环境等。产品支持 5G 无线、嵌入式视觉、工业物联网和云计算所驱动的各种智能、互连和差异化应用。2014年12月,Xilinx的20nm芯片实现量产,2015年Xilinx紧接着推出新的16nm FPGA和SoC,并采用新型存储器UltraRAM,因此继28nm和20nm之后,继续在行业中保持领先。公司产品纵向布局各个制程,因为20nm、28nm、40nm等制程的产品会在市场共存,以满足复杂度不同的各种应用。

    Altera:是世界上“可编程芯片系统”(SOPC)解决方案倡导者。结合带有软件工具的可编程逻辑技术、知识产权(IP)和技术服务,在世界范围内为14,000多个客户提供高质量的可编程解决方案。2015年,英特尔宣布以167亿美元收购FPGA厂商Altera。这是英特尔公司历史上规模最大的一笔收购。随着收购完成,Altera将成为英特尔旗下可编程解决方案事业部。在和Xilinx的制程战之争中,两家巨头各领风骚,Altera路线图中,最近的产品系列"Cedar"(替代Cyclone)采用了台积电16nm工艺将在2016年上半年交付使用。"Oak"系列采用英特尔的14nm工艺,于2016年下半年交付,"Sequoia"采用英特尔的10nm工艺,将于2018年上市Altera将赢得10nm工艺节点之战。

    LatTIce:LatTIce(是全球智能互连解决方案市场的领导者,也是全球第二大FPGA厂,提供市场领先的IP和成本低、功耗小、小尺寸的器件。产品主要有三大块:可编程逻辑;视频传输;毫米波解决方案。公司的最终用户主要是通讯、计算机、工业、汽车、医药、军事及消费品市场的原始设备生产商。在双大哥的夹击之下,LatTIce的路也是走的越发艰难,在中高端市场难以与前两者抗衡。

    中国的破局

    紫光集团想通过购买Lattice快速发展,受到美国外国投资委员会(CFIUS)的审查和特朗普政府的反对后收购以失败告终。那对于国内FPGA如何破局,如何发展,在无法通过外延引入技术的条件下,国内也只能通过人研发和技术积累打破当前的这种格局。

    京微雅格:公司聚集了最早在FPGA行业耕耘与尝试的一批技术精英,他们采用了SoC FPGA的战略,片上整合了DSP、Memory、MCU等单元的CME-GM7系列,试图通过整合的优势打破FPGA市场的壁垒。这个公司实际上有两条产品线:1、自身从头研发的,面向中低端市场的金山系列;2、收购美国CSwitch的产品线,面向高速通信市场。

    产品型号:M7华山系列;HR3纯FPGA低功耗系列;M5金山系列;M1衡山系列。

    不过比较可惜是,在特定的国内行情和市场环境下,公司在发出自己最强音后也由于种种原因走入困境,让自己举步维艰。FPGA对技术支持的门槛相当高,由于京微雅格没有办法做到Pin-Pin,所以需要每一个产品都要有技术工程师保持长时间的维护和跟进,但是产品的成功率还可能不到10%,这样的市场环境下,公司会陷入一种非常被动的局面,长时间的战略失误让京微雅格陷入了人才、资本和发展僵局。

    京微雅格的失败有很多值得思考的地方,FPGA产业的成功不仅在产品,还在于产品线的生态系统平台建设。这个生态系统平台包括:FPGA芯片、EDA工具、IP库……缺一不可。完善的生态系统能够提供给用户更全面的设计资源,从而突出系统优势,迅速适应各种市场应用变化,快速抢占市场高地。同时,市场上的认可是决定芯片厂商能不能在高速的产品迭代中实现技术和资金的积累的重要因素,任何不被市场接受的高性能产品都是失败的。

    黄埔军校之后的国内格局

    京微雅格在FPGA上的努力和成果给了本土后继者很大的动力;京微雅格很多的技术研究人员在进入了后续成立的上海安路科技,AGM和高云半导体团队里。也就是说,京微雅格在中国FPGA领域的开山鼻祖一样的存在使得散乱后的技术人才分散都国内其余的公司中,成为了人才与技术的黄埔军校。

    高云半导体:高云半导体的CEO朱璟辉和SVP宋宁都来自于Lattice团队,尤其是朱璟辉,从清华大学毕业后,1996年-2011年任职Lattice,历经七代FPGA产品的研发,曾获得11项美国专利,5项中国专利,目前还是科技部863计划的可编程器件重大专项的技术负责人。而另一个核心人物宋宁除了任职Lattice高工,还任职过Cadence高工。目前负责高云半导体FPGA全流程软件开发,对FPGA架构、硬件设计、软件研发同步开发有独到经验。所以,Synopsys为高云提供前SynplifyPro高云版端软件软件,也是中国唯一由新思授权的FPGA前端软件。

    低密度非易失性FPGA已经完全取代传统CPLD,并成为低密度FPGA市场的绝对主力,每年约5亿美元的市场销量。可以说,高云半导体切入和对标的是Altera MAX V10和Lattice XO2/3;100万门-500万门易失性FPGA产品,采用台积电55nm基于SRAM,可与Xillinx Spartan及Altera Cyclone系列PK。近日,高云宣布研发成功了GW3AT-100,这是国内首款28纳米中高密度FPGA,由台积电代工。

    上海安路科技:上海安路信息科技有限公司成立于2011年,总部位于浦东张江,创始人为文余波。公司创始人及核心团队来自海外高级技术管理人才、国外FPGA公司产品开发骨干以及学术界资深FPGA科研人员组成。公司研发团队60%以上是复旦、交大、UCLA、UIUC等国内外高校的硕士或者是博士,具有很强的研究能力和设计水准。核心工作成员大多数在世界前五的FPGA公司和EDA公司中从事数十年以上技术研和管理工作,参与开发了多款世界领先的FPGA 芯片和最好的EDA 开发系统。安路当前已经形成了从小规模CPLD(Elf-300、Elf-650)到2百万门FPGA(EG-4、AL3-6、AL3-10、AL3-S10、EG-20、EG-D20)的系列器件,以及一颗已经实际应用了的千万门级FPGA IP核(AL3-130)。华大半导体入股之后,其作为国内最大的国产EDA软件商华大九天与作为自主FPGA厂商安路科技,双方在EDA工具上的合作空间,包括互补性上,都具有很大的想象力。

    AGM:上海遨格芯微电子有限公司(AGM)成立于2012年,是国内领先的以可编程逻辑技术为基础,提供应用市场SoC芯片的半导体集成电路无生产线设计公司。由来自美国硅谷知名可编程逻辑芯片企业的团队和国内资深工程团队创办。AGM是以开发自主产权的编译软件开始,兼容切入现有FPGA软件的生态链。看到智能手机风口的AGM也不失时机出了一款用于智能手机和loT的FPGA芯片,在助力客户逐渐退出低端市场之时,把握住机会,通过价格优势抢夺低端市场。通过最近几年的不断地产品迭代和市场扩展,AGM悄悄地积累了比较稳定的客户,产品线也开始丰富起来,成为了国内FPGA的一批发展迅猛的黑马。

    同创国芯:国产化替代率最大,利润最高的军工院所应用市场,基本上被同创国芯(深圳国微)垄断。连当年的竞争对手成都华微,也是基本没有了声响。而且,同创国芯的民用拳头产品Titan PGT30G已量产,该系列芯片可编程逻辑器件采用了完全自主产权的体系结构和主流先进制造工艺,带有DDR3和PCIe接口,是国内少有的千万门级FPGA。另外采用了台湾联华UMC代工先进的40nm制程,在国内领先。正在中兴通讯,烽火通信试用。

    FPGA行业的发展靠自力更生

    国内FPGA的发展只能依靠自主,这个必然需要漫长的等待和尽心的呵护,但除此之外没有更好的选择。芯片的自主设计是实现信息安全的最底层保障。这也是为什么与信息处理相关的基础芯片(手机芯片、PC处理器等)需要实现自制的原因。在目前FPGA的技术和供给几乎全部来源于美国,包括欧洲和日本等技术强国也没有掌握到核心技术。

    对于中国而言,国家促进集成电路发展已经提升至国家战略。同时特殊的应用场景(军工、导弹、航天航空)要求的FPGA是涉及到国家安全和领土安全的,对芯片的要求也会比较严谨,但这一块本身高性能的产品国外对中国是禁运的,这也从另一方面促成国内FPGA自己满足的契机。目前,国内生产的FPGA主要用于军工、通讯、航空航天等领域。

    在民用领域,国内是FPGA需求最大的市场,现在Xilinx、Altera最大的客户就在中国,通讯市场华为中兴烽火包揽了全国60%以上的量。同时人工智能芯片需求的高速并行计算对FPGA芯片的需求也在几十亿美元的数量级,而国内是人工智能高速芯片发展最快,需求最大的市场。中国FPGA的发展红利在于需求市场足够大,有需求就要有相应产品来支持。这对于国内厂家就是机会,目前,同方国芯片已经和华为中兴合作,想实现一部分的国产替代。

    最后,从技术角度来说,我们已经不像10年前基本不懂核心技术。国内半导体产业链的不断成熟完善,以及芯片设计能力的不断加强,我们自己可以自主设计和流片ARM架构的手机CPU(海思麒麟、大唐联芯),并成功实现商业化,这在10年前都不敢相信。在我们在过去积累的技术沉淀和创新能力,已经使得我们在FPGA的特定应用领域(军工、通讯)实现一定程度上的自我供给。未来也可能类似于CPU+FPGA用于云数据中心节中,这些应用领域都是信息高度敏高的地方,使用自主设计的芯片更能实现安全可控。

    后面,我还要说说我和IC界的朋友交流和我自己的一些感悟。

    1.大家为什么对于技术的追求会停留下来。因为对于很多人来说,等到技术产生产品并融到资金后,实现技术积累到资本积累了。技术再产生的价值短时间内比资本产生的价值会慢很多,多数人会从技术上转向资本市场。这样一遍遍反反复复,所以能看到在技术达到一定的平台后会长时间的原地踏步,后来者也会跟随前面人的脚步。

    2.所谓的产业扶持,切不可本末倒置和打着旗帜反革命。芯片不简单的是需要资本的支撑,因为不完善与不合理的资本炒作反而会使的行业在潮水退去后一地鸡毛。芯片更多的属于技术积累型行业,所有的产品和参数都需要技术员工在工作中不断地去突破和思考,而对于这样一群工程师来说,报酬如果不匹配劳动支出,行业内的技术人才出走与流失是再自然不过的事情了。因此,产业的扶持不仅仅是资本对公司层面的支撑,更需要落实到一个个基层中的技术员工。

    3.芯片行业起步容易,往上层走会很难。芯片做到一定程度后,不再是简单的技术积累能解决的,一定需要对物理和数学有比较深的认知,在整个高的角度去处理基础难点,而这对人才的需求地要求是非常高的。

    4.市场需求端,任何一种芯片从推出到应用,需要几代产品的更迭。国内芯片起步晚,产品性能和国外差距较大,因此会形成一种困局:国内应用端不用国内产品,国内产品更迭跟不上会导致公司倒闭或者产品无法持续更新。国外芯片行业干了几十年,技术路线上的坑和陷阱被先行者填补了很多,而芯片行业并不存在后发优势,之前别人留下的坑还会继续存在哪里,甚至还需要去避免国外厂商在探索过程中申请的成千上万的知识产权保护新增的坑。

    5.芯片行业的国产化任重而道远,我们需要在整个过程中慢慢的去探索。急功近利和空喊口号只不过给了投机分子空间可钻。呵护芯片行业同时也要提升技术人员的福利。

    展开全文
  • 线程池

    千次阅读 多人点赞 2018-08-19 22:18:08
    一、为什么会有线程池 1、创建和销毁线程是非常耗时和耗资源的 2、如果系统中并发了很多线程,会对系统的性能造成很大的影响。 线程池就是解决线程...这个线程池只有一个线程工作,也就是相当于单线程串行执...

    一、为什么会有线程池

    1、创建和销毁线程是非常耗时和耗资源的

    2、如果系统中并发了很多线程,会对系统的性能造成很大的影响。

    线程池就是解决线程声明周期和资源不足的问题。

    线程池是通过多个任务重复使用线程来家解决问题的。

    二、java提供的四种线程池

    1. newSingleThreadExecutor

    创建一个单线程的线程池。这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。

    自我解释:一个线程池中只能跑一个线程,单线程串行执行任务,但一个任务完成后才能进行下一个任务。

    2.newFixedThreadPool

    创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。

    自我解释:可以规定线程池的大小,小于这个数量就创建新线程。当达到这个数量,就只能有这些线程,别的任务等待运行的任务结束再使用线程。

    3. newCachedThreadPool(推荐用这个)

    创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,

    那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。

    自我解释:线程池的大小是根据jvm的大小而定的。当线程池的大小(核心线程池大小就是创建线程池的时候默认创建几个线程)大于正在执行的任务的数量的时候,会去自动释放那些空闲的线程,当任务增加,回去新添加线程。

    4.newScheduledThreadPool

    创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务的需求。

    自我解释:支持任务调度的线程池。

    三、ThreadPoolExecutor 及其构造方法参数

    核心的参数有:

    1、核心线程池大小  可以理解为系统最优的线程池数,线程池创建后会默认创建这个数的空闲线程

    2、最大线程池大小

    3、任务队列

     

    处理流程:

    1、当可执行的任务小于核心线程池数的时候,每加一个任务就新建一个线程

    2、当可执行的任务数达到核心线程池数的时候,新任务会放到任务队列中去

    3、当任务队列数量满了,并且最大线程池数大于核心线程池数,新任务就新建线程

    4、当需要执行的任务总数超过任务队列加最大线程池数时(也就是任务队列和最大线程池数都满了),就交给rejectHandle去做抛弃处理,策略有①直接舍弃、②抛异常 舍弃、或者③把任务队列中最前面那个干掉,重新尝试执行任务

     

    总结:在队列还没满的时候,一直都是多个任务重复的去使用线程。当队列满了,不大于最大线程池数,每加一个就创建一个线程。。。。。

    在阿里的开发手册中,不允许使用Executor去创建线程池,用ThreadPoolExecutor。因为使用Executor,都是默认的初始化参数。如果项目场景复杂的话,可能不好控制。

    参考:

    https://www.cnblogs.com/sharoncmt/p/7511126.html

    https://blog.csdn.net/wolf909867753/article/details/77500625/

     

    四、多线程相关小知识(个人理解)

    4.1、多线程的好处

    4.1.1、可以并行的执行多个线程,提高效率。这里的提高效率,不是说提高系统的性能,而是每个线程都有相应的带宽,多线程就是充分利用cpu资源。

    4.1.2、一般功能较复杂(用户注册,其他的操作放到多线程中,不然用户体验很不好)或者需要轮询操作的方法用到多线程。

    4.2、多线程小知识

    4.2.1 java中的多线程

    1、执行main函数的主线程 2、当堆内存中空间满了,jvm会调用gc线程。

    4.2.2 获取当前线程的名称(一般用于syso测试用,看执行的是哪个线程)

    Thread.currentThread.getName();

    4.2.3 每个线程都有自己私有的栈(程序计数器也是私有的),堆内存是线程共享的

    4.2.4 重点:cpu执行权和执行资格

    执行资格:你有cpu的执行资格,可以被cpu执行,但在处理的队列中

    执行权:正在被cpu执行

    临时阻塞状态:拥有执行权,但没有执行资格,在队列中。 (cpu在某一个时间点是只会执行一个线程的,但他会很快的切换,可以忽略理解为并行

    4.2.5 sleep和wait区别:

    sleep是Thread的,sleep会释放执行权和执行资格,但不会释放同步锁。

    4.2.6 什么时候会出现线程安全问题:

    1、多个线程同时操作共享数据  2、操作共享对象的代码有多行 经典案例:单例的懒汉式

    4.2.7 如何解决多线程安全问题

    加同步锁,就是一个线程在执行这个方法或者这个代码块,别的线程不让进去,处于阻塞状态。

    加锁一般有Synchronized 和lock。

     

    1、Synchronized: 一定要是同一个对象,不然锁不住

    可以加在代码块中,也可以加在方法上(方法上的锁代表this,当前类的实例),加在静态方法上(锁指的是类名class(),当前类的字节码文件)

    出现安全的两种情况:

    ①多个线程同时执行一个Runnable对象 这种情况,共享数据就是Runnable对象的成员变量,下图的num

    首先,会实例化Runnable对象。在堆内存中开辟内存空间,Object实例化一个object对象指向一个地址。

    再实例化四个线程,每个线程执行run方法的时候,用的Runnable对象都是一个,所以Object对象也是一个。所以可以用this,this指的是 Runnable对象。

    ②如果多个线程执行不同Runnable对象,那就不能用this了。 这种情况,共享数据就是Runnable对象构造中传入的对象

    this可以理解为当前类的实例,不同的Runnable对象肯定都是new出来的,所以this不行。可以在每个Runnable 构造函数中传入同一个一个Person 对象,然后用同一个Person对象去锁。 

    2、sleep wait notify (后面两种都是Object的方法)

    sleep是Thread的staic方法,sleep是释放执行权和执行资格  但不会释放锁

    wait 会释放执行权,并且释放锁(试想,你不释放锁,谁去帮你notify)

    notify是随意唤醒一个wait的线程,notifyAll 是唤醒所有的wait线程

    wait的应用场景:例如一个线程A是输入 小明 男  小红 女  (根据逻辑判断一次只会set一个人,set一个 再set另一个),一个线程B是获取小明 小红的性别。如果A获得执行权,执行个没完。我们想set一个 get一个,就可以用到wait。Aset一个就wait,Bget一个,然后唤醒A,自己(B)wait,A醒了set,唤醒B,自己wait。(具体代码可以自行百度,我就是用大白话说说)

    2、lock

     Lock lock = new ReentrantLock();一定要在finally中释放锁,不然会造成死锁。

    这个引申到为什么ConcurrentHashMap比hashTable好,同样是线程安全的,但HashTable是锁住的整个map,如果并发很大的话,非常影响性能。ConcurrentHashMap是采用的分段锁,底层采用了volatile,final,CAS等lock-free技术来减少锁竞争对于性能的影响(这句话面试可以借用下。。。。。)。ConcurrentHashMap的分段锁称为Segment。就是说在put的时候,会根据ConcurrentHashMap里面的hash函数决定放到哪个Segment下。然后Segment的put使用的lock锁,只会锁自己的Segment。不会锁整个map。

    但是,1.8中ConcurrentHashMap 不用了Segment,采用了 node数组 cas Synchronized来减少锁竞争带来的性能问题。(具体源码还没看)

    每次判断锁,很消耗性能的。所以单线程的话,就没必要用带锁的。

    1.7 ConcurrentHashMap 源码

    展开全文
  • 面试专题:Linux运维精华面试题

    千次阅读 多人点赞 2019-03-14 15:31:53
    下面是一名资深Linux运维求职数十家...他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术 运维又包括很多种,有DBA运维、网站运维、虚拟化运维、监控运维、游戏运维等等 2...

    下面是一名资深Linux运维求职数十家公司总结的Linux运维面试精华,助力大家跳槽找个高薪好工作。

     

    1、什么是运维?什么是游戏运维

    1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,
    在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术
    运维又包括很多种,有DBA运维、网站运维、虚拟化运维、监控运维、游戏运维等等

    2)游戏运维又有分工,分为开发运维、应用运维(业务运维)和系统运维
    开发运维:是给应用运维开发运维工具和运维平台的
    应用运维:是给业务上线、维护和做故障排除的,用开发运维开发出来的工具给业务上线、维护、做故障排查
    系统运维:是给应用运维提供业务上的基础设施,比如:系统、网络、监控、硬件等等

    总结:开发运维和系统运维给应用运维提供了“工具”和“基础设施”上的支撑
    开发运维、应用运维和系统运维他们的工作是环环相扣的

    2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
    游戏运营要做的一个事情除了协调工作以外
    还需要与各平台沟通,做好开服的时间、开服数、用户导量、活动等计划

    3、现在给你三百台服务器,你怎么对他们进行管理?
    管理3百台服务器的方式:
    1)设定跳板机,使用统一账号登录,便于安全与登录的考量。
    2)使用salt、ansiable、puppet进行系统的统一调度与配置的统一管理。
    3)建立简单的服务器的系统、配置、应用的cmdb信息管理。便于查阅每台服务器上的各种信息记录。 

    4、简述raid0 raid1 raid5 三种工作模式的工作原理及特点

    RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据
    还有一个大功能,多块盘放在一起可以有冗余(备份)
    RAID整合方式有很多,常用的:0 1 5 10

    RAID 0,可以是一块盘和N个盘组合 

    其优点读写快,是RAID中最好的

    缺点:没有冗余,一块坏了数据就全没有了

    RAID 1,只能2块盘,盘的大小可以不一样,以小的为准

    10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高

    RAID 5 ,3块盘,容量计算10*(n-1),损失一块盘

    特点,读写性能一般,读还好一点,写不好

    冗余从好到坏:RAID1 RAID10 RAID 5 RAID0
    性能从好到坏:RAID0 RAID10 RAID5 RAID1
    成本从低到高:RAID0 RAID5 RAID1 RAID10

    单台服务器:很重要盘不多,系统盘,RAID1
    数据库服务器:主库:RAID10 从库 RAID5\RAID0(为了维护成本,RAID10)
    WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)
    有多台,监控、应用服务器,RAID0 RAID5

    我们会根据数据的存储和访问的需求,去匹配对应的RAID级别

     

    5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
    LVS: 是基于四层的转发
    HAproxy: 是基于四层和七层的转发,是专业的代理服务器
    Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发

    区别: LVS由于是基于四层的转发所以只能做端口的转发
    而基于URL的、基于目录的这种转发LVS就做不了

    工作选择:

    HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做
    在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大
    选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器
    配置简单,所以中小型企业推荐使用HAproxy

    6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
    Squid、Varinsh和Nginx都是代理服务器

    什么是代理服务器:
    能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资
    源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接
    收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你
    如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网 

    区别:
    1)Nginx本来是反向代理/web服务器,用了插件可以做做这个副业

    但是本身不支持特性挺多,只能缓存静态文件
    2)从这些功能上。varnish和squid是专业的cache服务,而nginx这些是第三方模块完成
    3)varnish本身的技术上优势要高于squid,它采用了可视化页面缓存技术

    在内存的利用上,Varnish比Squid具有优势,性能要比Squid高。
    还有强大的通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存
    它是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的
    4)squid的优势在于完整的庞大的cache技术资料,和很多的应用生产环境

    工作中选择:
    要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择squid或者varnish。

    7、Tomcat和Resin有什么区别,工作中你怎么选择?
    区别:Tomcat用户数多,可参考文档多,Resin用户数少,可考虑文档少
    最主要区别则是Tomcat是标准的java容器,不过性能方面比resin的要差一些
    但稳定性和java程序的兼容性,应该是比resin的要好

    工作中选择:现在大公司都是用resin,追求性能;而中小型公司都是用Tomcat,追求稳定和程序的兼容

    8、什么是中间件?什么是jdk? 
    中间件介绍:
    中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源
    中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯
    是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口

    但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递
    通过中间件,应用程序可以工作于多平台或OS环境。

    jdk:jdk是Java的开发工具包
    它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境

    9、讲述一下Tomcat8005、8009、8080三个端口的含义?
    8005==》 关闭时使用
    8009==》 为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口
    8080==》 一般应用使用

    10、什么叫CDN?
    - 即内容分发网络
    - 其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到
    最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度

    11、什么叫网站灰度发布?
    灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式
    AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B
    如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来
    灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度

    12、简述DNS进行域名解析的过程?
    用户要访问http://www.baidu.com,会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器,二级域服务器只能提供三级域名服务器.http://baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站http://www.baidu.com,然后发给请求的服务器,保存一份之后,再发给客户端

    13、RabbitMQ是什么东西?
    RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器
    消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用
    队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用
    消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地

    14、讲一下Keepalived的工作原理?
    在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP通告信息,
    BACKUP不会抢占MASTER,除非它的优先级更高。当MASTER不可用时(BACKUP收不到通告信息)
    多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性
    由于安全性考虑,VRRP包使用了加密协议进行加密。BACKUP不会发送通告信息,只会接收通告信息

    15、讲述一下LVS三种模式的工作过程?
    LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式) VS/DR(路由模式) VS/TUN(隧道模式)

     

    一、NAT模式(VS-NAT)

    原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址

    并发至此RS来处理,RS处理完后把数据交给负载均衡器,负载均衡器再把数据包原IP地址改为自己的IP

    将目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器

    优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址

    缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈

    因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时

    大量的数据包都交汇在负载均衡器那,速度就会变慢!

     

    二、IP隧道模式(VS-TUN)

    原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大

    那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS

    RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过

    负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持

    IPTUNNEL协议,所以,在RS的内核中,必须编译支持IPTUNNEL这个选项

    优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户

    所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量

    这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。

    缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”

    (IP Encapsulation)协议,服务器可能只局限在部分Linux系统上

     

    三、直接路由模式(VS-DR)

    原理:负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应

    所有RS对本身这个IP的ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR

    而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)

    并将请求分发给这台RS这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户

    则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端

    由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域

    也可以简单的理解为在同一台交换机上

    优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端

    与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。

    缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。

     

    16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

    mysql的innodb如何定位锁问题:
    在使用 show engine innodb status检查引擎状态时,发现了死锁问题
    在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎)

    innodb_trx ## 当前运行的所有事务

    innodb_locks ## 当前出现的锁

    innodb_lock_waits ## 锁等待的对应关系

     

    mysql如何减少主从复制延迟:
    如果延迟比较大,就先确认以下几个因素:
    1. 从库硬件比主库差,导致复制延迟
    2. 主从复制单线程,如果主库写并发太大,来不及传送到从库

    就会导致延迟。更高版本的mysql可以支持多线程复制
    3. 慢SQL语句过多
    4. 网络延迟

    5. master负载
    主库读写压力大,导致复制延迟,架构的前端要加buffer及缓存层

    6. slave负载
    一般的做法是,使用多台slave来分摊读请求,再从这些slave中取一台专用的服务器

     

    只作为备份用,不进行其他任何操作.另外, 2个可以减少延迟的参数:
    –slave-net-timeout=seconds 单位为秒 默认设置为 3600秒

    #参数含义:当slave从主数据库读取log数据失败后,等待多久重新建立连接并获取数据
    –master-connect-retry=seconds 单位为秒 默认设置为 60秒

    #参数含义:当重新建立主从连接时,如果连接建立失败,间隔多久后重试
    通常配置以上2个参数可以减少网络问题导致的主从数据同步延迟

     

    MySQL数据库主从同步延迟解决方案
    最简单的减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行

    还有就是主库是写,对数据安全性较高,比如sync_binlog=1,innodb_flush_log_at_trx_commit
    = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog

    innodb_flushlog也可以设置为0来提高sql的执行效率。另外就是使用比主库更好的硬件设备作为slave

     

    17、如何重置mysql root密码?

     

    一、 在已知MYSQL数据库的ROOT用户密码的情况下,修改密码的方法:

    1、 在SHELL环境下,使用mysqladmin命令设置:

    mysqladmin –u root –p password “新密码” 回车后要求输入旧密码

     

    2、 在mysql>环境中,使用update命令,直接更新mysql库user表的数据:

    Update mysql.user set password=password(‘新密码’) where user=’root’;

    flush privileges;

    注意:mysql语句要以分号”;”结束

     

    3、 在mysql>环境中,使用grant命令,修改root用户的授权权限。

    grant all on *.* to root@’localhost’ identified by ‘新密码’;

     

    二、 如查忘记了mysql数据库的ROOT用户的密码,又如何做呢?方法如下:

    1、 关闭当前运行的mysqld服务程序:service mysqld stop(要先将mysqld添加为系统服务)

    2、 使用mysqld_safe脚本以安全模式(不加载授权表)启动mysqld 服务

    /usr/local/mysql/bin/mysqld_safe --skip-grant-table &

    3、 使用空密码的root用户登录数据库,重新设置ROOT用户的密码

    #mysql -u root

    Mysql> Update mysql.user set password=password(‘新密码’) where user=’root’;

    Mysql> flush privileges;

     

    18、lvs/nginx/haproxy优缺点

    Nginx的优点是:

    1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构

    它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一

    Nginx单凭这点可利用的场合就远多于LVS了。

     

    2、Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一

    相反LVS对网络稳定性依赖比较大,这点本人深有体会;

     

    3、Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来

    LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。

     

    4、可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些。

     

    5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了

    如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。

     

    6、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器

    LNMP也是近几年非常流行的web架构,在高流量的环境中稳定性也很好。

     

    7、Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可考虑用其作为反向代理加速器

     

    8、Nginx可作为中层反向代理使用,这一层面Nginx基本上无对手,唯一可以对比Nginx的就只有lighttpd了

    不过lighttpd目前还没有做到Nginx完全的功能,配置也不那么清晰易读,社区资料也远远没Nginx活跃

     

    9、Nginx也可作为静态网页和图片服务器,这方面的性能也无对手。还有Nginx社区非常活跃,第三方模块也很多

     

    Nginx的缺点是:

    1、Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点

    2、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测

    不支持Session的直接保持,但能通过ip_hash来解决

     

    LVS:使用Linux内核集群实现一个高性能、高可用的负载均衡服务器

    它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)

    LVS的优点是:

    1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生

    这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低

     

    2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西

    所以并不需要太多接触,大大减少了人为出错的几率

     

    3、工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案

    如LVS+Keepalived,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived

     

    4、无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响。

    5、应用范围较广,因为LVS工作在4层,所以它几乎可对所有应用做负载均衡,包括http、数据库、在线聊天室等

    LVS的缺点是:

    1、软件本身不支持正则表达式处理,不能做动静分离

    而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在

    2、如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了

    特别后面有Windows Server的机器的话,如果实施及配置还有维护过程就比较复杂了

    相对而言,Nginx/HAProxy+Keepalived就简单多了。

     

    HAProxy的特点是:

    1、HAProxy也是支持虚拟主机的。

    2、HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导

    同时支持通过获取指定的url来检测后端服务器的状态

     

    3、HAProxy跟LVS类似,本身就只是一款负载均衡软件

    单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的

     

    4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡

    对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡

     

    5、HAProxy负载均衡策略非常多,HAProxy的负载均衡算法现在具体有如下8种:

    ①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;

    ② static-rr,表示根据权重,建议关注;

    ③leastconn,表示最少连接者先处理,建议关注;

    ④ source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似

    我们用其作为解决session问题的一种方法,建议关注;

    ⑤ri,表示根据请求的URI;

    ⑥rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name;

    ⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

    ⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

     

    19、mysql数据备份工具

    mysqldump工具

    mysqldump是mysql自带的备份工具,目录在bin目录下面:/usr/local/mysql/bin/mysqldump

    支持基于innodb的热备份,但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景
    Mysqldump完全备份+二进制日志可以实现基于时间点的恢复。

    基于LVM快照备份

    在物理备份中,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令对整个数据库目录
    进行打包备份,但是这些只能进行泠备份,不同的存储引擎备份的也不一样,myisam自动备份到表级别
    而innodb不开启独立表空间的话只能备份整个数据库。

    tar包备份

    percona提供的xtrabackup工具

    支持innodb的物理热备份,支持完全备份,增量备份,而且速度非常快,支持innodb存储引起的数据在不同
    数据库之间迁移,支持复制模式下的从机备份恢复备份恢复,为了让xtrabackup支持更多的功能扩展
    可以设立独立表空间,打开 innodb_file_per_table功能,启用之后可以支持单独的表备份

     

    20、keepalive的工作原理和如何做到健康检查

    keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

    虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组
    这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内
    其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了
    这时就需要根据VRRP的优先级来选举一个backup当master。这样就可以保证路由器的高可用了

    keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护
    及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式,vrrp模块是来实现VRRP协议的

    Keepalived健康检查方式配置

    HTTP_GET|SSL_GET

    HTTP_GET | SSL_GET

    {

    url {

    path /# HTTP/SSL 检查的url可以是多个

    digest <STRING> # HTTP/SSL 检查后的摘要信息用工具genhash生成

    status_code 200# HTTP/SSL 检查返回的状态码

    }

    connect_port 80 # 连接端口

    bindto<IPADD>

    connect_timeout 3 # 连接超时时间

    nb_get_retry 3 # 重连次数

    delay_before_retry 2 #连接间隔时间

    }

     

    21、统计ip访问情况,要求分析nginx访问日志,找出访问页面数量在前十位的ip

    cat access.log | awk '{print $1}' | uniq -c | sort -rn | head -10

     

    22、使用tcpdump监听主机为192.168.1.1,tcp端口为80的数据,同时将输出结果保存输出到tcpdump.log

    tcpdump 'host 192.168.1.1 and port 80' > tcpdump.log

     

    23、如何将本地80 端口的请求转发到8080 端口,当前主机IP 为192.168.2.1

    iptables -A PREROUTING -d 192.168.2.1 -p tcp -m tcp -dport 80 -j DNAT-to-destination 192.168.2.1:8080

     

    24、简述raid0 raid1 raid5 三种工作模式的工作原理及特点

    RAID 0:带区卷,连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率
    但它没有数据冗余,RAID 0 只是单纯地提高性能,并没有为数据的可靠性提供保证
    而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0 不能应用于数据安全性要求高的场合

     

    RAID 1:镜像卷,它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据
    不能提升写数据效率。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID1 可以提高读取性能
    RAID 1 是磁盘阵列中单位成本最高的,镜像卷可用容量为总容量的1/2,但提供了很高的数据安全性和可用性
    当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据

     

    RAID5:至少由3块硬盘组成,分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上

    任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据(最多允许1块硬盘损坏)

    所以raid5可以实现数据冗余,确保数据的安全性,同时raid5也可以提升数据的读写性能

     

    25、你对现在运维工程师的理解和以及对其工作的认识

    运维工程师在公司当中责任重大,需要保证时刻为公司及客户提供最高、最快、最稳定、最安全的服务

    运维工程师的一个小小的失误,很有可能会对公司及客户造成重大损失

    因此运维工程师的工作需要严谨及富有创新精神

     

    26、实时抓取并显示当前系统中tcp 80端口的网络数据信息,请写出完整操作命令

    tcpdump -nn tcp port 80

     

    27、服务器开不了机怎么解决一步步的排查

    A、造成服务器故障的原因可能有以下几点:

     

     

     

    B、如何排查服务器故障的处理步骤如下:

     

     

     

    28、Linux系统中病毒怎么解决

    1)最简单有效的方法就是重装系统

    2)要查的话就是找到病毒文件然后删除

    中毒之后一般机器cpu、内存使用率会比较高

    机器向外发包等异常情况,排查方法简单介绍下

     

    top 命令找到cpu使用率最高的进程

    一般病毒文件命名都比较乱,可以用 ps aux 找到病毒文件位置 

    rm -f 命令删除病毒文件

    检查计划任务、开机启动项和病毒文件目录有无其他可以文件等

     

    3)由于即使删除病毒文件不排除有潜伏病毒,所以最好是把机器备份数据之后重装一下

     

    29、发现一个病毒文件你删了他又自动创建怎么解决

    公司的内网某台linux服务器流量莫名其妙的剧增,用iftop查看有连接外网的情况

    针对这种情况一般重点查看netstat连接的外网ip和端口。

     

    用lsof -p pid可以查看到具体是那些进程,哪些文件

    经查勘发现/root下有相关的配置conf.n hhe两个可疑文件,rm -rf后不到一分钟就自动生成了

    由此推断是某个母进程产生的这些文件。所以找到母进程就是找到罪魁祸首

     

    查杀病毒最好断掉外网访问,还好是内网服务器,可以通过内网访问

    断了内网,病毒就失去外联的能力,杀掉它就容易的多

    怎么找到呢,找了半天也没有看到蛛丝马迹,没办法只有ps axu一个个排查

    方法是查看可以的用户和和系统相似而又不是的冒牌货,果然,看到了如下进程可疑

     

    看不到图片就是/usr/bin/.sshd

    于是我杀掉所有.sshd相关的进程,然后直接删掉.sshd这个可执行文件

    然后才删掉了文章开头提到的自动复活的文件

     

    总结一下,遇到这种问题,如果不是太严重,尽量不要重装系统

    一般就是先断外网,然后利用iftop,ps,netstat,chattr,lsof,pstree这些工具顺藤摸瓜

    一般都能找到元凶。但是如果遇到诸如此类的问题

    /boot/efi/EFI/redhat/grub.efi: Heuristics.Broken.Executable FOUND,个人觉得就要重装系统了

     

    30、说说TCP/IP的七层模型

    应用层 (Application):

    网络服务与最终用户的一个接口。

    协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP

    表示层(Presentation Layer):

    数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)

    格式有,JPEG、ASCll、DECOIC、加密格式等

    会话层(Session Layer):

    建立、管理、终止会话。(在五层模型里面已经合并到了应用层)

    对应主机进程,指本地主机与远程主机正在进行的会话

    传输层 (Transport):

    定义传输数据的协议端口号,以及流控和差错校验。

    协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层

    网络层 (Network):

    进行逻辑地址寻址,实现不同网络之间的路径选择。

    协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP

    数据链路层 (Link):

    建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)

    将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正

    物理层(Physical Layer):

    是计算机网络OSI模型中最低的一层
    物理层规定:为传输数据所需要的物理链路创建、维持、拆除
    而提供具有机械的,电子的,功能的和规范的特性

    简单的说,物理层确保原始的数据可在各种物理媒体上传输。局域网与广域网皆属第1、2层
    物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础
    物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境
    如果您想要用尽量少的词来记住这个第一层,那就是“信号和介质”

     

    31、你常用的Nginx模块,用来做什么

    rewrite模块,实现重写功能

    access模块:来源控制

    ssl模块:安全加密

    ngx_http_gzip_module:网络传输压缩模块

    ngx_http_proxy_module 模块实现代理

    ngx_http_upstream_module模块实现定义后端服务器列表

    ngx_cache_purge实现缓存清除功能

     

    32、请列出你了解的web服务器负载架构

    Nginx

    Haproxy

    Keepalived

    LVS

     

    33、查看http的并发请求数与其TCP连接状态

    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

     

    还有ulimit -n 查看linux系统打开最大的文件描述符,这里默认1024
    不修改这里web服务器修改再大也没用,若要用就修改很几个办法,这里说其中一个:

    修改/etc/security/limits.conf

    * soft nofile 10240

    * hard nofile 10240

    重启后生效

     

    34、用tcpdump嗅探80端口的访问看看谁最高

    tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}'| sort | uniq -c | sort -nr |head -20

     

    35、写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线

    #!/bin/bash

    for ip in `seq 1 255`

    do
    {

    ping -c 1 192.168.1.$ip > /dev/null 2>&1

    if [ $? -eq 0 ]; then

    echo 192.168.1.$ip UP

    else

    echo 192.168.1.$ip DOWN

    fi

    }&

    done

    wait

     

    36、已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近 7 天的访问日志!请问如何解决? 请给出解决办法或配置或处理命令

     

    创建文件脚本:

    #!/bin/bash

    for n in `seq 14`

    do 

    date -s "11/0$n/14"

    touch access_www_`(date +%F)`.log

    done

     

    解决方法:

    # pwd/application/logs

    # ll

    -rw-r--r--. 1 root root 0 Jan 1 00:00 access_www_2015-01-01.log
    -rw-r--r--. 1 root root 0 Jan 2 00:00 access_www_2015-01-02.log
    -rw-r--r--. 1 root root 0 Jan 3 00:00 access_www_2015-01-03.log
    -rw-r--r--. 1 root root 0 Jan 4 00:00 access_www_2015-01-04.log
    -rw-r--r--. 1 root root 0 Jan 5 00:00 access_www_2015-01-05.log
    -rw-r--r--. 1 root root 0 Jan 6 00:00 access_www_2015-01-06.log
    -rw-r--r--. 1 root root 0 Jan 7 00:00 access_www_2015-01-07.log
    -rw-r--r--. 1 root root 0 Jan 8 00:00 access_www_2015-01-08.log
    -rw-r--r--. 1 root root 0 Jan 9 00:00 access_www_2015-01-09.log
    -rw-r--r--. 1 root root 0 Jan 10 00:00 access_www_2015-01-10.log
    -rw-r--r--. 1 root root 0 Jan 11 00:00 access_www_2015-01-11.log
    -rw-r--r--. 1 root root 0 Jan 12 00:00 access_www_2015-01-12.log
    -rw-r--r--. 1 root root 0 Jan 13 00:00 access_www_2015-01-13.log

    -rw-r--r--. 1 root root 0 Jan 14 00:00 access_www_2015-01-14.log

    # find /application/logs/ -type f -mtime +7 -name "*.log"|xargs rm –f 

    ##也可以使用-exec rm -f {} \;进行删除

    # ll

    -rw-r--r--. 1 root root 0 Jan 7 00:00 access_www_2015-01-07.log
    -rw-r--r--. 1 root root 0 Jan 8 00:00 access_www_2015-01-08.log
    -rw-r--r--. 1 root root 0 Jan 9 00:00 access_www_2015-01-09.log
    -rw-r--r--. 1 root root 0 Jan 10 00:00 access_www_2015-01-10.log
    -rw-r--r--. 1 root root 0 Jan 11 00:00 access_www_2015-01-11.log
    -rw-r--r--. 1 root root 0 Jan 12 00:00 access_www_2015-01-12.log
    -rw-r--r--. 1 root root 0 Jan 13 00:00 access_www_2015-01-13.log

    -rw-r--r--. 1 root root 0 Jan 14 00:00 access_www_2015-01-14.log

     

    37、如何优化 Linux系统(可以不说太具体)?

    1. 不用root,添加普通用户,通过sudo授权管理
    2. 更改默认的远程连接SSH服务端口及禁止root用户远程连接
    3. 定时自动更新服务器时间
    4. 配置国内yum源
    5. 关闭selinux及iptables(iptables工作场景如果有外网IP一定要打开,高并发除外)
    6. 调整文件描述符的数量
    7. 精简开机启动服务(crond rsyslog network sshd)
    8. 内核参数优化(/etc/sysctl.conf)
    9. 更改字符集,支持中文,但建议还是用英文字符集,防止乱码
    10. 锁定关键系统文件
    11. 清空/etc/issue,去除系统及内核版本登录前的屏幕显示
       

     

    38、请执行命令取出 linux 中 eth0 的 IP 地址(请用 cut,有能力者也可分别用 awk,sed 命令答)

    cut方法1:

    # ifconfig eth0|sed -n '2p'|cut -d ":" -f2|cut -d " " -f1
    192.168.20.130

    awk方法2:

    # ifconfig eth0|awk 'NR==2'|awk -F ":" '{print $2}'|awk '{print $1}'

    192.168.20.130

    awk多分隔符方法3:

    # ifconfig eth0|awk 'NR==2'|awk -F "[: ]+" '{print $4}'

    192.168.20.130

    sed方法4:

    # ifconfig eth0|sed -n '/inet addr/p'|sed -r 's#^.*ddr:(.*)Bc.*$#\1#g'

    192.168.20.130

     

    39、请写出下面 linux SecureCRT 命令行快捷键命令的功能?

    Ctrl + a

    Ctrl + c

    Ctrl + d

    Ctrl + e

    Ctrl + l

    Ctrl + u

    Ctrl + k

    tab

    Ctrl+shift+c

    Ctrl+shift+v

     

    解答:

    Ctrl + a —->光标移动到行首

    Ctrl + e —->光标移动到行尾

    Ctrl + c —->终止当前程序

    Ctrl + d —->如果光标前有字符则删除,没有则退出当前中断

    Ctrl + l —->清屏

    Ctrl + u —->剪切光标以前的字符

    Ctrl + k —->剪切光标以后的字符

    Ctrl + y —->复制u/k的内容

    Ctrl + r —->查找最近用过的命令

    tab —->命令或路径补全

    Ctrl+shift+c —->复制

    Ctrl+shift+v —->粘贴

     

    40、每天晚上 12 点,打包站点目录/var/www/html 备份到/data 目录下(最好每次备份按时间生成不同的备份包)

    # cat a.sh 

    #/bin/bash

    cd /var/www/ && /bin/tar zcf /data/html-`date +%m-%d%H`.tar.gz html/

    # crontab –e

    00 00 * * * /bin/sh /root/a.sh

     

    原作者:2012hjtwyf

    原文链接:http://blog.51cto.com/hujiangtao/1940375

    展开全文
  • 嵌入式软件面试经历分享(海康威视&涂鸦智能)

    万次阅读 多人点赞 2019-03-19 19:21:54
    本人一个垃圾大学学渣,毕业就一直干着嵌入式软件开发,这次换工作也是深思熟虑后的一个选择。面试了两家公司都拿到了Offer,还是极大增强了我的信心。同时,面临抉择的时候也是一个艰难的过程。 海康威视面试: ...

         本人一个垃圾大学学渣,毕业就一直干着嵌入式软件开发,这次换工作也是深思熟虑后的一个选择。面试了两家公司都拿到了Offer,还是极大增强了我的信心。同时,在面临抉择的时候也是一个艰难的过程。

     海康威视面试:

         其实我自己认为我们这种不好的大学毕业,这样的企业应该是不会考虑我们的,当时想去面试就当是一次经历吧,大公司是怎样的也该去看看,就当开开眼界。想到这次面试是一个机会,自己还是准备了一下,对应面试上的职能要求,详细的看了相关部分的内容,面试的时候好几个都问到啦(哈哈)。

          我也属于社招啦,海康威视那边流程还是蛮规范的,比较清楚。都是流程性的,第一个当然是签到啊,填个人信息啊啥的,然后就等待面试,那天周五下午面试,人巨多,有java有嵌入式,只有一个小姐姐在那里弄,忙的要死。那时候心里就想,我怕是凉了,打个酱油吧。一共面了三轮,技术面,HR面,总监面。

          技术面主要是介绍一下自己,然后就开始直接问项目啦,把自己的项目简述一下,必要的时候可以自己带几张白纸,可以方便画出项目构架图啦,说的可能会清楚一点,然后会通过项目问一下相对应的知识,没有问到很复杂的问题,都是比较基础的吧。比如你项目用到了TCP,TIME_WAIT,CLOSE_WAIT怎么产生的,如何解决过多TIME_WAIT状态。对于字节对齐的理解,32位机器上的代码移到64位机器上代码,有哪些注意的,需要修改的。还主要问了一些问题,让你给出思路,解决方法,类似于一些文件的操作也会问到。整个技术面大概面了40分钟左右,接下来就是HR面了,这个基本上表现的正常一些,积极一些,不要问一些太傻的问题基本没有大的问题,补充一下,最好面试公司,先去要面试的公司官网看看,企业理念啊,具体产品啊啥的,很有帮助,不然到时候问你对公司有啥了解,基本就懵逼了。和技术面试让你问问题就问技术相关的,别问待遇五险一金那些乱七八糟的,那个留给问HR.最后总监开会,等开完然后又去面试了一轮,基本10分钟就结束了,也没问啥,比较直接,估计就是认识一下的感觉,也没问啥技术,总监还蛮帅的,哈哈(我是Boy,纯粹觉得)!

         最后说一周内给通知,我周五面的,周二给我发了Offer,电话沟通详细的一些待遇问题,收到Offer当时还蛮激动的,哈哈。

    涂鸦智能面试:

         这也是一家我蛮看好的一家公司,主要发展AI+IOT,不过加班还蛮严重的,听说9点下班是正常时间,面试的人也很多,应该属于扩张期招聘职位还满多的。

          我面试的无线嵌入式软件开发工程师,主要对TCP,HTTP,NBIOT这类相关通信要求比较多。不过个人感觉还是有点忙乱,人来人往。面试流程四轮,笔试,技术面,技术总监面,HR面,给我弄了4小时,中间等总监等了一小时。笔试的话其实还好,基本也是一些比较基础的问题,直接把笔试题贴出来的话也不太好,所以我大致说下知识点吧,后面我会将我总结的知识点再记录一份博客和大家分享。

        笔试知识点:

         1,大端小端字节序

          2,malloc使用的一些事项,free后指针要指向空类似问题

          3,结构体字节对齐,形参,实参的区别,数据溢出

          4,位操作,函数指针,排序,链表操作

         接下来就是技术面试,基本就是根据笔试题进行一些解答,问了相关HTTP,TCP,NBIOT相关内容,还好我都整理并看了,回答的都还不是太差,准备还是很有必要的。在后面就是总监面试,问的问题不多,进程线程的区别等等比较经典的问题,介绍项目,带张白纸很有必要。最后HR就是聊聊薪资待遇,也没有太多,后面的话就是等通知,周六面试到周一给我通知,然后要体检OK才会给Offer,当然最后也是成功拿到了Offer.

    对于面试,准备是非常重要的,我后面会说说我自己的准备工作,希望能有一些参考价值,祝大家都找到满意的工作!

    自己的准备工作分享:嵌入式软件面试准备与知识点总结

    展开全文
  • Android面试题整理

    千次阅读 2018-02-27 21:56:47
    本文整理了简书 goeasyway 面试相关文章,并文章中加以自己的理解以及看见的部分精彩评论,所有文章并非自己原创,如对Android面试有兴趣,可前往作者文章专栏传送门或者关注对方的微信公众号:Android面试启示录 ...
  • 软件测试面试经验

    千次阅读 多人点赞 2019-06-11 21:37:50
    之后就等待初试 以下是今天面试流程和内容: 我面试的这家公司流程是三轮面试 第一轮是HR 第二轮是技术 第三轮是大BOSS 然而挂了第二轮上,就让我回去等通知了! 第一轮HR面试内容: 1、自我介绍 自己阐述...
  • Tomcat面试题+http面试题+Nginx面试题+常见面试题

    千次阅读 多人点赞 2019-12-12 15:04:43
    Tomcat面试题 1、Tomcat的缺省端口是多少?怎么修改? 答:缺省端口是8080,若要修改,可以进入Tomcat的安装目录下找到conf目录下的...修改它的运行模式需要主配置文件中找到connector字段中的protocol进行修改...
  • Linux运维面试题

    千次阅读 2019-08-02 12:57:30
    Linux运维跳槽必备的40道面试精华题(转) 下面是一名资深Linux运维求职数十家公司...他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术 运维又包括很多种,有DBA运维、网站...
  • 2019年常见ElasticSearch 面试题解析(上)

    千次阅读 多人点赞 2019-12-25 19:39:24
    前言 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可...官方客户端Java、.NET(C#)、P...
  • 说说性能测试的几个概念

    千次阅读 2019-04-27 12:21:03
    假设这个操作需要3个请求完成,那么很有可能出现这样的情况:某个虚拟用户还在等待第一个请求的响应,但是另一个虚拟用户已经收到了第一个请求的响应并发起了第二个请求。那么对于服务端而言,某一个时刻,无论是...
  • 说说nio2

    千次阅读 2014-10-13 16:18:30
    上文我们还提到了关于多个线程,加载同一个问题的问题#现在我们说说nio里面锁的概念 不多说了,先看一段代码 package io; import java.nio.ByteBuffer; import java.nio.channels.*; import java.util....
  • 说说Java多线程

    千次阅读 2018-09-06 19:42:02
    1.等待阻塞:运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态; 2.同步阻塞 -- 线程获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态; 3.其他阻塞 -- 通过调用线程...
  • 本篇主要讲java线程的并发和忙等待。 2.内容: java线程最基本的两个内容这里提一下,那就是线程的创建以及生命周期。 ①java线程的创建:可以通过继承Thread类或实现Runnable接口。 ②线程的生命周期:线程的...
  • 阿里二面,面试官:说说 Java CAS 原理?

    千次阅读 多人点赞 2021-05-10 22:25:31
    3. CAS Java 语言中的应用 4. CAS 的问题 4.1. 典型 ABA 问题 4.2. 自旋开销问题 4.3. 只能保证单个变量的原子性 5. 有态度的总结 并发编程中我们都知道i++操作是非线程安全的,这是因为 i++操作不是原子...
  • 我曾经问过自己我有什么,有过什么,时间不会因为你的叹息中而为你停下步伐,世界一直在变,不变地只有自己。 我想对自己的读者,和自己身边亲近的人,和自己说: 我勿忘初心,每天进步,知道你们对我好,我也会依然...
  • 详细说说select poll epoll

    千次阅读 2016-04-24 15:42:30
    探索select poll epoll之前我们首先要知道什么叫多路复用: 下来探索一下为什么会用到多路复用: 首先我们看看一个客户端请求服务器的完整过程。首先,请求过来,要建立连接,然后再接收数据,接收数据后,再...
  • 聊一下CPU,内存,io,网络, CPU利用率和CPU负载的关系 CPU利用率:显示的是程序运行期间实时占用的CPU百分比 CPU负载:显示的是一段时间内正在使用和等待使用CPU的平均任务数。CPU利用率高,并不意味着负载就...
  • 说说日内交易

    千次阅读 2018-10-11 14:22:13
    同时与天新市场安化黑茶买一卖一变化做对比)这个时候我们尽可能的等待行情形成区间整理,如果行情走单边也同样可以操作,只是行情形成区间后我们操作的胜率会更高。  然后打开交易客户端,选择需要交易的品种...
  • jstack分析线程等待、死锁问题

    万次阅读 多人点赞 2018-06-24 15:40:48
    转自:... ... 背景 记得前段时间,同事说他们测试环境的服务器cpu使用率一直处于100%,本地又没有什么接口调用,为什么会这样?cpu使用率居高不下,自然是有某些线程一直占...
  • 学习环境 : Centos6.5 Linux 内核 2.6 ...第二部分主要介绍多线程环境下,使用同步与互斥保护共享资源,有互斥锁,条件变量,信号量,以及读写锁。 第一部分开始 初识线程 线程:也称轻量级进程(Lightw
  • 软件测试面试题整理

    千次阅读 多人点赞 2013-11-28 15:53:22
     因为没有经过测试的软件很难发布之前知道该软件的质量,就好比ISO质量认证一样,测试同样也需要质量的保证,这个时候就需要团队中开展软件测试的工作。测试的过程发现软件中存在的问题,及时让开发人员得知...
  • 或者你可以继续WPF领域等待直到市面上稀缺WPF开发,就像如今的COBAL和VB6这类老技术一样,但是我估计还得等十年。因为随着IT业的发展,任何技术市场上都会有很多的开发人员,尤其是像WPF这样的主流技术,所以我...
  • 小科普:说说ANT+和蓝牙4.0的那些事

    千次阅读 2019-05-24 17:16:51
    这个范围内划分为100个频点,也就是2400MHz,2401MHz,2402MHz一直到2500MHz酱紫,也就是说呢,现在这个无线电大广场里面被划分成了很多个小隔音包间,包间包间之间互不干扰。     为啥要选用2.4GHz这...
  • 老猿说说-ConcurrentHashMap

    万次阅读 2020-10-12 11:36:13
    所有的操作都是线程安全的,我们使用时,无需再加锁; 多个线程同时进行put、remove等操作时并不会阻塞,可以同时进行,和HashTable不同,HashTable操作时,会锁住整个Map; 迭代过程中,即使Map结构被修改,也...
  • 说说当前最新的OpenCV版本2.4.8 (2014年2月24日),2.4.9 (2014年4月) 的下载和安装。与其说是安装,不如叫解压更加合适,因为我们下载的exe安装文件就是一个自解压程序而已。 官网: http://opencv.org/ 上...
  • 老猿说说-ArrayBlockingQueue

    万次阅读 2020-11-16 09:51:12
    try { // 队列如果是满的,就无限等待 // 一直等待队列中有数据被拿走时,自己被唤醒 while (count == items.length) notFull.await(); enqueue(e); } finally { lock.unlock(); } } private void enqueue(E x) { /...
  • 说说前端未来几年的发展方向

    千次阅读 2018-11-25 09:23:00
    知乎上看到这么一个问题,觉得很有意思,以下是原提问者的见解 过去五年前端的发展过程基本上是一个工程化的过程,框架和工程化工具层出不穷。 近两年其实发展已经比较迟滞了。 框架方面:基本就是三大框架鼎立的...
  • 面试题:说说事件循环机制(满分答案来了)

    千次阅读 多人点赞 2020-03-09 08:45:00
    setImmediate 回调需要执行,会等待回调被加入到队列中并立即执行回调,这里同样会有个超时时间设置防止一直等待下去,一段时间后自动进入 check 阶段。 check check 阶段。这是一个比较简单的阶段,直接执行 ...
  • 说说家乡山东日照的面试经历以及对家乡互联网产业的一些认识吧 分类: 心情~感悟2013-10-14 00:48 1171人阅读 评论(15) 收藏 举报 源头、 其实一直都很像写一篇文章来纪念一下我家乡找工作...
  • 说说12306

    千次阅读 多人点赞 2012-01-17 11:03:47
    很多技术大牛将问题集中采用了通用型数据库,没有数据缓存机制,或者没用采用异步IO等等,这些都很重要,也很有借鉴的意义,但我认为这些都是次要的,性能优化本身的空间大牛们面前仍旧有很多的优化空间,但是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,935
精华内容 11,974
关键字:

一直在等待的说说