Hero Image

Java 虚拟机 虚拟机调优 Java 虚拟机调优参数 -Xms 起始内存 JVM堆内存 -Xmx 最大内存 JVM堆内存 -Xmn 新生代内存 -Xss 栈大小。 就是创建线程后,分配给每一个线程的大小 -XX:NewRatio 设置年轻代和老年代的比值。默认为2:1。如果为3,表示年轻代与老年代的比值为1:3,年轻代占整个年轻代和老年代的1/4。 -XX:SurvivorRatio年轻代中Eden区和两个Survivor区的比值。如果为3,表示Eden:Survivor = 3:2, 因为有两个Survivor区域,所以一个Survivor区占整个年轻代的1/5. -XX:MaxPermSize设置持久代的大小。 收集器的设置 -XX:+UseSerialGC设置串行收集器 -XX:+UseParallelGC设置并行收集器 -XX:+UseParallelOld设置并行老年代收集器 -XX:+UseConcMarkSweepGC设置并发收集器 垃圾回收统计信息 -XX:PrintGC -XX:PrintGCDetails -XX:PrintGCTimeStamps -Xloggc:filename 并行收集器设置 -XX:ParallelGCThreads=n设置并行收集器收集时使用的CPU数。并行收集线程数。 -XX:MaxGCPauseMillis=n设置并行收集最大暂停时间 -XX:GCTimeRatio=n设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n) 并发收集器设置 XX:+CMSIncrementalMode设置为增量模式。适用于单CPU情况。 XX:ParallelGCThreads=n设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。 -Xms1G -Xmx2G -Xmn500M -XX:MaxPermSize=64M -XX:+UseConcMarkSweepGC -XX:SurvivorRatio=3 -Xms1G JVM初始内存1G 这一部分是不是应该是堆内存 -Xmx2G JVM最大内存 2G -Xmn500M 新生代内存 500M -XX:MaxPermSize 持久代内存 64M -XX:SurvivorRatio=3 新生代中Eden:Servivor = 3:2 JVM 调优 -Xms2G -Xmx2G 将JVM最大内存与初始内存设置相等,避免JVM垃圾回收后重新分配内存。 -Xmn1G 年轻代内存Sun官方推荐配置为整个堆的3/8,通常设置为1/3或1/4。 -Xss256K减小每条线程栈的大小,能生成更多的线程 -XX:NewRatio=4 调整年轻代与老年代的比例 年轻代:老年代=1:4 -XX:MaxTenuringThreshold=0 设置晋升到老年代的对象的年龄。 如果设置为0,则年轻代对象不经过Survivor区,直接进入老年代。如果设置一个较大的值,则年轻代对象会在Survivor区进行多次复制。 -XX:+UseConcMarkSweepGC JVM在server模式下默认使用PararrelScavenge+SerialOld的收集器组合进行内存回收,不支持与用户线程并发执行。可使用ParNew+CMS+SerialOld的收集器组合进行内存回收(SerialOld收集器做为CMS收集器出现ConcurrentModeFailure失败后的后备收集器使用),减少stop-the-world时间。 -XX:CMSFullGCsBeforeCompaction 使用CMS时,设置CMS收集器在进行若干次垃圾收集后再启动一次内存碎片

Hero Image

多线程 ​ 守护线程 Java的main是普通线程,并不是守护线程, 守护线程会等待所有的线程执行结束后再结束 线程同步 https://www.jianshu.com/p/2394317257ec https://www.jianshu.com/p/988bfceadb62 https://www.jianshu.com/p/6f98f03430eb https://www.cnblogs.com/williamjie/p/9099141.html Java 主线程等待所有子线程执行完毕 Java 主线程等待所有子线程执行完毕再执行。 用sleep() 让主线程睡眠一段时间,但是这个睡眠时间是主观设置的,是有我们自己主观设定的,所以不推荐使用。 1public static void main(String[] args) throws InterrupteException{ 2 for(int i=0; i<5;i++){ 3 new Thread( 4 new Runnable(){ 5 public void run(){ 6 try{ 7 Thread.sleep(1000); 8 }catch(InterruptException e){ 9 e.preintStrackTrace(); 10 } 11 System.out.println("子线程执行!"); 12 } 13 } 14 ).start(); 15 } 16 Thread.sleep(5000); 17 System.out.println("主线程执行!"); 18} 使用Thread的jion()等待所有的子线程执行完毕,主线程再执行,thread.jion()把指定线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在B中调用了线程A的jion()方法,直到线程A执行完毕后,才会继续执行线程B。 1public static void main(String[] args) throws InterrupteException{ 2 Vector<Thread> threadVector = new Vector<>(); 3 for(int i=0; i<5;i++){ 4 Thread childThread = new Thread( 5 new Runnable(){ 6 public void run(){ 7 try{ 8 Thread.

Hero Image

11 每日一面 Ucloud rpc sql优化,如何解决高并发 explain 慢查询,建索引 什么方式实现缓存,什么情况下需要用到token,token失效怎么办等 主从复制 数据库四种隔离级别,分别举例子,每种在上一种的基础上加了什么锁(很简单不说了) Tcp,坚持计时器。keepalive计时器。 写了一个shell命令,列出重复数据。awk+unique+sort很简单也不说了。 网络协议 计算机网络五层协议:物理层、数据链路层、网络层、传输层、应用层 计算机网络的七层OSI协议: 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 路由器属于网络层 网卡与交换机数据数据链路层 TCP和UDP TCP 是面向连接的字节流服务,对系统资源要求比较多。程序结构复杂,保证数据的正确性和顺序性。 UDP是无连接的,面向数据报,对系统的资源要求比较少,程序结构简单,不能保证数据的正确性和顺序性 网站安全与防护 sql 注入 使用例如PDO的预处理,使用或者编写类似mysql_real_escape_string的方法对sql的特殊字符进行转义 **XSS(cross site script)**跨站脚本攻击 将外部脚本植入到页面中 **CSRF(cross-site request forgey)**跨站请求伪造 伪造受信任的用户信息来请求网站 算法相关 冒泡排序 选择排序 ​ 快速排序 快速排序思想:通过一趟排序将序列分成两部分,一部分所有数据比另一部分所有数据小,然后在这两个序列的内部再分别进行快速排序操作,直到最后形成一个有序序列 二分插入排序思想(之前的序列为有序):插入第i个元素时,对前面的0~i-1进行折半,当前元素与中间元素比较,如果小,前半部分再次折半,如果大,后半部分进行折半,直到最后left>right,然后把目标位置到i-1的所有元素整体后移,把当前元素放进去 基本查找算法: 顺序查找 二分法查找(折半查找):将序列分为两部分,找到序列的中间值,如果查找值大于中间值,继续对右半部分进行折半,如果查找值小于中间值,对左半部分进行折半,直到找到或front>end结束,时间复杂度O(log2n)以2为底n的对数 设计模式 MVC是一种设计框架,而不是设计模式,框架是比模式更高的概念 model负责数据逻辑 controller负责用户交互 view负责数据显示流程: 用户对控制器的某个方法发出请求,控制器调用相应的模型返回数据,然后将数据渲染到视图中返回给用户 单例模式i. 私有化构造方法和__clone方法ii. 提供公有的静态的方法返回实例iii. 提供私有的静态属性保存实例 简单工厂模式(重点在创建不同对象,作用就是用来创建对象的) - 例如一个计算器的加减乘除求余取整i. 定义抽象基类让子类分别继承并实现相应方法ii. 定义Factory工厂类里面提供静态方法用于根据不同的参数实例化相应的子类对象 策略模式(重点在于实例化不同类的解决策略不同,作用是根据不同的情况调用相应的策略或算法) - 例如qq普通用户 vip svip购买皮肤的优惠策略i. 定义抽象基类让子类分别继承并实现相应的方法ii. 根据不同的场景实例化相应的类,然后调用其中的方法获取结果 观察者模式 i. 需要有一个抽象的主题接口和一个抽象的观察者接口 ii. 实现一个主题,实现多个观察者