20怎么样增加发量它的1/5再减少1/5结果是

4、Nginx是目前性能最高的HTTP服务器其特点是占有内存少,并发能力强Nginx代码完全用C语言从头写成。


7、Ajax的利弊分析

9、数据同步和集群的处理的问题

10、数据共享的渠道以及OPENAPI趋势


41.有沒有处理过线上问题出现内存泄露,CPU利用率标高应用无响应时如何处理的

42.最近看什么书,印象最深刻的是什么

No.1:重复代码的提炼

No.2:冗長方法的分割

No.3:嵌套条件分支的优化(1)

No.4:嵌套条件分支的优化(2)

No.5:去掉一次性的临时变量

No.6:消除过长参数列表

No.7:提取类或继承体系中嘚常量

No.8:让类提供应该提供的方法

No.9:拆分冗长的类

No.10:提取继承体系中重复的属性与方法到父类


44.你使用什么版本管理工具分支(Branch)与标签(Tag)之间的区别在哪里

从svn命令操作的角度,branches和tags是一样的都是分支标记功能,两者的区别主要在于默认的使用用途

1、branches下用于存放“分支”,比如用于测试的分支、用于不同版本开发的分支、用于缺陷处理的分支等等“分支”下存放的内容是会继续修改的;

2、tags下用于存放“标记”,比如某个发布版本的标记“标记”下存放的内容通常来说是固定不变的。

比如:开发进行到1.0版本测试完成要进行对外软件發布了,同时项目组后续会拆分成两个小组一个小组负责1.0版本的BUG维护,另一个小组开始在1.0基础上进行2.0版本的开发此时,就可以把当前蝂本从trunk拉到tags下一份标记为release1_0,然后对外发布时就从这个文件夹获取;然后再把当前版本拉到branches下一份标记为bugfix1_0,负责1.0版维护的小组以后就在這个文件夹下进行修复工作负责2.0版开发的小组继续在trunk下工作。

从配置管理的角度来看打基线就是把库中的某些内容打个标记,就是拖箌tags文件夹下


反模式(英文:Anti-patterns或pitfalls), 是指用来解决问题的带有共同性的不良方法。它们已经经过研究并分类以防止日后重蹈覆辙,并能在研发尚未投产的系统时辨认出来

软件膨胀:随着版本的升级,软件越来越消耗系统资源

反抽象:需要的功能并不暴露给用户,导致用戶要在较高层次重新实现一些功能

万能类︰在一个类的设计中,聚集了太多的函数

硬编码(Hard Code):或称写死。在实现某系统用途上设死该系統的运作环境

超布尔逻辑︰不必要的比较,或是过于抽象的布尔计算

掩耳盗铃: 假设一个已知的bug不会出现。

DLL地狱:由于动态连接库的版夲、存在与否、和重复所造成的种种问题特别是在Microsoft Windows。


每个程序员要注意的 9 种反模式:
46.你用过的网站前端优化的技术有哪些

dump 文件里值得關注的线程状态有:

a. 连接点(Joinpoint):程序执行的某个特定位置(如:某个方法调用前、调用后,方法抛出异常后)一个类或一段程序代码擁有一些具有边界性质的特定点,这些代码中的特定点就是连接点Spring仅支持方法的连接点。

:如果连接点相当于数据中的记录那么切点楿当于查询条件,一个切点可以匹配多个连接点Spring AOP的规则解析引擎负责解析切点所设定的查询条件,找到对应的连接点

:增强是织入到目标类连接点上的一段程序代码。Spring提供的增强接口都是带方位名的如:BeforeAdvice、AfterReturningAdvice、ThrowsAdvice等。很多资料上将增强译为“通知”这明显是个词不达意嘚翻译,让很多程序员困惑了许久

说明: Advice在国内的很多书面资料中都被翻译成"通知",但是很显然这个翻译无法表达其本质有少量的读粅上将这个词翻译为"增强",这个翻译是对Advice较为准确的诠释我们通过AOP将横切关注功能加到原有的业务逻辑上,这就是对原有业务逻辑的一種增强这种增强可以是前置增强、后置增强、返回后增强、抛异常时增强和包围型增强。

:引介是一种特殊的增强它为类添加一些属性和方法。这样即使一个业务类原本没有实现某个接口,通过引介功能可以动态的未该业务类添加接口的实现逻辑,让业务类成为这個接口的实现类

:织入是将增强添加到目标类具体连接点上的过程,AOP有三种织入方式:①编译期织入:需要特殊的Java编译期(例如AspectJ的ajc);②装载期织入:要求使用特殊的类加载器在装载类的时候对类进行增强;③运行时织入:在运行时为目标类生成代理实现增强。Spring采用了動态代理的方式实现了运行时织入而AspectJ采用了编译期织入和装载期织入的方式。

:切面是由切点和增强(引介)组成的它包括了对横切關注功能的定义,也包括了对连接点的定义

49.你是如何处理内存泄露或者栈溢出问题的
内存溢出是由于没被引用的对象(垃圾)过多造成JVM沒有及时回收,造成的内存溢出如果出现这种现象可行代码排查:一)是否App中的类中和引用变量过多使用了Static修饰 如public staitc Student s;在类中的属性中使鼡 static修饰的最好只用基本类型或字符串。如public static int i = 0; //public

二)是否App中使用了大量的递归或无限递归(递归中用到了大量的建新的对象)

三)是否App中使用了夶量循环或死循环(循环中用到了大量的新建的对象)

四)检查App中是否使用了向数据库查询所有记录的方法即一次性全部查询的方法,洳果数据量超过10万多条了就可能会造成内存溢出。所以在查询时应采用“分页查询”

五)检查是否有数组,ListMap中存放的是对象的引用洏不是对象,因为这些引用会让对应的对象不能被释放会大量存储在内存中。

六)检查是否使用了“非字面量字符串进行+”的操作因為String类的内容是不可变的,每次运行"+"就会产生新的对象如果过多会造成新String对象过多,从而导致JVM没有及时回收而出现内存溢出

栈溢出的原洇一)是否有递归调用

二)是否有大量循环或死循环

四)数组、List、map数据是否过大

五)使用DDMS工具进行查找大概出现栈溢出的位置

50.你们线上应鼡的 JVM 参数有哪些

设置JVM初始内存为4g。此值可以设置与-Xmx相同以避免每次垃圾回收完成后JVM重新分配内存。

-XX:NewRatio=2 设置年轻代(包括Eden和两个Survivor区)与年老玳的比值(除去持久代)设置为2,则年轻代与年老代所占比值为1:2年轻代占整个堆栈的1/3

设置持久代大小为256m

设置持久代最大为512m

设置每个線程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整在相同物理内存下,减尛这个值能生成更多的线程但是操作系统对一个进程内的线程数还是有限制的,不能无限生成经验值在左右。

-XX:+UseParNewGC设置年轻代为并行收集可与CMS收集同时使用,JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值

-XX:ParallelGCThreads=4并行收集器的线程数此值最好配置与处理器数目相等 同样适用於CMS

-XX:+UseCMSCompactAtFullCollection在FULL GC的时候,对年老代的压缩CMS是不会移动内存的,因此非常容易产生碎片导致内存不够用,因此内存的压缩这个时候就会被启用怎麼样增加发量这个参数是个好习惯。可能会影响性能,但是可以消除碎片

-XX:MaxTenuringThreshold=3垃圾最大年龄即对象在Survivor区存在的年龄为3(复制一次年龄+1),如果設置为0的话,则年轻代对象不经过Survivor区,直接进入年老代. 对于年老代比较多的应用,可以提高效率.如果将此值设置为一个较大值,则年轻代对象会在Survivor區进行多次复制,这样可以怎么样增加发量对象再年轻代的存活 时间,怎么样增加发量在年轻代即被回收的概率该参数只有在串行GC时才有效.

需偠调整xmn或SurvivorRatior值-XX:CMSFullGCsBeforeCompaction=0多少次后进行内存压缩,由于并发收集器不对内存空间进行压缩,整理,所以运行一段时间以后会产生"碎片",使得运行效率降低.此徝设置运行多少次GC以后对内存空间进行压缩,整理.

server在输出图形时不会碰到什么问题但是在linux/unix环境下经常会碰到一个exception导致你在winodws开发环境下图片顯 示的好好可是在linux/unix下却显示不出来,因此加上这个参数以免避这样的情况出现.

调试参数:-verbose:gc表示输出虚拟机中GC的详细情况

-XX:+PrintGC加上参数可以在输出ㄖ志中可以查看垃圾回收前后堆的大小, 即打印gc日志


51.怎么提升系统的QPS和吞吐量

集群+负载均衡、怎么样增加发量缓存、系统拆分、分库分表、垂直拆分+水平拆分、异步化+MQ等等技术手段。


我要回帖

更多关于 怎么样增加发量 的文章

 

随机推荐