SQL 去掉内容其中一段内容?

本文是小编毕业后面试的多家公司问题总结,主要针对初级java,相同问题的答案不再重复编写,答案是我从各论坛大佬那里总结搬运来的,如有侵权立即删除,有哪些不对的地方还望指出。

中科软件科技股份有限公司

1、String类常用方法?比较两个字符串长度的方法,比较两个字符串是否一样?

  • indexOf():返回指定字符的索引。
  • charAt():返回指定索引处的字符。
  • trim():去除字符串两端空白。
  • split():分割字符串,返回一个分割后的字符串数组。
  • length():返回字符串长度。
  • ==:基本类型比较的是值的大小,引用类型比较的是内存地址
  • equals:默认比较是否是同一个对象 ,例如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容 注意:equals方法不能作用于基本数据类型的变量

3、多线程的实现方式?

Java多线程实现方式主要有四种:

4、项目中出现的异常?


    北京元方智库信息科技有限公司

    3、项目中用没用到AJAX?

    通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。

    4、介绍一下项目中的单点登录怎么实现的?

    5、介绍一下nginx反向代理?

    当客户机向站点提出请求时,请求将转到代理服务器。然后,代理服务器通过防火墙中的特定通路,将客户机的请求发送到内容服务器。

    6、了解哪些java框架?

    8、Java基础知识循环怎么实现?

    常见的四种字符串拼接方法分别是

    10、项目中的接口是你封装的吗?给你一个项目你能完成对接口的封装吗?


    北京捷锐通信息技术有限公司

    1、JAVA基本数据类型,boolean类型占几个字节?

    5、什么是线程安全,解决办法是什么?

    当一个线程在操作共享资源时,未执行完毕的情况下,其他线程参与进来,导致共享资源出现安全问题。

    同步监视器:可以由任何对象来承担,针对于实现的方式可以用对象,也可以采用this关键字。对于继承方式 只能采用静态的对象。
    方式二:同步方法 确保当中一个线程执行此方法时 其他线程等待知道当前线程执行完。
    1.修饰变量:被声明为final的变量必须在声明时给出变量的初始值,而在以后的引用中只能读取。
    2.final声明方法:方法不能被重写
    3.修饰类:不能被继承
    public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。
    private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
    protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
    封装:隐藏内部功能的具体实现,只保留和外部交流数据的接口。
    继承:一个对象可以从它的父类继承所有的通用的属性和方法,并在无需重新编写原来的类的情况下对这些功能进行扩展;最大的好处是实现代码的高效重用。
    多态:同一个动作作用于不同的对象 所产生不同的行为。

    12、接口可以继承接口吗,接口可以继承抽象类吗?

    • 接口可以继承接口,抽象类不可以继承接口,但可以实现接口。
    2)Integer变量必须实例化后才能使用,而int变量不需要
    3)Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
    - 形参列表必须不同(形参的数据类型和形参的个数不同)
    - 重写的方法、返回值类型、参数列表必须和父类的方法保持一致
    - 子类的访问修饰符不能低于父类方法的访问修饰符 public

    Collection 表示一组对象,它是集中、收集的意思。Collection接口的两个子接口是List、Set接口。

    Collection接口: 存储一组不唯一,无序的对象。
    List接口: 存储一组不唯一,有序(索引顺序)的对象
    Set接口 :存储一组唯一,无序的对象。

    17、容器化了解哪些?

    从传统意思上来讲也是一种虚拟化技术。
    Docker项目的目标是实现一种轻量级的操作系统解决方案。Docker的基础是Linux容器LXC等技术。Docker方便了环境的部署和安装。
    -如果使用Docker 只需要把别人安装好的镜像拉去下来就可以直接使用,上手方便。
    -鼓励使用面向服务的架构,绝大多数的微服务都是通过Docker来进行部署的。
    -传统的虚拟机我们需要分配本机的硬件配置资源,在本机上配置虚拟机的数量是有限制的。
    -但是使用Docker是共享我们主机的资源。

    18、德鲁伊的优点,c3p0最大连接数?

    史上最好的data source,有一个监控面板
    - 可以监控每条sql语句的使用次数、运行效率,
    - url的监控,请求时间、并发等,

    C3P0未设置最大连接数

    19、java实现快速排序?

    基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以进行,以此达到整个数据变成有序。

    java.lang.OutOfMemoryError 错误,也就是java内存溢出错误。一般当jvm虚拟机内存不够用的时候,就会抛出该错误。
    2)常见造成oom的原因
    -加载的文件或者图片过大造成
    内存泄露是造成内存溢出的一个原因,所以避免内存泄露的那些方法都适用于内存溢出,比如及时回收无用的引用对想,资源回收等
    mkdir:创建一个新目录

    22、动态代理的方式,它们的区别?

    动态代理:当想要给实现了某个接口的类中的方法,加一些额外的处理。

    动态代理实现有三种方式,jdk动态代理(基于接口),cglib动态代理(基于继承),javassist(hibernate中使用这种方式)实现动态代理。

    23、获取当前时间的昨天时间?

    -synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;
    -synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;
    -用synchronized关键字的两个线程1和线程2,如果当前线程1获得锁,线程2线程等待。如果线程1阻塞,线程2则会一直等待下去,而Lock锁就不一定会等待下去,如果尝试获取不到锁,线程可以不用一直等待就结束了;
    -synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平(两者皆可);

    Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码少量的同步问题。


    1、单点登录怎么实现的,单点登录的原理?

    1)添加加载Security配置的监听器,
     2)注册安全认证的过滤器链
       这些过滤器实际是在spring容器中管理,这里只是代理注册给web容器
    1)注册自定义认证类,并注入到认证管理器中

    当我们往Hashmap中put元素时,首先根据key的hashcode重新计算hash值,根据hash值得到这个元素在数组中的位置(下标),如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放入链尾.如果数组中该位置没有元素,就直接将该元素放到数组的该位置上。

    5、mybatis怎么与数据库连接?

    Provider: 暴露服务的服务提供方。
    Consumer: 调用远程服务的服务消费方。
    Registry: 服务注册与发现的注册中心。
    Monitor: 统计服务的调用次调和调用时间的监控中心。
    服务容器负责启动,加载,运行服务提供者。
    服务提供者在启动时,向注册中心注册自己提供的服务。
    服务消费者在启动时,向注册中心订阅自己所需的服务。
    注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
    服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
    服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心Monitor。

    //懒汉式单例类.在第一次调用的时候实例化自己

    synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性。

    10、了解哪些锁,介绍一下(只列举部分)

    公平锁是指多个线程按照申请锁的顺序来获取锁。
    非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有可能,会造成优先级反转或者饥饿现象。
    可重入锁又名递归锁,是指在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁。
    独享锁是指该锁一次只能被一个线程所持有。
    共享锁是指该锁可被多个线程所持有。
    上面讲的独享锁/共享锁就是一种广义的说法,互斥锁/读写锁就是具体的实现。

    11、synochnize锁的是对象还是方法,为什么?

    普通同步方法,锁是当前实例对象
    静态同步方法,锁是当前类的class对象
    同步方法块,锁是括号里面的对象

    12、你知道哪些拦截器?

    Java 里的拦截器是动态拦截action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。在 AOP(Aspect-Oriented Programming,面向切面编程)中拦截器用于在某个方法(包括构造器)或字段被访问之前进行拦截,然后在之前或之后加入某些操作。特别地,现阶段 Spring 自身仅支持基于方法的拦截操作!如果基于方法的拦截操作不能满足需求,可以使用 AspectJ 与 Spring 进行集成,以实现更细粒度或更多方面的拦截操作。

    13、 什么是 CSRF 攻击,如何避免?

    CSRF中文全称是叫跨站请求伪造。一般来说,攻击者通过伪造用户的浏览器的请求,向访问一个用户自己曾经认证访问过的网站发送出去,使目标网站接收并误以为是用户的真实操作而去执行命令。


    北京洞察力科技股份有限公司

    1、框架了解那些,springmvc用过吗?

    2、面向对象三大特性?简单介绍一下。

    4、项目做过哪些?简单介绍一下。


    北京华昌致信科技有限公司

    1、String如何清除字符串前后两段的空字符串?

    给定数字的值四舍五入到最接近的值

    3、怎么切换编码格式?

    5、简述static修饰的变量和方法?

    static标记的变量或方法由整个类(所有实例)共享,可不必创建该类对象而直接使用;
    static成员也称类成员或静态成员; 随着类的加载而加载; Java中无静态类。
    -无论创建多少次对象,都会去共享一个静态属性,存在静态域中和类同一级别。
    -也是存在静态域中,可以使用类名.方法名去访问。
    -静态方法只能访问静态成员,如果是非静态的,应该通过实例化对象的方式 。
    -静态方法不能以任何方式引用this关键字。

    6、String是不是基本数据类型(不是)

    8、查询没参加科目一的学生

    9、查询成绩低于60的学生

    10、查询学生总成绩,并排序


    北京汇联信通科技有限公司

    1、什么是线程,什么是进程?

    进程:操作系统资源分配和调度的最小单位。
    线程:操作系统能够进行运算调度的最小单位。
    两者关系:进程是指程序执行时的一个实例,线程是进程的一个实体;线程必定也只数据一个进程,而进程可以拥有多个线程而且至少拥有一个线程。
    - 拥有独立的堆栈空间和数据段,系统开销大
    - 由于进程之间是独立的特点 使得进程的安全性比较高 有独立的地址空间 一个进程崩溃 不影响其他进程
    - 进程的通信机制相对复杂 譬如管道、信号、消息队列、套接字等
    - 线程拥有独立的堆栈空间 但是共享数据段,它们彼此之间使用相同的地址空间,比进程开销小
    - 线程是一个进程中不同的执行路径 一个线程的死亡就等于整个进程的死亡。

    线程如何开启,如何关闭

    调用Thread类的start方法去启动,调用它里面的stop()方法关闭。

    2、为什么会出现死锁,怎么解决?

    死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。
    三种用于避免死锁的技术
    (1)加锁顺序(线程按照一定的顺序加锁)
    (2)加锁时限(线程尝试获取锁的时候加上一定的时限,超过时限则放弃对该锁的请求,并释放自己占有的锁)
    • @Controller注解标注类的方法,return时会被视图处理器识别成静态文件的路径。
    • @ResponseBody可以标注方法也可以标注类,当标注方法时表示该方法的返回值会被解析成json(字符串会不会被转换),直接写入HTTP Response Body中,视图处理器将不会将return的参数识别成路径。当它标注类时,类中所有方法的返回值都将直接返回值到页面,相当于给所有的类都加上@ResponseBody注解。
    • @RequestMapping,它可以注解类也可以注解方法,注解类时标注请求的路径,标注方法时表示将特定的URL映射到指定的方法。
    • @RequestParam:将请求参数绑定到你控制器的方法参数上
    • @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。
    在面向对象编程中,术语“工厂”表示一个负责创建其他类型对象的类。通常情况下,作为一个工厂的类有一个对象以及与它关联的多个方法。客户端使用某些参数调用此方法之后,工厂会据此创建所需类型的对象,然后将它们返回给客户端。
    (1)简单工厂模式: 允许接口创建对象,但不会暴露对象的创建逻辑。
    (2)工厂方法模式:允许接口创建对象,但使用哪个类来创建对象,则是交由子类决定的。
    (3)抽象工厂模式:抽象工厂是一个能够创建一系列相关的对象而无需指定/公开其具体类的接口。该模式能够提供其他工厂的对象,在其内部创建其他对象。

    9、单例对象创建方式?

    懒汉式、饿汉式、使用静态内置类实现单例、使用静态代码块实现单例模式、使用枚举实现单例、

    8、什么是反射,怎么理解动态获取?

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
    动态就是不可提前预知的,在运行时才得出结果。

    9、nginx反向代理,正向代理模式?

    正向代理就是顺着请求的方向进行的代理,即代理服务器他是由你配置为你服务,去请求目标服务器地址。
    nginx反向代理,当客户机向站点提出请求时,请求将转到代理服务器。然后,代理服务器通过防火墙中的特定通路,将客户机的请求发送到内容服务器。

    10、乱码怎么产生,如何解决?

    本质上都是由于字符串原本的编码格式与读取时解析用的编码格式不一致导致的。
    1)解决方式1(若乱码参数多,就比较低效)
    浏览器默认编码为ISO-8859-1,后端Servlet接收请求参数,按照ISO-8859-1进行解码,得到二进制流,然后再用UTF-8编码。
    2)解决方式2(此种方式只支持get方式请求)
    解决方式3(此种方式只支持post方式请求)
    在servlet直接设置请求参数编码

    13、sql语句查询年龄大于18的人数?

    14、查询重名学生的姓名

    15、分组关键字,分组后后继续增删怎么操作(having)

    当一台服务器的性能达到极限时,我们可以使用服务器集群来提高网站的整体性能。那么,在服务器集群中,需要有一台服务器充当调度者的角色,用户的所有请求都会首先由它接收,调度者再根据每台服务器的负载情况将请求分配给某一台后端服务器去处理。那么在这个过程中,调度者如何合理分配任务,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡问题。


    北京宇信科技集团有限公司

    1、MySQL常用函数(聚合函数)

    2、for循环怎么判断非空

    3、list里面可以存map吗,怎么存具体语法是什么?

    4、项目实现的业务有哪些?(品优购商城)

    系统采用dubbox+zookeeper实现面向服务(SOA)分布式架构将不同的功能模块划分为多个子系统,其中包含运营商系统、商家系统、用户系统、网站前台系统、搜索系统、购物车系统、支付系统、订单系统、秒杀系统、CAS单点登录、短信&站内信微服务、客服系统等。

    株洲市云享信息技术有限公司

    1、给你一个springboot项目你怎么快速创建

    使用spring官方网站快速生成springboot脚手架,填写项目信息以及maven依赖,解压生成的zip文件,然后在idea或者eclipse中导入项目

    2、hasmap里可以存储Null,这个Null值存在链表的什么位置?

    允许存放,HashMap 使用第 0 个桶存放键为 null 的键值对。

    3、Redis中存储用户信息需不需要同步到mysql数据库中?

    1)对强一致要求比较高的,应采用实时同步方案,即查询缓存查询不到再从DB查询,保存到缓存;更新缓存时,先更新数据库,再将缓存的设置过期(建议不要去更新缓存内容,直接设置缓存过期)。
    2)对于并发程度较高的,可采用异步队列的方式同步,可采用kafka等消息中间件处理消息生产和消费。
    3)使用阿里的同步工具canal,canal实现方式是模拟mysql slave和master的同步机制,监控DB bitlog的日志更新来触发缓存的更新,此种方法可以解放程序员双手,减少工作量,但在使用时有些局限性

    1、nginx负载均衡怎么做的?

    实现负载均衡最少也要三台服务器,我这里是使用的centos 7系统,系统安装在VMware虚拟机中,安装完一台虚拟机后,直接克隆出两台一样安装环境的虚拟机,克隆之后我这里使用Xshell连接方便管理
    2)启动三台虚拟机上的nginx
    负载均衡服务器A、web服务器2、web服务器1
    修改内容A为负载均衡服务器,web1为web1处理请求,web2为web2处理请求
    打开浏览器输入三台虚拟机ip地址可以看到访问成功
    3)打开负载均衡服务器A的配置文件,修改配置文件

    2、多线程在什么场景下应用

    1)比如说上课会用到的VNC同时共享屏幕给多个电脑;
    2)迅雷开启多条线程一起下载;
    3)QQ同时和多个人一起视频;
    4)服务器同时处理多个客户端请求等等。

    3、线程安全问题?(答案上边已经写过)

    值传递: 只要是基本类型传递 都是值传递
    引用传递:针对于基本类型进行封装,对封装进行传递,是引用传递

    5、set集合什么时候用到?

    set集合是一个把不重复的无序的集合,里面里元素是可哈希的(不可变) 但它本身是可变的数据类型

    2、前端的数据后端用什么方法收 setAtrribute方法记得吗?

    setAttribute这个方法,在JSP内置对象session和request都有这个方法,这个方法作用就是保存数据,然后还可以用getAttribute方法来取出。

    3、solr和数据库关键字like的区别(怎么才能实现模糊查询)?

    solr使用的是Lucene API实现的全文检索。全文检索本质上是查询的索引。而数据库中并不是所有的字段都建立的索引,更何况如果使用like查询时很大的可能是不使用索引,所以使用solr查询时要比查数据库快。
    solr对中文进行分词,如果不是一个词,可能会丢失字,然后在查询名字的,会感觉不太准确。solr里面提供了很多查询匹配的方法例如:
    5)名字匹配法:之前做搜索的时候,名字设置成了分词,然后分词结果不太准确,比如:ABC,它可能分成了AB 然后没有C,所以你在查询的时候,就查不到ABC。

    5、多线程创建的callable接口是什么?

    Callable的call()方法类似于Runnable接口中run()方法,都定义任务要完成的工作,实现这两个接口时要分别重写这两个方法,主要的不同之处是call()方法是有返回值的(其实还有一些区别,例如call方法可以抛出异常,run方法不可以),运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。

    6、框架底层源码了解过吗?

    7、sso单点登录怎么实现的?

    8、nginx域名怎么配的?

    9、wait 和 sleep的区别,哪个会自动释放锁?(wait会自动释放锁)

    sleep() 方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程, 等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu的执行时间。
    sleep() 是static静态的方法,他不能改变对象的机锁,当一个synchronized块中调用了sleep() 方法, 线程虽然进入休眠,但是对象的机锁没有被释放,其他线程依然无法访问这个对象。
    wait()是Object类的方法,当一个线程执行到wait方法时,它就进入到一个和该对象相关的等待池,同时释放对象的机锁, 使得其他线程能够访问,可以通过notify,notifyAll方法来唤醒等待的线程。

    10、notify 和notifyall的区别,后者是把全部线程唤醒一块执行吗?(后半个问题暂时没答案)

    notify()方法不能唤醒某个具体的线程,所以只有一个线程在等待的时候它才有用武之地。 而notifyAll()唤醒所有线程并允许他们争夺锁确保了至少有一个线程能继续运行。
}

1、搜索时如果找不到可先尝试去掉英文部分,只搜索中文,可能是中英文间空格问题。

2、如果碰到“下面说法错误的是()”,直接搜索选项,也仅有此类题可搜索任意选项,绿

3、红色部分为错误选项,本人到100后就没心情继续刷了,后继者继续努力吧,据说现有

300-400道题,助教打算近期再添加100多题……

4、改进后上传前,你可以在此部分表明更新信息、姓名和日期,但不要抹杀前人的努力,

D. 一个MapReduce任务(Task)通常会把输入集切分成若干独立的数据块

4. Hive查询语言和SQL的一个不同之处关于HDFS 命令错误的是()

C. cp:返回到上一级目录

5. 配置hbase过程中,下面那个文件没有改动。

6. hbase表格中行关键字对应的列值最少有几个?

7. 客户端发现域服务器崩溃之后与__交互来处理问题.

8. Hive最重视的性能是可测量性,延展性,__和对于输入格式的宽松匹配性。

10. INT整数型有多少个字节__。

11. Hive提供了基于SQL并使得熟悉SQL的用户能够查询数据的__。

12. 下面哪一个对于Hive查询语言的命令的描述是错误的__。

13. 注意到Hive只支持等值连接。最好把最大的表格放在连接的__端以得到最好的表现。

D.默认root 密码每次开机是随机的

16.下面哪一个关于内置操作符的描述是错误的__。

}

使用闭包主要是为了设计私有的方法和变量。闭包的优势是能够避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易形成内存泄露。javascript

闭包有三个特性:css

什么是 FOUC(无样式内容闪烁)?你如何来避免 FOUC?

null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN

当声明的变量还未被初始化时,变量的默认值为undefined。 null用来表示还没有存在的对象,经常使用来表示函数企图返回一个不存在的对象。

undefined表示"缺乏值",就是此处应该有一个值,可是尚未定义。典型用法是:

(1)变量被声明了,但没有赋值时,就等于undefined。 (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。 (3)对象没有赋值的属性,该属性的值为undefined。 (4)函数没有返回值时,默认返回undefined。

null表示"没有对象",即该处不该该有值。典型用法是:

(1) 做为函数的参数,表示该函数的参数不是对象。 (2) 做为对象原型链的终点。

new操做符具体干了什么呢?

js延迟加载的方式有哪些?

做用:动态改变某个类的某个方法的运行环境。 区别参见:

哪些操做会形成内存泄漏?

内存泄漏指任何对象在您再也不拥有或须要它以后仍然存在。 垃圾回收器按期扫描对象,并计算引用了每一个对象的其余对象的数量。若是一个对象的引用数量为 0(没有其余对象引用过该对象),或对该对象的唯一引用是循环的,那么该对象的内存便可回收。 setTimeout 的第一个参数使用字符串而非函数的话,会引起内存泄漏。 闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)

JavaScript中的做用域与变量声明提高?

如何判断当前脚本运行在浏览器仍是node环境中?

经过判断Global对象是否为window,若是不为window,当前脚本没有运行在浏览器中

你遇到过比较难的技术问题是?你是如何解决的?

列举IE 与其余浏览器不同的特性?

什么叫优雅降级和渐进加强?

优雅降级:Web站点在全部新式浏览器中都能正常工做,若是用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工做。因为IE独特的盒模型布局问题,针对不一样版本的IE的hack实践过优雅降级了,为那些没法支持功能的浏览器增长候选方案,使之在旧式浏览器上以某种形式降级体验却不至于彻底失效. 渐进加强:从被全部浏览器支持的基本功能开始,逐步地添加那些只有新式浏览器才支持的功能,向页面增长无害于基础浏览器的额外样式和功能的。当浏览器支持时,它们会自动地呈现出来并发挥做用。

WEB应用从服务器主动推送Data到客户端有那些方式?

Commet:基于HTTP长链接的服务器推送技术

对前端界面工程师这个职位是怎么样理解的?它的前景会怎么样?

前端是最贴近用户的程序员,比后端、数据库、产品经理、运营、安全都近。 一、实现界面交互 二、提高用户体验 三、有了Node.js,前端能够实现服务端的一些事情 前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分,甚至更好, 参与项目,快速高质量完成实现效果图,精确到1px; 与团队成员,UI设计,产品经理的沟通; 作好的页面结构,页面重构和用户体验; 处理hack,兼容、写出优美的代码格式; 针对服务器的优化、拥抱最新前端技术。

你有哪些性能优化的方法?

(1) 减小http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。 (2) 前端模板 JS+数据,减小因为HTML标签致使的带宽浪费,前端用变量保存AJAX请求结果,每次操做本地变量,不用请求,减小请求次数 (3) 用innerHTML代替DOM操做,减小DOM操做次数,优化javascript性能。 (4) 当须要设置的样式不少时设置className而不是直接操做style。 (5) 少用全局变量、缓存DOM节点查找的结果。减小IO读取操做。 (6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。 (7) 图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳。

一个页面从输入 URL 到页面加载显示完成,这个过程当中都发生了什么?

分为4个步骤: (1),当发送一个URL请求时,无论这个URL是Web页面的URL仍是Web页面上每一个资源的URL,浏览器都会开启一个线程来处理这个请求,同时在远程DNS服务器上启动一个DNS查询。这能使浏览器得到请求对应的IP地址。 (2), 浏览器与远程Web服务器经过TCP三次握手协商来创建一个TCP/IP链接。该握手包括一个同步报文,一个同步-应答报文和一个应答报文,这三个报文在 浏览器和服务器之间传递。该握手首先由客户端尝试创建起通讯,然后服务器应答并接受客户端的请求,最后由客户端发出该请求已经被接受的报文。 (3),一旦TCP/IP链接创建,浏览器会经过该链接向远程服务器发送HTTP的GET请求。远程服务器找到资源并使用HTTP响应返回该资源,值为200的HTTP响应状态表示一个正确的响应。 (4),此时,Web服务器提供资源服务,客户端开始下载资源。 请求返回后,便进入了咱们关注的前端模块 简单来讲,浏览器会解析HTML生成DOM Tree,其次会根据CSS生成CSS Rule Tree,而javascript又能够根据DOM API操做DOM

平时如何管理你的项目?

先期团队必须肯定好全局样式(globe.css),编码模式(utf-8) 等; 编写习惯必须一致(例如都是采用继承式的写法,单样式都写成一行); 标注样式编写人,各模块都及时标注(标注关键样式调用的地方); 页面进行标注(例如 页面 模块 开始和结束); CSS跟HTML 分文件夹并行存放,命名都得统一(例如style.css); JS 分文件夹存放 命名以该JS功能为准的英文翻译。 图片采用整合的 images.png png8 格式文件使用 尽可能整合在一块儿使用方便未来的管理

说说最近最流行的一些东西吧?常去哪些网站?

1,工厂模式 2,构造函数模式 3,原型模式 4,混合构造函数和原型模式 5,动态原型模式 6,寄生构造函数模式 7,稳妥构造函数模式
1,原型链继承 2,借用构造函数继承 3,组合继承(原型+借用构造) 4,原型式继承 5,寄生式继承 6,寄生组合式继承
1.异步加载的方案: 动态插入script标签 2.经过ajax去获取js代码,而后经过eval执行 3.script标签上添加defer或者async属性 4.建立并插入iframe,让它异步执行js 5.延迟加载:有些 js 代码并非页面初始化的时候就马上须要的,而稍后的某些状况才须要的。

就是经过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

1.永远不要信任用户的输入,要对用户的输入进行校验,能够经过正则表达式,或限制长度,对单引号和双"-"进行转换等。 2.永远不要使用动态拼装SQL,可使用参数化的SQL或者直接使用存储过程进行数据查询存取。 3.永远不要使用管理员权限的数据库链接,为每一个应用使用单独的权限有限的数据库链接。 4.不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。

Xss(cross-site scripting)攻击指的是攻击者往Web页面里插入恶意html标签或者javascript代码。好比:攻击者在论坛中放一个 看似安全的连接,骗取用户点击后,窃取cookie中的用户私密信息;或者攻击者在论坛中加一个恶意表单, 当用户提交表单的时候,却把信息传送到攻击者的服务器中,而不是用户本来觉得的信任站点。

1.代码里对用户输入的地方和变量都须要仔细检查长度和对”<”,”>”,”;”,”’”等字符作过滤;其次任何内容写到页面以前都必须加以encode,避免不当心把html tag 弄出来。这一个层面作好,至少能够堵住超过一半的XSS 攻击。 
2.避免直接在cookie 中泄露用户隐私,例如email、密码等等。 3.经过使cookie 和系统ip 绑定来下降cookie 泄露后的危险。这样攻击者获得的cookie 没有实际价值,不可能拿来重放。 

XSS与CSRF有什么区别吗?

XSS是获取信息,不须要提早知道其余用户页面的代码和数据包。CSRF是代替用户完成指定的动做,须要知道其余用户页面的代码和数据包。

要完成一次CSRF攻击,受害者必须依次完成两个步骤:

  1.登陆受信任网站A,并在本地生成Cookie。   2.在不登出A的状况下,访问危险网站B。

1.服务端的CSRF方式方法不少样,但总的思想都是一致的,就是在客户端页面增长伪随机数。 2.使用验证码

ie各版本和chrome能够并行下载多少个资源

IE6 两个并发,iE7升级以后的6个并发,以后版本也是6个 Firefox,chrome也是6个

javascript里面的继承怎么实现,如何避免原型链上面的对象共享

用构造函数和原型链的混合模式去实现继承,避免对象共享能够参考经典的extend()函数,不少前端框架都有封装的,就是用一个空函数当作中间变量

Flash、Ajax各自的优缺点,在使用中如何取舍?

一、Flash ajax对比 Flash适合处理多媒体、矢量图形、访问机器;对CSS、处理文本上不足,不容易被搜索。 Ajax对CSS、文本支持很好,支持搜索;多媒体、矢量图形、机器访问不足。 共同点:与服务器的无刷新传递消息、用户离线和在线状态、操做DOM

概念:同源策略是客户端脚本(尤为是Javascript)的重要的安全度量标准。它最先出自Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不一样源装载。

这里的同源策略指的是:协议,域名,端口相同,同源策略是一种安全协议。 指一段脚本只能读取来自同一来源的窗口和文档的属性。

咱们举例说明:好比一个黑客程序,他利用Iframe把真正的银行登陆页面嵌到他的页面上,当你使用真实的用户名,密码登陆时,他的页面就能够经过Javascript读取到你的表单中input中的内容,这样用户名,密码就轻松到手了。

什么是 "use strict"; ? 使用它的好处和坏处分别是什么?

ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。

设立"严格模式"的目的,主要有如下几个:

- 消除Javascript语法的一些不合理、不严谨之处,减小一些怪异行为; - 消除代码运行的一些不安全之处,保证代码运行的安全; - 提升编译器效率,增长运行速度; - 为将来新版本的Javascript作好铺垫。

注:通过测试IE6,7,8,9均不支持严格模式。

缺点: 如今网站的JS 都会进行压缩,一些文件用了严格模式,而另外一些没有。这时这些原本是严格模式的文件,被 merge后,这个串就到了文件的中间,不只没有指示严格模式,反而在压缩后浪费了字节。

GET和POST的区别,什么时候使用POST?

GET:通常用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,通常在2000个字符 POST:通常用于修改服务器上的资源,对所发送的信息没有限制。 GET方式须要使用Request.QueryString来取得变量的值,而POST方式经过Request.Form来获取变量的值, 也就是说Get是经过地址栏来传值,而Post是经过提交表单来传值。 然而,在如下状况中,请使用 POST 请求: 没法使用缓存文件(更新服务器上的文件或数据库) 向服务器发送大量数据(POST 没有数据量限制) 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

哪些地方会出现css阻塞,哪些地方会出现js阻塞?

js的阻塞特性:全部浏览器在下载JS的时候,会阻止一切其余活动,好比其余资源的下载,内容的呈现等等。直到JS下载、解析、执行完毕后才开始继续并行下载其余资源并呈现内容。为了提升用户体验,新一代浏览器都支持并行下载JS,可是JS下载仍然会阻塞其它资源的下载(例如.图片,css文件等)。

因为浏览器为了防止出现JS修改DOM树,须要从新构建DOM树的状况,因此就会阻塞其余的下载和呈现。

嵌入JS会阻塞全部内容的呈现,而外部JS只会阻塞其后内容的显示,2种方式都会阻塞其后资源的下载。也就是说外部样式不会阻塞外部脚本的加载,但会阻塞外部脚本的执行。

CSS怎么会阻塞加载了?CSS原本是能够并行下载的,在什么状况下会出现阻塞加载了(在测试观察中,IE6CSS都是阻塞加载)

CSS后面跟着嵌入的JS的时候,该CSS就会出现阻塞后面资源下载的状况。而当把嵌入JS放到CSS前面,就不会出现阻塞的状况了。

根本缘由:由于浏览器会维持htmlcssjs的顺序,样式表必须在嵌入的JS执行前先加载、解析完。而嵌入的JS会阻塞后面的资源加载,因此就会出现上面CSS阻塞下载的状况。

嵌入JS应该放在什么位置?

一、放在底部,虽然放在底部照样会阻塞全部呈现,但不会阻塞资源下载。 二、若是嵌入JS放在head中,请把嵌入JS放在CSS头部。 三、使用defer(只支持IE) 四、不要在嵌入的JS中调用运行时间较长的函数,若是必定要用,能够用`setTimeout`来调用
  • 成组脚本:因为每一个<script>标签下载时阻塞页面解析过程,因此限制页面的<script>总数也能够改善性能。适用于内联脚本和外部脚本。

  • 非阻塞脚本:等页面完成加载后,再加载js代码。也就是,在window.onload事件发出后开始下载代码。 (1)defer属性:支持IE4和fierfox3.5更高版本浏览器 (2)动态脚本元素:文档对象模型(DOM)容许你使用js动态建立HTML的几乎所有文档内容。代码以下:

此技术的重点在于:不管在何处启动下载,文件额下载和运行都不会阻塞其余页面处理过程。即便在head里(除了用于下载文件的http连接)。

js事件处理程序问题?

它的功能是把对应的字符串解析成JS代码并运行; 应该避免使用eval,不安全,很是耗性能(2次,一次解析成js语句,一次执行)。
* 原型对象也是普通的对象,是对象一个自带隐式的 __proto__ 属性,原型也有可能有本身的原型,若是一个原型对象的原型不为null的话,咱们就称之为原型链。 * 原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链。

事件、IE与火狐的事件机制有什么区别? 如何阻止冒泡?

1. 咱们在网页中的某个操做(有的操做对应多个事件)。例如:当咱们点击一个按钮就会产生一个事件。是能够被 JavaScript 侦测到的行为。 2. 事件处理机制:IE是事件冒泡、firefox同时支持两种事件模型,也就是:捕获型事件和冒泡型事件。; 3. ev.stopPropagation();注意旧ie的方法 ev.cancelBubble = true;

ajax 是什么?ajax 的交互模型?同步和异步的区别?如何解决跨域问题?

1. 经过异步模式,提高了用户体验 2. 优化了浏览器和服务器之间的传输,减小没必要要的数据往返,减小了带宽占用 3. Ajax在客户端运行,承担了一部分原本由服务器承担的工做,减小了大用户量下的服务器负载。 2. Ajax的最大的特色是什么。 Ajax能够实现动态不刷新(局部刷新) readyState属性 状态 有5个可取值: 0=未初始化 ,1=启动 2=发送,3=接收,4=完成 ajax的缺点 一、ajax不支持浏览器back按钮。 二、安全问题 AJAX暴露了与服务器交互的细节。 三、对搜索引擎的支持比较弱。 四、破坏了程序的异常机制。 五、不容易调试。 跨域: jsonp、 iframe、window.name、window.postMessage、服务器上设置代理页面
网站重构:在不改变外部行为的前提下,简化结构、添加可读性,而在网站前端保持一致的行为。也就是说是在不改变UI的状况下,对网站进行优化,在扩展的同时保持一致的UI。 对于传统的网站来讲重构一般是: 表格(table)布局改成DIV+CSS 使网站前端兼容于现代浏览器(针对于不合规范的CSS、如对IE6有效的) 对于移动平台的优化 针对于SEO进行优化 深层次的网站重构应该考虑的方面 减小代码间的耦合 让代码保持弹性 严格按规范编写代码 设计可扩展的API 代替旧有的框架、语言(如VB) 加强用户体验 一般来讲对于速度的优化也包含在重构中 压缩JS、CSS、image等前端资源(一般是由服务器来解决) 程序的性能优化(如数据读写) 采用CDN来加速资源加载 对于JS DOM的优化 HTTP服务器的文件缓存

如下是数组去重的三种方法:

说说TCP传输的三次握手策略

为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。用TCP协议把数据包送出去后,TCP不会对传送 后的状况置之不理,它必定会向对方确认是否成功送达。握手过程当中使用了TCP的标志:SYN和ACK。 发送端首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。最后,发送端再回传一个带ACK标志的数据包,表明“握手”结束 若在握手过程当中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。

构造一个 Promise,最基本的用法以下:

这是JavaScript最多见的垃圾回收方式,当变量进入执行环境的时候,好比函数中声明一个变量,垃圾回收器将其标记为“进入环境”,当变量离开环境的时候(函数执行结束)将其标记为“离开环境”。

垃圾回收器会在运行的时候给存储在内存中的全部变量加上标记,而后去掉环境中的变量以及被环境中变量所引用的变量(闭包),在这些完成以后仍存在标记的就是要删除的变量了

在低版本IE中常常会出现内存泄露,不少时候就是由于其采用引用计数方式进行垃圾回收。引用计数的策略是跟踪记录每一个值被使用的次数,当声明了一个 变量并将一个引用类型赋值给该变量的时候这个值的引用次数就加1,若是该变量的值变成了另一个,则这个值得引用次数减1,当这个值的引用次数变为0的时 候,说明没有变量在使用,这个值无法被访问了,所以能够将其占用的空间回收,这样垃圾回收器会在运行的时候清理掉引用次数为0的值占用的空间。

在IE中虽然JavaScript对象经过标记清除的方式进行垃圾回收,但BOM与DOM对象倒是经过引用计数回收垃圾的,也就是说只要涉及BOM及DOM就会出现循环引用问题。

代码层面:避免使用css表达式,避免使用高级选择器,通配选择器。 缓存利用:缓存Ajax,使用CDN,使用外部js和css文件以便缓存,添加Expires头,服务端配置Etag,减小DNS查找等 请求数量:合并样式和脚本,使用css图片精灵,初始首屏以外的图片资源按需加载,静态资源延迟加载。 请求带宽:压缩文件,开启GZIP,

尽可能使用css3动画,开启硬件加速。适当使用touch事件代替click事件。避免使用css3渐变阴影效果。

浏览器下载组件的时候,会将它们存储到浏览器缓存中。若是须要再次获取相同的组件,浏览器将检查组件的缓存时间, 假如已通过期,那么浏览器将发送一个条件GET请求到服务器,服务器判断缓存还有效,则发送一个304响应, 告诉浏览器能够重用缓存组件。

那么服务器是根据什么判断缓存是否还有效呢?答案有两种方式,一种是前面提到的ETag,另外一种是根据Last-Modified

栈的插入和删除操做都是在一端进行的,而队列的操做倒是在两端进行的。 队列先进先出,栈先进后出。 栈只容许在表尾一端进行插入和删除,而队列只容许在表尾一端进行插入,在表头一端进行删除
栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。 堆区(heap) — 通常由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。 堆(数据结构):堆能够被当作是一棵树,如:堆排序; 栈(数据结构):一种先进后出的数据结构。

HTTP/2引入了“服务端推(serverpush)”的概念,它容许服务端在客户端须要数据以前就主动地将数据发送到客户端缓存中,从而提升性能。 HTTP/2提供更多的加密支持 HTTP/2使用多路技术,容许多个消息在一个链接上同时交差。 它增长了头压缩(header compression),所以即便很是小的请求,其请求和响应的header都只会占用很小比例的带宽。

}

我要回帖

更多关于 怎么去掉段落之间距离 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信