当前位置: 首页 > news >正文

商城网站建设自助建站平台中国建设网官方

商城网站建设自助建站平台,中国建设网官方,企业融资的40种方式,个人网站注册名称Java基础部分与区别#xff1f;和都是逻辑运算符#xff0c;都是判断两边同时真则为真#xff0c;否则为假#xff1b;但是当第一个条件不成之后#xff0c;后面的条件都不执行了#xff0c;而则还是继续执行#xff0c;直…Java基础部分与区别和都是逻辑运算符都是判断两边同时真则为真否则为假但是当第一个条件不成之后后面的条件都不执行了而则还是继续执行直到整个条件语句执行完为止。使用 final 关键字修饰一个变量时是引用不能变还是引用的对象不能变使用 final 关键字修饰一个变量时是指引用变量不能变引用变量所指向的对象中的内容 还是可以改变的。静态变量和实例变量的区别在语法定义上的区别静态变量前要加 static 关键字而实例变量前则不加。在程序运行时的区别实例变量属于某个对象的属性必须创建了实例对象其中的实例变 量才会被分配空间才能使用这个实例变量。静态变量不属于某个实例对象而是属于类 所以也称为类变量只要程序加载了类的字节码不用创建任何实例对象静态变量就会被分配空间静态变量就可以被使用了。总之实例变量必须创建对象后才可以通过这个对象 来使用静态变量则可以直接使用类名来引用。静态变量使用时,通过类名.名称,实例变量必须要初始化后才能使用。实例变量是实例化后才会分配空间,而静态变量当类加载时会分配空间。是否可以从一个 static 方法内部发出对非 static 方法的调用不可以。因为非 static 方法是要与对象关联在一起的必须创建一个对象后才可以在该对 象上进行方法调用而 static 方法调用时不需要创建对象可以直接调用。也就是说当一 个 static 方法被调用时可能还没有创建任何实例对象如果从一个 static 方法中发出对非 static 方法的调用那个非 static 方法是关联到哪个对象上的呢这个逻辑无法成立所以 一个 static 方法内部发出对非 static 方法的调用。非static方法可以访问static方法.static方法不能访问非static方法和 equals 方法究竟有什么区别 如果判断值类型的话判断内容是否相同。如果判断引用类型则是判断内存地址是否相同Equals判断值内容是否相等Integer 与 int 的区别Integer 是引用类型,默认值是null。而int是是值类型默认值是0请说出作用域 public private protected以及不写时的区别这四个作用域的可见范围如下表所示。说明如果在修饰的元素上面没有写任何访问修饰符则表示 friendly。作用域 当前类 同一包 package 子孙类 其他包 packagepublic √ √ √ √protected √ √ √ ×friendly √ √ × ×private √ × × ×重载与重写区别重载是同一个类中方法名称相同 但是参数或个数不同。与返回值没有关系。重写是在多个类中 产生继承关系。父类与子类的方法方法必须相同。接口与抽象类的区别区别:定义接口的关键字是interface 而定义抽象类的关键字是abstract。接口中成员不能有私有 抽象类可以。接口中定义的成员 是finl public static 类型 抽象类没有。接口中的不能有普通方法 抽象类中可以。相同 两个都不new但是 接口与抽象类是面向对象必备知识设计模式、重构代码有必然作用final, finally, finalize 的区别。final 用于声明属性方法和类分别表示属性不可变方法不可覆盖类不可继承。内部类要访问局部变量局部变量必须定义成 final 类型例如一段代码……finally 是异常处理语句结构的一部分表示总是执行。finalize 是 Object 类的一个方法在垃圾收集器执行的时候会调用被回收对象的此方法可以覆盖此方法提供垃圾收集时的其他资源回收例如关闭文件等。 JVM 不保证此方法总被调用String、StringBuffer与StringBuilder的区别String 字符串常量StringBuffer 字符串变量线程安全StringBuilder 字符串变量非线程安全所有的类都继承于object类你用过的object类的直接子类有哪些object类常用的方法有哪些1clone方法保护方法实现对象的浅复制只有实现了Cloneable接口才可以调用该方法否则抛出CloneNotSupportedException异常。2getClass方法final方法获得运行时类型。3toString方法该方法用得比较多一般子类都有覆盖。4finalize方法该方法用于释放资源。因为无法确定该方法什么时候被调用很少使用。5equals方法该方法是非常重要的一个方法。一般equals和是不一样的但是在Object中两者是一样的。子类一般都要重写这个方法。6.数组有没有length()这个方法? String有没有length()这个方法答数组没有length()这个方法有length的属性。String有有length()这个方法。7hashCode方法该方法用于哈希查找重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。一般必须满足obj1.equals(obj2)true。可以推出obj1.hash- Code()obj2.hashCode()但是hashCode相等不一定就满足equals。不过为了提高效率应该尽量使上面两个条件接近等价。7wait方法wait方法就是使当前线程等待该对象的锁当前线程必须是该对象的拥有者也就是具有该对象的锁。wait()方法一直等待直到获得锁或者被中断。wait(long timeout)设定一个超时间隔如果在规定时间内没有获得锁就返回。调用该方法后当前线程进入睡眠状态直到以下事件发生。1其他线程调用了该对象的notify方法。2其他线程调用了该对象的notifyAll方法。3其他线程调用了interrupt中断该线程。4时间间隔到了。此时该线程就可以被调度了如果是被中断的话就抛出一个InterruptedException异常。8notify方法该方法唤醒在该对象上等待的某个线程。9notifyAll方法该方法唤醒在该对象上等待的所有线程反射的优缺点反射就是正在运行动态读取这个类的完整信息。优点java的反射机制就是增加程序的灵活性、缺点缺点1性能问题使用反射基本上是一种解释操作用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和扩展性要求很高的系统框架上普通程序不建议使用。2使用反射会模糊程序内内部逻辑程序员希望在源代码中看到程序的逻辑反射等绕过了源代码的技术因而会带来维护问题。反射代码比相应的直接代码更复杂。那些地方用到了反射例如: jdbc、Java常用框架、jdk的动态代理、android的加载布局文件java 中有几种类型的流JDK 为每种类型的流提供了一些抽象类以供继承 为每种类型的流提供了一些抽象类以供继承请说出他们分别是哪些类 字节流字符流。字节流继承于 InputStream OutputStream字符流继承于InputStreamReaderOutputStreamWriter。在 http://java.io 包中还有许多其他的流主要是为了提高性能和使用方便。多线程部分什么是多线程在一个应用程序中,同时有多个不同的执行路径。说一下多线程的好处提供程序效率。线程和进程有什么区别线程是进程的一条执行路径而进程是线程的集合。什么是线程同步、异步线程同步表示当前线程执行完后下一个线程接着执行。线程异步表示, 在一个应用程序中,同时有多个不同的执行路径。例如 javaweb ajax android handler线程之间如何同步线程之间同步使用 synchronized、wait 与 notify什么是线程不安全如何解决重点就是在多个线程共享同一个数据会受到其他线程的干扰。如何解决:使用线程同步技术 用上锁(synchronized)。 让一个线程执行完了在让另一个线程执行。如何创建一个线程有几种方法继承thread类 重写run方法、实现Runnalbe接口重新run方法 启动一个线程用start();是使用Runnalbe接口好还是继承Thread类好 是实现Runnalbe接口好因为实现的接口还可以继续继承。如果继承了Thread类不能在继承。sleep()和 wait()有什么区别?a、sleep是让当前线程指定休眠时间然后继续工作 不释放锁 b、让当前线程wait则是等待直到有线程通知notify唤醒他才会重新工作。释放锁集合相关面试题说一下数据结构中的什么是数组什么是链表所谓数组是相同数据类型的元素按一定顺序排列的集合数组存储区间是连续的占用内存严重故空间复杂的很大。但数组的二分查找时间复杂度小为O(1)数组的特点是寻址容易插入和删除困难所谓链表链表是一种物理存储单元上非连续、非顺序的存储结构数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点链表中每一个元素称为结点组成结点可以在运行时动态生成。每个结点包括两个部分一个是存储数据元素的数据域另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构操作复杂。由于不必须按顺序存储链表在插入的时候可以达到O(1)的复杂度比另一种线性表顺序表快得多但是查找一个节点或者访问特定编号的节点则需要O(n)的时间而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。链表:链表存储区间离散占用内存比较宽松故空间复杂度很小但时间复杂度很大达ON。链表的特点是寻址困难插入和删除容易。说一下什么是哈希表那么我们能不能综合两者的特性做出一种寻址容易插入删除也容易的数据结构答案是肯定的这就是我们要提起的哈希表。哈希表(Hash table既满足了数据的查找方便同时不占用太多的内容空间使用也十分方便。  哈希表有多种不同的实现方法我接下来解释的是最常用的一种方法—— 拉链法我们可以理解为“链表的数组” 如图说一下ArrayList底层实现方式①ArrayList通过数组实现一旦我们实例化ArrayList无参数构造函数默认为数组初始化长度为10②add方法底层实现如果增加的元素个数超过了10个那么ArrayList底层会新生成一个数组长度为原数组的1.5倍1然后将原数组的内容复制到新数组当中并且后续增加的内容都会放到新数组当中。当新数组无法容纳增加的元素时重复该过程。是一旦数组超出长度就开始扩容数组。扩容数组调用的方法 Arrays.copyOf(objArr, objArr.length 1);说一下LinkedList底层实现方式LinkedList底层的数据结构是基于双向循环链表的且头结点中不存放数据,如下既然是双向链表那么必定存在一种数据结构——我们可以称之为节点节点实例保存业务数据前一个节点的位置信息和后一个节点位置信息如下图所示说一下HashMap底层实现方式HashMap是由数组链表组成put方法底层实现:通过key的hash值%Entry[].length得到该存储的下标位置如果多个key的hash值%Entry[].length 值相同话就就会存储到该链表的后面。ArrayList 和 Vector 的区别这两个类都实现了 List 接口(List 接口继承了Collection 接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,并且其中的数据是允许重复的,ArrayList 与 Vector 的区别,这主要包括两个方面:.(1)同步性:Vector 是线程安全的,也就是说是它的方法之间是线程同步的,而 ArrayList 是线程序不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用 ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用 Vector,因为不需要我们自己再去考虑和编写线程安全的代码。(2)数据增长:ArrayList 与 Vector 都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加 ArrayList 与 Vector 的存储空间,每次要增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定的平衡。Vector 默认增长为原来两倍,而 ArrayList 的增长策略在文档中没有明确规定(从源代码看到的是增长为原来的1.5倍)。ArrayList 与 Vector 都可以设置初始的空间大小,Vector 还可以设置增长的空间大小,而 ArrayList 没有提供设置增长空间的方法。HashMap 和 Hashtable 的区别总结hashmap线程不安全允许有null的键和值效率高一点、方法不是Synchronize的要提供外同步有containsvalue和containsKey方法HashMap 是Java1.2 引进的Map interface 的一个实现HashMap是Hashtable的轻量级实现hashtable线程安全不允许有null的键和值效率稍低、方法是是Synchronize的有contains方法方法、Hashtable 继承于Dictionary 类Hashtable 比HashMap 要旧List 和Set、Map 区别?Java中的集合包括三大类它们是Set、List和Map它们都处于java.util包中Set、List和Map都是接口它们有各自的实现类。Set的实现类主要有HashSet和TreeSetList的实现类主要有ArrayListMap的实现类主要有HashMap和TreeMap。  Set中的对象不按特定方式排序并且没有重复对象。但它的有些实现类能对集合中的对象按特定方式排序例如TreeSet类它可以按照默认排序也可以通过实现java.util.ComparatorType接口来自定义排序方式。  List中的对象按照索引位置排序可以有重复对象允许按照对象在集合中的索引位置检索对象如通过list.get(i)方式来获得List集合中的元素。  Map中的每一个元素包含一个键对象和值对象它们成对出现。键对象不能重复值对象可以重复。List、Map、Set 三个接口,存取元素时,各有什么特点?list存储 有序的 可重复的访问可以for循环foreach循环iterator迭代器 迭代。set存储无序的 不重复的访问可以foreach循环iterator迭代器 迭代map存储存储的是一对一对的映射 ”keyvalue“key值 是无序不重复的。value值可重复访问可以map中key值转为为set存储然后迭代这个set用map.get(key)获取value也可以 转换为entry对象 用迭代器迭代说出 ArrayList,Vector, LinkedList 的存储性能和特性 ArrayList和Vector都是使用数组方式存储数据此数组元素数大于实际存储的数据以便增加和插入元素它们都允许直接按序号索引元素但是插入元素要涉及数组元素移动等内存操作所以索引数据快而插入数据慢Vector由于使用了synchronized方法线程安全通常性能上较ArrayList差而LinkedList使用双向链表实现存储按序号索引数据需要进行前向或后向遍历但是插入数据时只需要记录本项的前后项即可所以插入速度较快。去掉一个 Vector 集合中重复的元素通过Vector.contains方法判断是否包含该元素如果没有包含就添加到新的集合当中适用于数据较小的情况下。Collection 和 Collections 的区别。Collection是集合类的上级接口继承于它的接口主要有Set和List。 Collections是针对集合类的一个帮助类它提供了一系列静态方法实现了对各种集合的排序搜索和线程安全等操作。Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用还是equals()?它们有何区别?set里的元素是不能重复的用iterator()方法来区分重复与否。equals 方法是String类从它的超类Object中继承的被用来检测两个对象是否相等即两个对象的内容是否相等。用于比较引用和比较基本数据类型时具有不同的功能比较基本数据类型如果两个值相同则结果为true 而在比较引用时如果引用指向内存中的同一对象结果为trueHashMap面试题HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap都知道哪里要用HashMap知道Hashtable和HashMap之间的区别那么为何这道面试题如此特殊呢是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入让这道题变得更加复杂。让我们开始探索的旅程吧先来些简单的问题“你用过HashMap吗” “什么是HashMap你为什么用到它”几乎每个人都会回答“是的”然后回答HashMap的一些特性譬如HashMap可以接受null键值和值而Hashtable则不能HashMap是非synchronized;HashMap很快以及HashMap储存的是键值对等等。这显示出你已经用过HashMap而且对它相当的熟悉。但是面试官来个急转直下从此刻开始问出一些刁钻的问题关于HashMap的更多基础的细节。面试官可能会问出下面的问题“你知道HashMap的工作原理吗” “你知道HashMap的get()方法的工作原理吗”你也许会回答“我没有详查标准的Java API你可以看看Java源代码或者Open JDK。”“我可以用Google找到答案。”但一些面试者可能可以给出答案“HashMap是基于hashing的原理我们使用put(key, value)存储对象到HashMap中使用get(key)从HashMap中获取对象。当我们给put()方法传递键和值时我们先对键调用hashCode()方法返回的hashCode用于找到bucket位置来储存Entry对象。”这里关键点在于指出HashMap是在bucket中储存键对象和值对象作为Map.Entry。这一点有助于理解获取对象的逻辑。如果你没有意识到这一点或者错误的认为仅仅只在bucket中存储值的话你将不会回答如何从HashMap中获取对象的逻辑。这个答案相当的正确也显示出面试者确实知道hashing以及HashMap的工作原理。但是这仅仅是故事的开始当面试官加入一些Java程序员每天要碰到的实际场景的时候错误的答案频现。下个问题可能是关于HashMap中的碰撞探测(collision detection)以及碰撞的解决方法“当两个对象的hashcode相同会发生什么” 从这里开始真正的困惑开始了一些面试者会回答因为hashcode相同所以两个对象是相等的HashMap将会抛出异常或者不会存储它们。然后面试官可能会提醒他们有equals()和hashCode()两个方法并告诉他们两个对象就算hashcode相同但是它们可能并不相等。一些面试者可能就此放弃而另外一些还能继续挺进他们回答“因为hashcode相同所以它们的bucket位置相同‘碰撞’会发生。因为HashMap使用链表存储对象这个Entry(包含有键值对的Map.Entry对象)会存储在链表中。”这个答案非常的合理虽然有很多种处理碰撞的方法这种方法是最简单的也正是HashMap的处理方法。但故事还没有完结面试官会继续问“如果两个键的hashcode相同你如何获取值对象” 面试者会回答当我们调用get()方法HashMap会使用键对象的hashcode找到bucket位置然后获取值对象。面试官提醒他如果有两个值对象储存在同一个bucket他给出答案:将会遍历链表直到找到值对象。面试官会问因为你并没有值对象去比较你是如何确定确定找到值对象的除非面试者直到HashMap在链表中存储的是键值对否则他们不可能回答出这一题。其中一些记得这个重要知识点的面试者会说找到bucket位置之后会调用keys.equals()方法去找到链表中正确的节点最终找到要找的值对象。完美的答案许多情况下面试者会在这个环节中出错因为他们混淆了hashCode()和equals()方法。因为在此之前hashCode()屡屡出现而equals()方法仅仅在获取值对象的时候才出现。一些优秀的开发者会指出使用不可变的、声明作final的对象并且采用合适的equals()和hashCode()方法的话将会减少碰撞的发生提高效率。不可变性使得能够缓存不同键的hashcode这将提高整个获取对象的速度使用StringInterger这样的wrapper类作为键是非常好的选择。如果你认为到这里已经完结了那么听到下面这个问题的时候你会大吃一惊。“如果HashMap的大小超过了负载因子(load factor)定义的容量怎么办”除非你真正知道HashMap的工作原理否则你将回答不出这道题。默认的负载因子大小为0.75也就是说当一个map填满了75%的bucket时候和其它集合类(如ArrayList等)一样将会创建原来HashMap大小的两倍的bucket数组来重新调整map的大小并将原来的对象放入新的bucket数组中。这个过程叫作rehashing因为它调用hash方法找到新的bucket位置。如果你能够回答这道问题下面的问题来了“你了解重新调整HashMap大小存在什么问题吗”你可能回答不上来这时面试官会提醒你当多线程的情况下可能产生条件竞争(race condition)。当重新调整HashMap大小的时候确实存在条件竞争因为如果两个线程都发现HashMap需要重新调整大小了它们会同时试着调整大小。在调整大小的过程中存储在链表中的元素的次序会反过来因为移动到新的bucket位置的时候HashMap并不会将元素放在链表的尾部而是放在头部这是为了避免尾部遍历(tail traversing)。如果条件竞争发生了那么就死循环了。这个时候你可以质问面试官为什么这么奇怪要在多线程的环境下使用HashMap呢热心的读者贡献了更多的关于HashMap的问题为什么String, Interger这样的wrapper类适合作为键 String, Interger这样的wrapper类作为HashMap的键是再适合不过了而且String最为常用。因为String是不可变的也是final的而且已经重写了equals()和hashCode()方法了。其他的wrapper类也有这个特点。不可变性是必要的因为为了要计算hashCode()就要防止键值改变如果键值在放入时和获取时返回不同的hashcode的话那么就不能从HashMap中找到你想要的对象。不可变性还有其他的优点如线程安全。如果你可以仅仅通过将某个field声明成final就能保证hashCode是不变的那么请这么做吧。因为获取对象的时候要用到equals()和hashCode()方法那么键对象正确的重写这两个方法是非常重要的。如果两个不相等的对象返回不同的hashcode的话那么碰撞的几率就会小些这样就能提高HashMap的性能。我们可以使用自定义的对象作为键吗 这是前一个问题的延伸。当然你可能使用任何对象作为键只要它遵守了equals()和hashCode()方法的定义规则并且当对象插入到Map中之后将不会再改变了。如果这个自定义对象时不可变的那么它已经满足了作为键的条件因为当它创建之后就已经不能改变了。我们可以使用CocurrentHashMap来代替Hashtable吗这是另外一个很热门的面试题因为ConcurrentHashMap越来越多人用了。我们知道Hashtable是synchronized的但是ConcurrentHashMap同步性能更好因为它仅仅根据同步级别对map的一部分进行上锁。ConcurrentHashMap当然可以代替HashTable但是HashTable提供更强的线程安全性。看看这篇博客查看Hashtable和ConcurrentHashMap的区别。我个人很喜欢这个问题因为这个问题的深度和广度也不直接的涉及到不同的概念。让我们再来看看这些问题设计哪些知识点hashing的概念HashMap中解决碰撞的方法equals()和hashCode()的应用以及它们在HashMap中的重要性不可变对象的好处HashMap多线程的条件竞争重新调整HashMap的大小总结HashMap的工作原理HashMap基于hashing原理我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时它调用键对象的hashCode()方法来计算hashcode让后找到bucket位置来储存值对象。当获取对象时通过键对象的equals()方法找到正确的键值对然后返回值对象。HashMap使用链表来解决碰撞问题当发生碰撞了对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。当两个不同的键对象的hashcode相同时会发生什么 它们会储存在同一个bucket位置的链表中。键对象的equals()方法用来找到键值对。因为HashMap的好处非常多我曾经在电子商务的应用中使用HashMap作为缓存。因为金融领域非常多的运用Java也出于性能的考虑我们会经常用到HashMap和ConcurrentHashMap。你可以查看更多的关于HashMap的文章:请讲下Java里面的容器 分两大类Map和Collection。而Collection又有子接口List(数据存储顺序和插入顺序是一样的)、Set(里面的元素具有唯一性) Map是存储键值对的,里面的健不可以重复,但值可以重复a. 对于List主要有ArrayList和LinkedList两种实现。实现的数据结构不同所以主要的区别也都是和数据结构相关的。 ArrayList基于数组随机访问快而对于中间元素的插入删除效率比较低而且需要考虑扩容问题。LinkedList则 基于链表和ArrayList提到的正相反随机访问慢但对于中间元素的插入和删除更有效率。Set也是一种Collection和List比起来主要体现在元素唯一性。请说下Iterator的作用 迭代器可以实现Collection接口的方法可以一个一个地获取集合中的元素在遍历集合时 可判断是否有下一个元素说下ArrayList和LinkedList的区别和联系并说明什么情况下用它们 区别:ArrayList用于对象的随机访问速度快,没有顺序LinkedList实现机制是链表式的,和顺序有关,速度比ArrayList慢联系:ArrayList和LinkedList都是List接口的实现类当要快速获取一个值时,用ArrayList,用于顺序插入操作时,用LinkedList.说下ListSetMap三种集合各有什么特征List集合中的元素可以重复,Set集合中的元素不可以重复Map集合用键-值映射存放对象,Map容器中的键对象不能重复,值对象可以重复HashSet和TreeSet有什么区别什么时候用它们 区别:HashSet中的元素不能重复,没有顺序TreeSet中的元素不能重复,但有顺序当集合中的元素需要排序时,用TreeSet一般情况下用HashSet,因为不需要排序,速度比TreeSet快什么是泛型怎么使用的有什么好处答案 定义一个集合时可以知道里面定义的是什么类型使用:在集合类型后面加 数据类型 使用泛型后,从集合中取得元素后就不用再用强转 什么是for each循环它可以循环那些数据类型答案 也可以叫增强型循环通过对象拿到集合里的值因为扩展性比较强建议多使用可以用来循环集合和数组比较下集合和数组的优缺点 集合是多个对象的容器,可以将不同数据类型的多个对象组织在一起数组类型是有相同数据类型的数据集合,数组是很多语言都支持的底层数据结构,性能上是最高的HashMap与LinkedHashMap,和TreeMap的区别。共同点HashMap,LinkedHashMap,TreeMap都属于Map的实现类.不同点: 1.HashMap里面存入的键值对在取出的时候是随机的,2.TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键那么TreeMap会更好。3. LinkedHashMap 是HashMap的一个子类如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现.在List里面怎么去掉重复的数通过把List里面的数据放入HashSet可以去除重复HashMap和ArrayList是不是都是线程不安全的 ArrayList是线程不安全的HashMap是线程不安全的还有我们常见的一些JAVA集合都是线程不安全,这样做是为了提高性能在JDK5以后提供了线程安全的并发包java.util.concurrent并发包,譬如里面的类CopyOnWriteArrayList,CopyOnWriteArraySet,ConcurrentHashMap等ArrayList集合加入1万条数据应该怎么提高效率因为ArrayList的底层是数组实现,并且数组的默认值是10,如果插入10000条要不断的扩容,耗费时间,所以我们调用ArrayList的指定容量的构造器方法ArrayList(int size) 就可以实现不扩容,就提高了性能网路通讯部分Xml与JSON区别数据交换格式区别:xml是重量级、json是轻量级xml比较占带宽、json占带宽小,易于压缩json在webservice 用的比较少、xml用的较多相同两者都用在项目交互下 例如 移动app接口用的就是json、在web项目中与其他项目对接用xml较多。json常用解析方法 gson、jsonobject、jackson等 xml dom sax pull 解析TCP与UDP区别 udp: a、是面向无连接, 将数据及源的封装成数据包中,不需要建立建立连接 b、每个数据报的大小在限制64k内 c、因无连接,是不可靠协议 d、不需要建立连接,速度快tcp a、建议连接形成传输数据的通道. b、在连接中进行大数据量传输以字节流方式 c 通过三次握手完成连接,是可靠协议 d 必须建立连接m效率会稍低 聊天、网络视频会议、桌面共享用的就是 udp说说三次握手? 1第一次握手建立连接时客户端A发送SYN包SYNj到服务器B并进入SYN_SEND状态等待服务器B确认。 2第二次握手服务器B收到SYN包必须确认客户A的SYNACKj1同时自己也发送一个SYN包SYNk即SYNACK包此时服务器B进入SYN_RECV状态。 3第三次握手客户端A收到服务器B的SYNACK包向服务器B发送确认包ACKACKk1此包发送完毕客户端A和服务器B进入ESTABLISHED状态完成三次握手。 完成三次握手客户端与服务器开始传送数据。 什么是Webserivce?Webservice就是提供不同的平台相互通讯基于Soap协议。Web service 就是一个应用程序它向外界暴露出一个能够通过Web进行调用的API。SOAP是一种简单基于xml的轻量协议用户web上交换结构化信息和类型信息。soap请求是HTTP POST的一个专用版本遵循一种特殊的xml消息格式Content-type设置为: text/xml任何数据都可以xml化。WebService实现原理是HTTP协议XML说一下什么是Http协议对器客户端和 服务器端之间数据传输的格式规范格式简称为“超文本传输协议”。什么是Http协议无状态协议怎么解决Http协议无状态协议曾经去某创业公司问到1、无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息2、无状态协议解决办法 通过1、Cookie 2、通过Session会话保存。说一下Http协议中302状态(阿里经常问)http协议中返回状态码302表示重定向。这种情况下服务器返回的头部信息中会包含一个 Location 字段内容是重定向到的urlHttp协议有什么组成请求报文包含三部分a、请求行包含请求方法、URI、HTTP版本信息b、请求首部字段c、请求内容实体响应报文包含三部分a、状态行包含HTTP版本、状态码、状态码的原因短语b、响应首部字段c、响应内容实体Http协议中有那些请求方式GET 用于请求访问已经被URI统一资源标识符识别的资源可以通过URL传参给服务器POST用于传输信息给服务器主要功能与GET方法类似但一般推荐使用POST方式。PUT 传输文件报文主体中包含文件内容保存到对应URI位置。HEAD 获得报文首部与GET方法类似只是不返回报文主体一般用于验证URI是否有效。DELETE删除文件与PUT方法相反删除对应URI位置的文件。OPTIONS查询相应URI支持的HTTP方法。Http协议中Http1.0与1.1区别在http1.0中当建立连接后客户端发送一个请求服务器端返回一个信息后就关闭连接当浏览器下次请求的时候又要建立连接显然这种不断建立连接的方式会造成很多问题。5.在http1.1中引入了持续连接的概念通过这种连接浏览器可以建立一个连接之后发送请求并得到返回信息然后继续发送请求再次等到返回信息也就是说客户端可以连续发送多个请求而不用等待每一个响应的到来。Http协议实现原理机制 2.1、整个流程步骤 2.2、域名解析过程 2.3、三次握手过程 2.4、发起HTTP请求 2.5、响应HTTP请求并得到HTML代码 2.6、浏览器解析HTML代码 2.7、浏览器对页面进行渲染呈现给用户get与post请求区别初级程序员必备问题区别一 get重点在从服务器上获取资源post重点在向服务器发送数据区别二 get传输数据是通过URL请求以field字段 value的形式置于URL后并用?连接多个请求数据间用连接如http://127.0.0.1/Test/login.action?nameadminpasswordadmin这个过程用户是可见的post传输数据通过Http的post机制将字段与对应值封存在请求实体中发送给服务器这个过程对用户是不可见的区别三 Get传输的数据量小因为受URL长度限制但效率较高Post可以传输大量数据所以上传文件时只能用Post方式区别四 get是不安全的因为URL是可见的可能会泄露私密信息如密码等post较get安全性较高区别五 get方式只能支持ASCII字符向服务器传的中文字符可能会乱码。post支持标准字符集可以正确传递中文字符。9、Http请求报文与响应报文格式请求报文包含三部分a、请求行包含请求方法、URI、HTTP版本信息b、请求首部字段c、请求内容实体响应报文包含三部分a、状态行包含HTTP版本、状态码、状态码的原因短语b、响应首部字段c、响应内容实体10、常见Http协议状态200请求被正常处理204请求被受理但没有资源可以返回206客户端只是请求资源的一部分服务器只对请求的部分资源执行GET方法相应报文中通过Content-Range指定范围的资源。301永久性重定向302临时重定向303与302状态码有相似功能只是它希望客户端在请求一个URI的时候能通过GET方法重定向到另一个URI上304发送附带条件的请求时条件不满足时返回与重定向无关307临时重定向与302类似只是强制要求使用POST方法400请求报文语法有误服务器无法识别401请求需要认证403请求的对应资源禁止被访问404服务器无法找到对应资源500服务器内部错误503服务器正忙Http协议首部字段a、通用首部字段请求报文与响应报文都会使用的首部字段Date创建报文时间Connection连接的管理Cache-Control缓存的控制Transfer-Encoding报文主体的传输编码方式b、请求首部字段请求报文会使用的首部字段Host请求资源所在服务器Accept可处理的媒体类型Accept-Charset可接收的字符集Accept-Encoding可接受的内容编码Accept-Language可接受的自然语言c、响应首部字段响应报文会使用的首部字段Accept-Ranges可接受的字节范围Location令客户端重新定向到的URIServerHTTP服务器的安装信息d、实体首部字段请求报文与响应报文的的实体部分使用的首部字段Allow资源可支持的HTTP方法Content-Type实体主类的类型Content-Encoding实体主体适用的编码方式Content-Language实体主体的自然语言Content-Length实体主体的的字节数Content-Range实体主体的位置范围一般用于发出部分请求时使用Http与Https优缺点a、通信使用明文不加密内容可能被窃听也就是被抓包分析。b、不验证通信方身份可能遭到伪装c、无法验证报文完整性可能被篡改HTTPS就是HTTP加上加密处理一般是SSL安全通信线路认证完整性保护Http优化利用负载均衡优化和加速HTTP应用利用HTTP Cache来优化网站Http协议有那些特征1、支持客户/服务器模式2、简单快速3、灵活4、无连接5、无状态如果你还对Http协议不熟悉的话请参考Http协议http://www.itmayiedu.com/front/articleinfo/49.html文章JavaWeb基础部分讲下Servlet的执行流程。doGet和doPost的区别 Servlet的执行流程也就是servlet的生命周期当服务器启动的时候生命周期开始然后通过init()《启动顺序根据web.xml里的startup-on-load来确定加载顺序》方法初始化servlet再根据不同请求调用doGet或doPost方法最后再通过destroy()方法进行销毁。doGet和doPost都是接受用户请求的方法doGet处理get请求doPost处理post请求doGet用于地址栏提交doPost用于表单提交在页面提交数据时get的数据大小有限制4kpost没有限制get请求提交的数据会在地址栏显示post不显示所以post比get安全.当service有一个实例变量doGet和doPost去调用这个变量会出现什么问题你是如何解决的。会出现线程不安全问题。无论是doGet还是doPost去调用服务器端处理的过程都是一样的那么我们可以把处理过程单独写在另外一个方法handle里让两个方法都去调用handle根据不同请求去调用不同的方法。如何处理servlet的线程不安全问题线程安全就是多线程操作同一个对象不会有问题线程同步一般来保护线程安全所以可以在Servlet的线程里面加上同步方法或同步块。Synchronized可以保证在同一时间只有一个线程访问使用同步块会导致性能变差最好不去使用实例变量Jsp的重定向和转发的流程有什么区别重定向是客户端行为转发是服务器端行为重定向时服务器产生两次请求转发产生一次请求重定向时可以转发到项目以外的任何网址转发只能在当前项目里转发重定向会导致request对象信息丢失。转发则不会转发的url不会变,request.getRequestDispatch。forward()重定向的url会改变,response.getRedirect();Jsp和servlet的区别jsp的可读性强容易维护并且jsp在最后会编译成servletservlet容易调试Jsp的九大内置对象三大指令七大动作的具体功能JSP九大内置对象:pageContext 只对当前jsp页面有效里面封装了基本的request和session的对象Request 对当前请求进行封装Session 浏览器会话对象浏览器范围内有效Application 应用程序对象对整个web工程都有效Out 页面打印对象在jsp页面打印字符串Response 返回服务器端信息给用户Config 单个servlet的配置对象相当于servletConfig对象Page 当前页面对象也就是thisException 错误页面的exception对象如果指定的是错误页面这个就是异常对象三大指令Page 指令是针对当前页面的指令Include 用于指定如何包含另一个页面Taglib 用于定义和指定自定义标签七大动作Forward执行页面跳转将请求的处理转发到另一个页面Param 用于传递参数Include 用于动态引入一个jsp页面Plugin 用于下载javaBean或applet到客户端执行useBean 使用javaBeansetProperty 修改javaBean实例的属性值getProperty 获取javaBean实例的属性值获取页面的元素和值有几种方式分别说一下request.getParameter() 返回客户端的请求参数与值request.getParameterNames() 返回所有可用属性名的枚举request.getParameterValues() 返回包含参数的所有值的数组servlet和javaScript的区别他们分别是什么作用一个是服务端一个是客户端Servlet是独立于平台和协议的服务器端的java应用程序可以动态生成web页面并采用响应--请求的模式提供web服务javaScript是一种解释性语言用于向html页面提供交互行为通常被直接嵌入在html页面中servlet是java语言编写的web应用js是基于html上的一种解释语言会话跟踪有哪些他们的区别是什么Cookiesession和applicationCookie是http对象客户端与服务端都可以操纵cookie是在客户端保持状态session是在服务器端保持状态由于cookie是保存在客户端本地的所以数据很容易被窃取当访问量很多时使用session则会降低服务器的性能application的作用域是整个工程里只有一个可以在不同浏览器之间共享数据所有人都可以共享因此application也是不安全的说说jsp的隐藏对象有哪些Request,out,response , pageContext , session , application , config , page , exception也即jsp的九大内置对象request responsesession 和 application是怎么用的Request是客户端向服务端发送请求Response是服务端对客户端请求做出响应Session在servlet中不能直接使用需要通过getSession()创建如果没有设定它的生命周期或者通过invildate()方法销毁关闭浏览器session就会消失Application不能直接创建存在于服务器的内存中由服务器创建和销毁jsp页面跳转Jsp页面跳转有两种方式forward和redirect转发和重定向Forward只能在当前项目里跳转只产生一次请求request保存的变量不会丢失url地址不会改变Redirect可跳转到项目以外的任何页面产生两次请求request保存的变量会全部丢失url地址会发生改变变化为第二个请求的地址话跟踪如果创建servlet实例不用构造方法怎么创建一个servlet实例Web容器会自动为servlet写一个无参的构造器它使用class.forName().newInstance()反射来创建servlet实例的Servlet是安全的吗当service有一个实例变量doGet和doPost去调用这个变量会出现什么问题你是如何解决的是线程不安全的因为servlet是单例模式当多个客户端共同访问的时候线程不安全。尽量用局部变量同步块如果当前字段是不会改变的用final修饰Java框架部分说说SpringSpring的核心是控制反转、依赖注入,Aop面向切面相当于把每个bean与bean之间的关系交给第 三方容器进行管理.说SpringIOC、SpringAOP?SpringIOC ,其实就是依赖注入、控制反转。相当于把每个bean与bean之间的关系交给第三方容器管理。而这个容器就是springSpringAOP 面向切面的编程或AOP是一种编程技术允许程序模块化横向切割关注点或横切典型的责任划分如日志和事务管理。 SpringAop 就是用 Javva的动态代理Spring的底层实现机制是什么使用Demo4j解析XMLJava反射机制Demo4j 其实就是解析XML。使用反射机制实例化bean。SpringAOP用到了什么代理JDK动态代理:对实现了接口的类生成代理CGLib代理机制:对类生成代理动态代理与静态代理区别静态代理由程序员创建或特定工具自动生成源代码再对其编译。在程序运行前代理类的.class文件就已经存在了。 动态代理在程序运行时运用反射机制动态创建而成。 Spring注入有那些方式Set注入构造器注入静态工厂的方法注入实例工厂的方法注入Spring有那些注解Autowired(按类型注入)Service(标示为注入为服务层)Resource(按名称注入)Controller(标识控制器bean id) RequestMapping表示映射URL路径简述Spring的优缺点 Spring 的优点? 1.降低了组件之间的耦合性 实现了软件各层之间的解耦 2.可以使用容易提供的众多服务如事务管理消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术利用它很容易实现如权限拦截运行期监控等功能 5.容器提供了众多的辅助类能加快应用的开发 6.spring对于主流的应用框架提供了集成支持如hibernateJPAStruts等 7.spring属于低侵入式设计代码的污染极低 8.独立于各种应用服务器 9.spring的DI机制降低了业务对象替换的复杂性 10.Spring的高度开放性并不强制应用完全依赖于Spring开发者可以自由选择spring的部分或全部缺点:使用到了大量反射机制。反射机制非常占内存SpringMVC工程流程1. 用户向服务器发送请求请求被Spring 前端控制Servelt DispatcherServlet捕获2. DispatcherServlet对请求URL进行解析得到请求资源标识符URI。然后根据该URI调用HandlerMapping获得该Handler配置的所有相关的对象包括Handler对象以及Handler对象对应的拦截器最后以HandlerExecutionChain对象的形式返回3. DispatcherServlet 根据获得的Handler选择一个合适的HandlerAdapter。附注如果成功获得HandlerAdapter后此时将开始执行拦截器的preHandler(...)方法4. 提取Request中的模型数据填充Handler入参开始执行HandlerController)。 在填充Handler的入参过程中根据你的配置Spring将帮你做一些额外的工作 HttpMessageConveter 将请求消息如Json、xml等数据转换成一个对象将对象转换为指定的响应信息 数据转换对请求消息进行数据转换。如String转换成Integer、Double等 数据根式化对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等 数据验证 验证数据的有效性长度、格式等验证结果存储到BindingResult或Error中5. Handler执行完成后向DispatcherServlet 返回一个ModelAndView对象6. 根据返回的ModelAndView选择一个适合的ViewResolver必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet 7. ViewResolver 结合Model和View来渲染视图8. 将渲染结果返回给客户端。SpringMVC工作流程描述为什么SpringMVC只使用一个Servlet(DispatcherServlet)来处理所有请求详细见J2EE设计模式-前端控制模式Spring为什么要结合使用HandlerMapping以及HandlerAdapter来处理Handler?符合面向对象中的单一职责原则代码架构清晰便于维护最重要的是代码可复用性高。如HandlerAdapter可能会被用于处理多种Handler。Hibernate面试题什么是Hibernatehibernate是一个基于ORM持久框架,可以让程序员以面向对象的思想操作数据库,提高生产效率.什么是ORMorm不过是一种思想对象关系映射。是对象关系模型如hibernate,让你以面向对象的方式去编程。封装了JDBC.说一下orm与jdbc的区别jdbc只是一个java操作数据库的规范接口而已orm不过是一种思想对象关系映射。ORM是对象关系模型如hibernate,让你以面向对象的方式去编程。封装了JDBC.JDBC是从底层访问数据库服务器。一般银行金融行业为了安全起见直接用JDBC访问Hibernate中get和load有什么不同之处? load 找不到数据的话会抛出org.hibernate.ObjectNotFoundException异常。此时hibernate会使用延迟加载加载机制 get找不到的话会返回null。 如果查询不到数据get 会返回 null,但是不会报错, load 如果查询不到数据则报错ObjectNotFoundException使用get 去查询数据(先到一级/二级)会立即向db发出查询请求(select ...), 如果你使用的是 load查询数据(先到一级、二级))即使查询到对象返回的是一个代理对象,如果后面没有使用查询结果它不会真的向数据库发select ,当程序员使用查询结果的时候才真的发出select ,这个现象我们称为懒加载(lazy)hibernate的三种状态在Hibernate中对象有三种状态临 时状态(Transient)、持久状态(Persistent)和游离状态(Detached)。处于持久态的对象也称为 PO(PersistenceObject),临时对象和游离对象也称为VO(ValueObject). hibernate的懒加载 有几种禁用方法在Hibernate框架中当我们要访问的数据量过大时明显用缓存不太合适 因为内存容量有限 为了减少并发量减少系统资源的消耗这时Hibernate用懒加载机制来弥补这种缺陷但是这只是弥补而不是用了懒加载总体性能就提高了。我们所说的懒加载也被称为延迟加载它在查询的时候不会立刻访问数据库而是返回代理对象当真正去使用对象的时候才会访问数据库。1.使用代理对象Hibernate.initialize(代理对象);2.在需要禁用懒加载的映射文件中显示的加入lazy false3.使用openSessionInView【需要借助于过滤器】 需要在web.xml文件中配置hibernate有几种查询方式1、 属性查询2、 参数查询、命名参数查询3、 关联查询4、 分页查询5、 统计函数Hibernate的优缺点1.Hibernate的优缺点优点1、程序更加面向对象2、提高了生产率3、方便移植修改配置文件4、无侵入性。缺点1、效率比JDBC略差2、不适合批量操作。Hibernate的缓存机制Hibernate缓存包括两大类Hibernate一级缓存和Hibernate二级缓存。1.Hibernate一级缓存又称为“Session的缓存”。Session内置不能被卸载Session的缓存是事务范围的缓存Session对象的生命周期通常对应一个数据库事务或者一个应用事务。一级缓存中持久化类的每个实例都具有唯一的OID。2.Hibernate二级缓存又称为“SessionFactory的缓存”。由于SessionFactory对象的生命周期和应用程序的整个过程对应因此Hibernate二级缓存是进程范围或者集群范围的缓存有可能出现并发问题因此需要采用适当的并发访问策略该策略为被缓存的数据提供了事务隔离级别。第二级缓存是可选的是一个可配置的插件默认下SessionFactory不会启用这个插件。Hibernate提供了org.hibernate.cache.CacheProvider接口,它充当缓存插件与Hibernate之间的适配器。Hibernate延迟加载1) Hibernate2延迟加载实现a)实体对象 b)集合Collection2) Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候数据并没有存在与内存中当程序真正对数据的操作时对象才存在与内存中就实现了延迟加载他节省了服务器的内存开销从而提高了服务器的性能。 Hibernate工作原理及为什么要用原理1) 读取并解析配置文件2) 读取并解析映射信息3) 创建SessionFactory4) 打开Sesssion5) 创建事务Transation6) 持久化操作7) 提交事务8) 关闭Session9) 关闭SesstionFactory为什么要用1) 对JDBC访问数据库的代码做了封装大大简化了数据访问层繁琐的重复性代码。2) Hibernate是一个基于JDBC的主流持久化框架是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作3) hibernate使用Java反射机制而不是字节码增强程序来实现透明性。4) hibernate的性能非常好因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库从一对一到多对多的各种复杂关系。什么是MybatisMybatis的前生是ibatis最后升级版本后名称叫mybatis。mybatis是以纯sql操作数据。Mybatis与Hibernate区别Hibernate是面向对象的思想操作数据生成Sql语句而mybatis是以纯sql操作数据相对于mybatis容易优化.扩展性好但是移植性差。设计模式部分你熟悉那些设计模式总共有23种设计模式总体来说设计模式分为三大类创建型模式共五种工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式共七种适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式共十一种策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。企业面试的时候面试官非常喜欢考单例而且非常喜欢考手写单例。什么是单例单例有那些写法单例分类:懒汉式单例、饿汉式单例单例模式有以下特点1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。①懒汉式单例 //懒汉式单例类.在第一次调用的时候实例化自己 public class Singleton { private Singleton() {} private static Singleton singlenull; //静态工厂方法 public static Singleton getInstance () { if (single null) { single new Singleton(); } return single; } } ②饿汉式单例//饿汉式单例类.在类初始化时已经自行实例化 public class Singleton1 { private Singleton1() {} private static final Singleton1 single new Singleton1(); //静态工厂方法 public static Singleton1 getInstance() { return single; } } 懒汉式与饿汉式区别从名字上来说饿汉和懒汉饿汉就是类一旦加载就把单例初始化完成保证getInstance的时候单例是已经存在的了而懒汉比较懒只有当调用getInstance的时候才回去初始化这个单例。另外从以下两点再区分以下这两种方式1、线程安全饿汉式天生就是线程安全的可以直接用于多线程而不会出现问题懒汉式本身是非线程安全的为了实现线程安全有几种写法分别是上面的1、2、3这三种实现在资源加载和性能方面有些区别。2、资源加载和性能饿汉式在类创建的同时就实例化一个静态对象出来不管之后会不会使用这个单例都会占据一定的内存但是相应的在第一次调用时速度也会更快因为其资源已经初始化完成而懒汉式顾名思义会延迟加载在第一次使用该单例的时候才会实例化对象出来第一次调用时要做初始化如果要做的工作比较多性能上会有些延迟之后就和饿汉式一样了。项目相关面试题你说说你做的最好的项目要重点介绍到①项目是做什么②用到那些技术③整个项目中最大的亮点是核心部分④遇到bug是怎么解决的你项目遇到bug怎么查问题例如:首先遇到了bug会查询日志通过日志定位到某个类的行数判断是否有代码问题。你遇到了什么bug你是怎么解决例如我自己项目中查询量非常大。通过日志发现了堆内存溢出最后通过优化代码减轻new和加大堆内存。你们项目人员是怎么分配的项目分配为:产品经理(负责提需求)UI设计师负责设计样式文件Web前端只做Web页面前端静态文件Java工程师写业务逻辑测试人员(负责测试bug)非技术项目经理负责项目管理、人员分配项目架构师负责架构项目你们项目是怎么发布的 企业当中项目都是发布在linux环境上小公司:使用maven编译好通过打war包,放入到tomcat的webapps文件下大公司:使用自动部署系统jenkins jenkins直接关联svn地址自动打包、自动部署等说说linux常用命令?Cat 查看某个文件CP 拷贝Ls 查看所有列表Pwd 查看路径Tail 查看日志Grep 搜索日志
http://www.yutouwan.com/news/476259/

相关文章:

  • 网站源代码怎么上传怎么找上海网站建设
  • 网站建设tlmh项目管理工具
  • 微网站建设国内营销网络途径困难
  • 公司网站做首页大图做网站需要服务器和什么软件
  • 域名注册网站制作wordpress移动端音频播放
  • 网站建设 7 24门户网站建设 考核
  • 休闲吧网站建设在百度网上做广告需要多少钱
  • 电子商务网站建设的课程论文苏州设计公司
  • 网上做效果图网站有哪些软件网站功能板块
  • 中山做网站优化长沙网站快速排名优化
  • 昆山建设银行交学费的网站电商模式有哪几种
  • 开封网站推广无锡网站设计公司排名
  • 温州市建设小学学校网站肃宁县网站建设公司
  • 高端网站建设推来客地址网站开发投入产出分析
  • 社交网站开发背景wordpress 不能改邮箱
  • 人动物做电影网站互动型网站模板
  • 做个医院网站多少钱wordpress在线翻译
  • 淘宝客在百度推广网站么做wordpress meta插件
  • 电商企业网站建设网站建设网站设计多少钱
  • 新余教育网站建设邢台网站建设要多少钱
  • 类似5173的网站怎么做网络信息安全网站开发教程
  • 建网站的服务器公司要做网站去哪里
  • 诛仙2官方网站西施任务怎么做校友网站建设的意义
  • 网站针对爬虫爬取做的优化上海做网站报价
  • 友链网站用wordpress修改网站
  • 网站域名做入什么科目建筑公司网站建设方案
  • 上海网站制作案例石家庄楼盘最新消息
  • 走出趣网站怎么做网站怎么做百度关键字搜索
  • 网站建设初期 该如何推广高端品牌冰箱
  • 建手机号码的网站建筑公司注册