Java性能调优面试-2

8 篇文章 0 订阅
订阅专栏

1、JVM整体架构

2、JVM内存模型

1、类装载子系统将字节码文件【.class】装载到运行时数据区,即装载到方法区;

2、执行引擎负责执行

3、JVM内存模型分析

1、线程私有:线程栈、本地方法栈以及程序计数器。

       线程公有:堆、方法区【元空间】

2、一个方法对应一块栈帧内存区域,栈帧是存放在栈区间内部

     下图中main()先进栈,computer()后进栈。

3、栈帧内部包含:局部变量表、操作数栈、动态链接、方法出口

public class Math {

    public static final Integer CONSTANT = 666;

    public int compute(){ //一个方法对应一块栈帧内存区域
        int a = 1;
        int b = 2;
        int c = (a + b) * 10;
        return c;
    }

    public static void main(String[] args) {
        Math math = new Math();
        math.compute();
        Math math2 = new Math();
        math.compute();
        System.out.println("hello");
    }
}

4、生成类的字节码文件【javap -c Math.class > Math.txt】

操作数栈:变量值中转的内存区域。

   iconst_1:将int类型变量1压入操作数栈【即操作数栈中有一个值1】

   istore_1 :  将int类型值存入局部变量1【即局部变量表中有一个a=1】

   iconst_2:将int类型变量2压入操作数栈【即操作数栈中有一个值2】

   istore_2 :  将int类型值存入局部变量2【即局部变量表中有一个b=2】

   iload_1:从局部变量1中装载int类型值【即将局部变量表中a=1的1装载到操作数栈】

   iload_2:从局部变量2中装载int类型值【即将局部变量表中b=2的2装载到操作数栈】

   iadd:从操作数栈的栈顶弹出两个变量做加法,对结果压入操作数栈【3】

   bipush: 将一个8位带符号整数压入栈【将10压入操作数栈】

   imul: 从操作数栈的栈顶弹出两个变量做乘法,对结果压入操作数栈【30】

   istore_3:将int类型变量30压入操作数栈【即操作数栈中有一个值30】

   iload_3:将int类型值存入局部变量30【即局部变量表中有一个c=30】

   ireturn:

动态链接:在main方法中,math.compute()中compute属于静态符号,在程序执行中将符号转为指令码,进行执行。

              动态链接:在程序动态运行时,存储指令码的内存地址。

方法出口:compute()执行完后,执行main方法的位置。

程序计数器:保存下一条要执行指令的地址。

本地方法栈:private native void start0()

为什么存在本地方法栈?因为java是95年产生,之前一直是c,java为了与c语言交互,故通过本地方法,java执行c代码.dll。

现在跨语言交互:Thrift、http、微服务等。

命令:javap -c Math.class > Math.txt

Compiled from "Math.java"
public class effective.java.Math {
  public static final java.lang.Integer CONSTANT;

  public effective.java.Math();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public int compute();
    Code:
       0: iconst_1
       1: istore_1
       2: iconst_2
       3: istore_2
       4: iload_1
       5: iload_2
       6: iadd
       7: bipush        10
       9: imul
      10: istore_3
      11: iload_3
      12: ireturn

  public static void main(java.lang.String[]);
    Code:
       0: new           #2                  // class effective/java/Math
       3: dup
       4: invokespecial #3                  // Method "<init>":()V
       7: astore_1
       8: aload_1
       9: invokevirtual #4                  // Method compute:()I
      12: pop
      13: return

  static {};
    Code:
       0: sipush        666
       3: invokestatic  #5                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       6: putstatic     #6                  // Field CONSTANT:Ljava/lang/Integer;
       9: return
}

命令:javap -v Math.class > Maths.txt

Classfile /Users/lihe/workspace/crane/target/classes/effective/java/Math.class
  Last modified 2021-1-17; size 759 bytes
  MD5 checksum 64696f7de671d6425ce394fda905f460
  Compiled from "Math.java"
public class effective.java.Math
  minor version: 0
  major version: 52
  flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 = Methodref          #7.#31         // java/lang/Object."<init>":()V
   #2 = Class              #32            // effective/java/Math
   #3 = Methodref          #2.#31         // effective/java/Math."<init>":()V
   #4 = Methodref          #2.#33         // effective/java/Math.compute:()I
   #5 = Methodref          #34.#35        // java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
   #6 = Fieldref           #2.#36         // effective/java/Math.CONSTANT:Ljava/lang/Integer;
   #7 = Class              #37            // java/lang/Object
   #8 = Utf8               CONSTANT
   #9 = Utf8               Ljava/lang/Integer;
  #10 = Utf8               <init>
  #11 = Utf8               ()V
  #12 = Utf8               Code
  #13 = Utf8               LineNumberTable
  #14 = Utf8               LocalVariableTable
  #15 = Utf8               this
  #16 = Utf8               Leffective/java/Math;
  #17 = Utf8               compute
  #18 = Utf8               ()I
  #19 = Utf8               a
  #20 = Utf8               I
  #21 = Utf8               b
  #22 = Utf8               c
  #23 = Utf8               main
  #24 = Utf8               ([Ljava/lang/String;)V
  #25 = Utf8               args
  #26 = Utf8               [Ljava/lang/String;
  #27 = Utf8               math
  #28 = Utf8               <clinit>
  #29 = Utf8               SourceFile
  #30 = Utf8               Math.java
  #31 = NameAndType        #10:#11        // "<init>":()V
  #32 = Utf8               effective/java/Math
  #33 = NameAndType        #17:#18        // compute:()I
  #34 = Class              #38            // java/lang/Integer
  #35 = NameAndType        #39:#40        // valueOf:(I)Ljava/lang/Integer;
  #36 = NameAndType        #8:#9          // CONSTANT:Ljava/lang/Integer;
  #37 = Utf8               java/lang/Object
  #38 = Utf8               java/lang/Integer
  #39 = Utf8               valueOf
  #40 = Utf8               (I)Ljava/lang/Integer;
{
  public static final java.lang.Integer CONSTANT;
    descriptor: Ljava/lang/Integer;
    flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL

  public effective.java.Math();
    descriptor: ()V
    flags: ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: return
      LineNumberTable:
        line 9: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       5     0  this   Leffective/java/Math;

  public int compute();
    descriptor: ()I
    flags: ACC_PUBLIC
    Code:
      stack=2, locals=4, args_size=1
         0: iconst_1
         1: istore_1
         2: iconst_2
         3: istore_2
         4: iload_1
         5: iload_2
         6: iadd
         7: bipush        10
         9: imul
        10: istore_3
        11: iload_3
        12: ireturn
      LineNumberTable:
        line 14: 0
        line 15: 2
        line 16: 4
        line 17: 11
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0      13     0  this   Leffective/java/Math;
            2      11     1     a   I
            4       9     2     b   I
           11       2     3     c   I

  public static void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=1
         0: new           #2                  // class effective/java/Math
         3: dup
         4: invokespecial #3                  // Method "<init>":()V
         7: astore_1
         8: aload_1
         9: invokevirtual #4                  // Method compute:()I
        12: pop
        13: return
      LineNumberTable:
        line 21: 0
        line 22: 8
        line 23: 13
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0      14     0  args   [Ljava/lang/String;
            8       6     1  math   Leffective/java/Math;

  static {};
    descriptor: ()V
    flags: ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: sipush        666
         3: invokestatic  #5                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
         6: putstatic     #6                  // Field CONSTANT:Ljava/lang/Integer;
         9: return
      LineNumberTable:
        line 11: 0
}
SourceFile: "Math.java"

5、JVM各部分

1、栈与堆关系?栈中对象变量执行堆中具体new的对象。

2、方法区【元空间】包含常量、静态变量、类元信息

3、方法区与堆关系?是相互指向。方法区中的静态变量如果是一个对象会指向堆中的对象;对中对象会指向方法区中的类元信息。

 

3、堆中new 对象是Object

Object Header(对象头):对象头中有个头指针指向对象所属的类。

对象头中头指针作用:当Math msth = new Math();math.compute()时,执行compute()时,对象通过头指针找到对应的类信息,找到类中方法进行执行。

6、堆区间

1、new 出的对象存储在eden。空间分配 Eden【8/10】,From【1/10】,To【1/10】,老年代【1/3】

2、当主线程执行完成,即main()执行完,即mian()栈帧出栈,此时堆中对象还存在,需要GC

3、GC Roots根节点:类加载器、Thread、虚拟机栈的本地变量表、static成员、常量引用、本地方法栈的变量等。

4、对象头中含有分代年龄字段,

老年代对象:静态变量和数据库连接池。其中正常对象年龄达到15岁后自动放到老年代。

7、JVM调优工具--jvisualvm

1、Eden Space从0增长到最高处,代表EdenSpace区被对象占满,此时GCTime进行GC。此时Eden Space空从0开始。

2、当Eden Space满发生GC时,suvivor区存储活着的对象年龄+1,此时在Suvicor0和Suvivor1不断移动

3、当对象年龄=15时,对象会移动到老年代,故老年代时突然升高。

4、当old区满时,发生Full GC。如果次时老年代中的对象都有指针指向,都不是垃圾,则会导致old不会释放空间,则发生OOM

public class HelpTest {

    byte[] a = new byte[1024*100];

    public static void main(String[] args) throws InterruptedException {
        List<HelpTest> helpTests = new ArrayList<>();
        while(true){
            helpTests.add(new HelpTest());
            Thread.sleep(50);
        }
    }
}

5、JVM调优

1、调优目的:因为实际FullGC非常慢,期间有STW会导致程序卡住,性能下降。目的是1、减少FullGC发生次数;2、减少一次FullGC时间

2、JVM调优主要是调整下面两个指标:

停顿时间:垃圾收集器做垃圾回收中断应用执行的时间。-XX:MaxGCPauseMillis

吞吐量:垃圾收集的时间和总时间占比:1/(1+n),吞吐量为1-1/(1+n)。-XX:GCTimeRate

 

 

 

 

 

Java面试题总结 - 【第五章】性能化篇
csdn_welearn的博客
05-08 570
Zookeeper 157. zookeeper 是什么? zookeeper 是一个分布式的,开放源码的分布式应用程序协工具,是 google chubby 的开源实现,是 hadoop 和 hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。 158. zookeeper 都有哪些功能? 集群管理:监控节点存活状...
Java性能面试题汇总
m0_55613022的博客
04-20 739
文章目录 如果化数据库的数据查询,另外应用层上还能如何化? 如果化数据库的数据查询,另外应用层上还能如何化? 1)数据库层面上: 除了主键索引,唯一索引之外,对于常用的查询字段也要加索引。查询的时候尽量使用主键索引,因为MySQL 的 InnoDB 的主键索引索引的是整行数据,而普通索引索引的是主键,会有回表操作。当然索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,需要酌情考虑。 2、化查询语句,尽量采用确认性查询语句,
最全SpringBoot学习教程,GitHub上30K+star,帮你解决95%的问题!
mifffy_java的博客
10-30 1643
灵魂发问:我们为什么要学习SpringBoot??? 官方对 Spring Boot 的定位:Build Anything, Build 任何东西。Spring Boot 旨在尽可能快地启动和运行,并且只需最少的 Spring 前期配置。 同时我们也来看一下官方对后面两个的定位:SpringCloud:Coordinate Anything,协任何事情; SpringCloud Data Flow:Connect everything,连接任何东西。仔细品味一下,Spring 官网对 Spring Bo
最全Java性能:利用VisualVM进行性能分析,2024历年阿里Java面试真题
最新发布
2401_84024343的博客
05-13 717
VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带,能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。在JDK_HOME/bin(默认是C:\Program Files\Java\jdk1.6.0_13\bin)目录下面,有一个jvisualvm.exe文件,双击打开,从UI上来看,这个软件是基于NetBeans开发的了。
JAVA面试题分享二百九十八:数据库性能太差,有哪些方案?
之乎者也·的博客
12-18 901
减少数据量用空间换性能选择合适的存储系统数据总量、高负载、查找的时间复杂度。这里大概解释下收益类型:短期收益,处理成本低,能紧急应对,久了则会有技术债务;长期收益则跟短期收益相反,短期内处理成本高,但是效果能长久使用,扩展性会更好。静态数据意思是,相对改动频率比较低的,也无需过多联表的,where过滤比较少。动态数据与之相反,更新频率高,通过动态条件筛选过滤。
JVM理论篇一:JVM常见面试
luckywuxn的博客
07-29 650
JIT 编译器的势在于它可以根据实际的运行时情况进行动态化,使得 Java 程序在运行过程中逐渐达到接近原生代码的性能。通过减少解释执行的开销和对热点代码的化,JIT 编译器能够提升 Java 程序的整体性能。堆的特点包括对象的动态分配和释放,以及支持对象的共享和并发访问。栈(Stack)是 JVM 内存模型中用于存储方法用和局部变量的区域。栈的特点包括方法用的压栈和出栈,以及局部变量的创建和销毁。解释 JVM 的永久代(PermGen)和元空间(Metaspace)的作用和区别。
Java性能 6步实现项目性能全面升级+面试高频性能问题讲解.rar
10-19
Java性能 6步实现项目性能全面升级+面试高频性能问题讲解视频教程分享,性能化的N种企业级解决方案,囊括了【数据库化】、【Tomcat化】、【JVM化】、【垃圾回收】、【Netty化】、【Nginx化】、...
阿里巴巴Java性能实战(2021-2022华山版)+Java架构核心宝典+性能化手册100技巧.rar
11-08
阿里巴巴Java性能华山版是一套系统性能教程,!通过这份笔记的学习,你将会有一个系统的头脑和策略!快了何止100%?需要的朋友可下载试试! 众所周知性能可以使系统稳定,用户体验更佳,甚至在...
2024年java面试-jvm性能面试题第一部分
04-21
包括 jvm 的内存模型,新生代、老年代、持久代、oom、对应的参数设置以及为啥要这样设置等等,这份资料都有所介绍,当然啦,一份是介绍不完的,感性的大伙儿可以看下我的第二份资料:也是关于jvm性能的!...
2024年java面试-jvm性能面试题第二部分
04-21
书接上半部分,核心内容就在于介绍jvm方面的方案以及策略,这部分主要是介绍了堆内存方面的分区介绍、GC等内容,在应付面试以及平常工作中还是有点作用的!!!
Java性能 6步实现项目性能升级
12-14
Java性能 6步实现项目性能升级 【6大专题】:数据库+Tomcat+JVM参数+JVM-GC+Netty+Nginx ; 1套高频面试集锦,为你的实力代言!
大厂面试必问 Java 的 14 道 Tomcat 真题,你吃透了?
m0_73256420的博客
08-24 213
在工作中,作为 Java 开发的程序员,Tomcat 服务器是大家常用的,也是很多公司现在正在用的。但是,在系统并发量比较大的情况下,Tomcat 就会出现卡死和自动关闭等问题。如何化 Tomcat,这也是面试官经常问的问题。
Java性能
liuerchong的博客
03-13 1517
复用化 在写代码的时候,你会发现有很多重复的代码可以提取出来,做成公共的方法。这样,在下次用的时候,就不用再费劲写一遍了。 这种思想就是复用。上面的描述是编码逻辑上的化,对于数据存取来说,有同样的复用情况。无论是在生活中还是编码中,重复的事情一直在发生,如果没有复用,工作和生活就会比较累。 在软件系统中,谈到数据复用,我们首先想到的就是缓冲和缓存。 缓冲(Buffer),常见于对数据的暂存,然后批量传输或者写入。多使用顺序方式,用来缓解不同设备之间频繁地、缓慢地随机写,缓冲主要针对的是写操作。 缓存(C
你值得拥有!面试官让我下周来上班!大牛最佳总结
m0_56051002的博客
03-17 1021
前言 本人是底层 211 本科,刚毕业,⽆科研经历,但是有些项⽬经历。 在国内监控行业某头部企业做过一段时间的实习。 想着投下字节,可以积累⼀下⾯试经验和为金九银十面招做准备。投了简历之后,过了一段时 间,HR 就打电话跟我约时间, 说明一下,我投的是北京 office。 以下就是一个面试的全部过程,分享出来给感兴趣的朋友们一看。 蚂蚁金服一面: 下午杭州的电话,问有没有空,果断有空,虽然感觉略显紧张,有点懵逼。 面试的题目: HashMap和Hashtable的区别 实现一个保证迭代顺序的HashMap
基于Ribbon的服务
zty
03-15 330
说明 官方网址: https://github.com/Netflix/ribbon Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务用。 1.Ribbon 服务用 1.项目中引入依赖 说明: 1.如果使用的是eureka client 和 consul client,无须引入依赖,因为在eureka,consu
一篇文章帮你搞定JVM中的虚拟机栈
xzy的博客
05-12 695
文章目录一篇文章帮你搞定JVM中的虚拟机栈虚拟机栈的概述虚拟机栈的常见异常与如何设置栈大小栈中可能会出现的异常设置栈内存大小栈的存储结构和运行原理栈中存储什么?栈运行原理栈帧的内部结构栈帧存储内容局部变量表(Local Variables)方法对应的字节码的内部结构的剖析关于Slot的理解操作数栈(Operand Stack)操作数栈的特点涉及操作数栈的字节码指令执行分析---代码追踪动态链接(或指向运行时常量池的方法引用)的理解与常量池的作用方法返回地址(Return Address)栈的相关面试题 一篇
面试Java性能
Chen_leilei的博客
11-18 529
1.尽量避免随意使用静态变量 当某个对象被定义为static变量所引用,那么GC通常是不会回收这个对象所占据的内存 比如zhege zzhege public class A{ private static B b = new B(); } 这个时候静态变量B的生命周期和A类同步,如果A类不会卸载,那么B对象就hi常驻内存,知道程序终止 2.避免过多的创建JAVA对象 尽量避免在经常用的方法,循环中new对象,有序系统不仅要花费时间来创建对象,而且还要花费时间对这些对象进行垃圾..
Java三年经验 - 面试总结
weixin_30293079的博客
12-16 1834
一轮面试下来,由最初的自信什么都能做,到现在感觉什么都不会做;但是面对面试官,却更坦然。 对自己还能记得起来的面试题,稍微整理一下。欢迎指正。 private、默认、protected、public作用范围1)private,同类2)默认,同类、同包3)protected,同类,同包,子类4)public,所有 String trim的实现原理去掉首尾ASCII码值小于' '(空格)的字符 ...
面试 -- 核心篇 -- 性能
代码能让我保持心静,心静能让我保持动力
04-22 993
性能化·性能指标有哪些·如何发现性能瓶颈·性能的常见手段·说说你在项目中如何进行性能
java常见面试
09-19
- JProfiler:一款商业化的Java性能分析工具,提供了丰富的功能和图形化界面。 - 压力测试工具:如Apache JMeter、Gatling等,用于模拟多用户并发访问情况,测试系统的性能瓶颈。 问题4: 如何解决Java应用程序的...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • python 中的[:-1]和[::-1] 247833
  • Java基础(七): instanceof用法详解 91099
  • python错误--‘list‘ object is not callable可能的原因之一 87519
  • Python读取txt文本出现“ ‘gbk‘ codec can‘t decode byte 0xbf in position 2: illegal multibyte sequence” 69041
  • numpy.split()函数 62517

分类专栏

  • 社招面经 付费 19篇
  • Java中间件 付费 17篇
  • Myyuan--电商系统开发实战
  • Myyuan项目--技术积累
  • Myyuan--Springboot
  • Myyuan--需求分析、设计
  • MyYuan--Idea
  • MyYuan--Git
  • MyYuan--设计模式 9篇
  • 欢聚 1篇
  • 分布式 1篇
  • Redis 7篇
  • Dubbo
  • NIO/Netty 1篇
  • 日志/Postman 4篇
  • Linux 17篇
  • Mysql 25篇
  • 刷题/Leetcode/DS 20篇
  • JVM 42篇
  • HTTP/RESTful、RPC/Thrift 9篇
  • Java并发编程 24篇
  • Java集合 36篇
  • Java基础类 24篇
  • Java多线程 25篇
  • Java基础详解 52篇
  • Java8 9篇
  • SpringMVC 12篇
  • SpringCloud/Hystrix 10篇
  • Docker 1篇
  • SpringBoot 32篇
  • Spring5/Reactive/Flux 11篇
  • Mybatis 14篇
  • Hibernate
  • Maven 9篇
  • 线上问题排查
  • Shell脚本
  • Guava 1篇
  • Aviator 1篇
  • Java核心技术面试精讲 13篇
  • Java性能优化 8篇
  • JavaWeb 13篇
  • 计算机相关知识 5篇
  • 日志/异常 11篇
  • 代码重构 1篇
  • EffectiveJava 4篇
  • IDEA编程工具 26篇
  • 操作系统 2篇
  • 大数据 31篇
  • Python相关 1篇
  • Python基础详解 86篇
  • Python数学基础 7篇
  • Python机器学习 36篇
  • 学习ing

最新评论

  • Java基础(七): instanceof用法详解

    卑微的小丑之kill: 确实不错

  • 异常(三):Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:exec (default-cli)

    m0_73444243: 你好,请问最后是怎么解决的呢,我也碰到这个问题了

  • 为什么 Java 中全局变量不一定初始化,局部变量必须初始化?

    souuuuuux: 总结的太棒了,谢谢!一直有点概念混淆,终于捋顺了

  • python之向列表循环添加字典

    suyujun01: 强,这个问题折腾我差不多一天!

  • JVM基础(四):Java类加载机制

    yygr: 我的理解是符号引用就是一个字符串的表达式,就是真实物体的代表名称,而直接引用就是真正的物体,比如new出来的对象

大家在看

  • DSP28335的SCI模块(串行通信接口)
  • 深入理解Java多线程与线程池:提升程序性能的利器
  • 牛客网SQL大厂面试真题 227
  • 毕业设计-基于SSM+JSP的电子商城系统的设计与实现(源码+LW+包运行) 480
  • 黑客为何伪造数据泄露 240

最新文章

  • Postman(2):form-data、x-www-form-urlencoded、raw、binary的区别
  • Linux命令(三):SFTP
  • Java编程工具(12):idea中Compile、Make和Build的区别
2022年68篇
2021年357篇
2020年65篇
2019年14篇
2018年173篇

目录

目录

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司吉祥网站seo优化西乡外贸网站制作双龙百姓网标王推广布吉企业网站制作光明SEO按效果付费平湖网站定制大芬百度竞价包年推广大芬百度seo民治seo网站优化广州网站建设设计惠州高端网站设计大运SEO按效果付费布吉网站推广工具大鹏关键词排名包年推广荷坳seo排名盐田百姓网标王推广爱联网站排名优化福田标王广州网站优化按天收费吉祥网站搭建南山百搜标王光明关键词按天收费广州建站坪地seo网站优化广州设计网站观澜推广网站南联优秀网站设计大运seo横岗网络营销观澜营销网站歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化