前端面试基础知识(一)

1,数组从栈中分配地址,链表从堆中分配;栈由系统自动分配,堆由程序员自己申请;
               栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。 
                堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时, 
               会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程    序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。 
     
2,32位处理器指数据总线是32位
3, ArrayList:数组集合。 查询、修改、新增(尾部新增)快,删除、新增(队列中间)慢,适用于查询、修改较多的场景。
       LinkedList:双向链表集合。查询、修改慢(需要遍历集合),新增,删除快(只需要修改前后节点的链接即可),适用于新增、删除较多的场景。
       HashMap:结合数组和链表的优势,期望做到增删改查都快速,时间复杂度接近于O(1)。当hash算法较好时,hash冲突较低。适用于增删改查所有场景。
4,java垃圾回收机制,垃圾回收不能确定具体的回收时间
5,存储结构有:顺序存储结构,链式存储结构,索引存储结构(根据关键字直接找位置),散列存储结构(根据关键字,公式计算位置);
数据结构有:数组(静态数组、动态数组)、线性表、链表(单向链表、双向链表、循环链表)、队列、栈、树(二叉树、查找树、平衡树、线索树、线索树、堆)、图等的定义、存储和操作 · Hash(存储地址计算,冲突处理)。
6,四大排序算法的基本概念:
     冒泡:每趟 i 和 i+1 比较,小的那个一直往前走,直到遇到比自己更小的,它被丢弃,转而使用更小的向前走;走的过程中交换位置;
     选择:每趟找到最小的与假定的min交换位置。这个过程中其他元素位置不动。
     插入:a[i]和前面i-1个每一个相比,只要比它门小就不停前移,然后a[i+1]和前i个比。。。
     快速:建议看官方的解释:百度百科-快速排序算法,以及源码;
         
            

7,http位于OSI第七层,应用层。 
        请求报文包括:(请求行,请求头部,空行,请求包体);
        
       响应报文包括:(状态行,响应头部,空行,响应包体);
           

请求和响应通用头:

其中content-Type的类型:


请求头:

响应头:

请求头部和响应头部都有一个connection: keep-alive;  表示客户端和服务端持续保持连接状态;
 

http状态码分类
分类 分类描述
1*** 信息,服务端期待客户进一步操作
2*** 成功,操作被成功接收并处理
3*** 重定向,资源转移
4*** 客户端错误,请求包含语法错误
5*** 服务端错误

http是无状态协议,即客户端和服务端不需要建立持久的链接。客户端什么时候需要请求就重新发起。
如一个多图片网页的浏览。步骤为:①建立连接,客户端发送一个网页请求,服务器端返回一个html页面(这里的页面只是一个纯文本的页面,也就是我们写的html代码),关闭连接;②浏览器解析html文件,遇到图片标记得到url这时,客户端和服务器再建立连接,客户端发送一个图片请求,服务器返回图片应答,关闭连接。

而无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。所以产生了cookie和session技术使得服务端能够记住客户端。

8,基本类型值指的是简单的数据,引用类型值指的是由多个值构成的 对象,在复制变量中,对于基本类型值来说,两者是互不影响的,对于引用类型值来说,复制分为两种,一种是浅拷贝,一种是深拷贝。对于浅拷贝来说,比如一个数组(数组是一种对象),只要我们修改了一个拷贝数组,那么原数组也会改变,因为他们引用的是同一个地址的数据!拷贝的时候并没有给b数组创造独立的内存,只是把a数组指向数据的 指针 拷贝给了b!而深拷贝就与其相反,将会给b数组创造独立的内存,并且将a数组的内容一一拷贝进来,两者互不影响。而基本类型值(如undefined、null、number、string、boolean以及es6新增的Symbol),只要是复制,就一定是另开辟以存储空间!基本数据类型存储:名值都存在栈内存中;引用数据类型:名存在栈内存中,值存在于堆内存中,但是栈内存会提供一个引用的地址指向堆内存中的值;可以使用json解析的方式进行深拷贝:JSON.parse(JSON.stringify(  array ));  或者使用数组遍历将a的每一个直赋给b数组;

9,创建一个多选框,将文字和框框关联:
  <label  ><input /> 文字</label>
  <input  id='iii'><label  for='iii'>文字</label>

10,XSS攻击

11,setDate(4)设置的是5月;  setDate(40)设置的是下一个月;

12,线程有5种状态(新建,就绪,运行,阻塞,死亡):
         
一个进程(程序)有多个线程(函数),进程代表拥有一个内存空间,其中的每个线程共有此空间,但是某些共享空间在同一时间只能有一个线程访问,为了使得别的线程无法打扰使用,此线程会添加一把锁(互斥锁),防止多个线程同时读写一个内存空间。这个概念在数据库中也有,为了防止多人同时操纵一个数据库,于是添加行级锁。有些共享空间同一时间允许有限多个线程访问,就会产生N把锁和N把钥匙,进去的人就取一把钥匙,出来时再把钥匙挂回原处。后到的人发现钥匙架空了,就知道必须在门口排队等着了。这种做法叫做"信号量"(Semaphore),用来保证多个线程不会互相冲突。

导致线程进入阻塞状态的原因:
   1,线程在调用一个I/O操作,没有结束输入输出是不会
   2,线程试图得到一个锁,而该锁正被其他线程持有
   3,线程在等待某个触发条件
   4,线程通过调用sleep方法进入睡眠状态

13,Number使用tolocalString()将数字转化为字符串,Array使用tolocalString()将数组转化为字符串,Date使用tolocalString()将输出本地时间;即,tolcalstring是将所有的信息本地化。(根据本地规则格式化);

14,选择器的优先级别:!important>内联>ID>class>标签>

15,<br> <img> <input> <meta>在H5中不需要自关闭符号了,但是button不行。

16,回流:某些元素大小,布局,显示与隐藏的属性更改导致页面结构发生变化。(整体刷新)
       重绘:某些元素的外观,风格变化,并不会导致页面结构发生变化。(局部刷新)
       回流必然会重绘,重绘不会导致回流。

17,js中返回一个未申明的变量是undefined,返回一个声明了但是未赋值的是null。

18,对于数组array,push在数组的末尾添加数据,unshift在数组的头部添加数据;pop在数组的头部添加数据,shif在数组的头部删除一个数据。

19,减少页面加载时间方法:
              1,减少HTTP请求(合并图片,合并文件)
              2,压缩JS,CSS代码;
              3,服务器启用gzip功能;
              4,<script>标签放在尾部(body)中;

20,slice是截取数组(字符串)片段,split将字符串以某种条件(“”,“,”)分割成数组,splice移除数组中某些元素并用新的替代;reverse颠倒数组顺序,contat()用于连接多个数组。

21,OSI七层模型(物理层,数据链路层,网络层,传输层,会话层,表示层,应用层);数据链路层叫帧,网络层叫包,传输层叫段;以太网的数据帧在数据链路层,IP包在网络层,TCP/UDP包在传输层,TCP/UDP数据在应用层data:{IP{TCP/UDP{data}  } };   data长度大小决定于最底层能容纳的最大长度。以太网1500,往上减,TCP最大的包应该是1460,UDP最大的包是1472.

22,粘包现象(TCP中): TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

23,12题讲过了锁的故事。而死锁是因为两个线程同时持有对方所需要的资源,一直等待对方释放,结果产生死循环等待。
          当然死锁的产生是必须要满足一些特定条件的:  
1.互斥条件:进程对于所分配到的资源具有排它性,即一个资源只能被一个进程占用,直到被该进程释放  
2.请求和保持条件:一个进程因请求被占用资源而发生阻塞时,对已获得的资源保持不放。  
3.不剥夺条件:任何一个资源在没被该进程释放之前,任何其他进程都无法对他剥夺占用  
4.循环等待条件:当发生死锁时,所等待的进程必定会形成一个环路(类似于死循环),造成永久阻塞。

24,满二叉树是个完整的三角形,各层节点数固定;满二叉树一定是完全二叉树。

25,iframe使用到的场景:资源加载;与其他页面共享cookie;左边固定右边自适应的布局;上传图片,避免当前页刷新;跨域访问的时候可以用到iframe,使用iframe请求不同域名下的资源;加载别的网站内容,例如google广告,网站流量分析

26,浏览器端几种存储技术:
   cookie,webstorage(localstorage+sessionstorage),userData,flash  ShareObject;
       服务器端存储用户数据:session;
   推荐链接:https://www.cnblogs.com/cencenyue/p/7604651.html


 

猜你喜欢

转载自blog.csdn.net/kalinux/article/details/88815224