c#面经

325 阅读4分钟

1.ajax如何转同步?

通过将Ajax请求中的async属性设置为false,可以将Ajax转为同步。async属性默认值为true,表示异步(Ajax的全名为异步JavaScript和XML)。当设置为false时,请求便会转变为同步。

$.ajax({
   url: 'your-url',
   async: false,    // 这里设为false,开启同步模式
   type: 'GET',
   success: function(response) {
       //处理返回的结果
   }
});

2.如何取消异步进程?

  1. Promise 取消: 尽管原生的Promise是不可取消的,但我们可以通过其他方式达到类似的效果。通常的一个做法是在Promise对象处理回调函数时,检查一个特定的状态变量,如果满足“取消”条件,则不执行后续操作。
  2. Ajax 请求取消:在构建了XMLHttpRequest对象并且发送出请求后,我们可以通过调用XMLHttpRequest对象的abort()方法来取消正在进行的请求。
var xhr = $.ajax({
    type: "POST",
    url: "some.php",
    data: "name=John&location=Boston",
    success: function(msg){
       alert( "Data Saved: " + msg );
    }
});
//在需要取消请求的时候调用
xhr.abort();
  1. setTimeout 取消:JavaScript的setTimeout函数返回一个timeoutId,我们可以通过调用clearTimeout(timeoutId)来取消已经设定的timeout。
const timeoutId = setTimeout(() => console.log('Hello'), 1000);
// 将会取消timeout
clearTimeout(timeoutId);

3.同步和异步的区别?

  1. 同步(Synchronous): 同步是指操作一个接一个地执行,即一个操作必须完成后才能开始下一个操作。同步操作的优点是程序结构清晰、逻辑简单;缺点是如果一个操作耗时较长,那后续的操作都必须等待,效率较低。
  2. 异步(Asynchronous): 异步是指多个操作可以同时进行,一个操作的开始不需要等待上一个操作完成。异步操作的优点是提高程序的效率;缺点是 代码复杂,控制流程较为困难。

4.值类型和引用类型的区别?

  1. 值类型(Value types):值类型的变量直接存储值,内存中将为每个变量分配一个独立的空间来存储它的值。当你把一个值类型变量赋值给另一个值类型变量时,实际上是把变量的值复制了一份。例如在C#, Java, Python等语言中的基础数据类型(如:整型、浮点型、字符型、布尔型等)就是值类型。
  2. 引用类型(Reference types):引用类型的变量存储的是一个引用或一个地址,这个地址指向存储在内存中的一个对象。当你把一个引用类型变量赋值给另一个引用类型变量时,实际上复制的是引用,也就是说这两个变量开始指向同一个对象。如果一个变量对该对象做出了改变,另一个变量也能感知到。例如在Java和Python等语言中的数组、对象、函数等就属于引用类型。

5.如何解决跨域问题?

  1. JSONP(JSON with Padding):利用<script>标签没有跨域限制的特性进行跨域请求,该请求返回的数据必须是函数调用。JSONP只支持 GET 请求。
  2. CORS(跨域资源共享):这是官方提供的跨域方案,要求浏览器和服务器都要支持。简单请求直接发送,会在请求头中添加Origin字段,服务器收到后在响应头中添加Access-Control-Allow-Origin字段,浏览器判断此字段是否合法决定是否允许跨域。复杂请求会先发送预检请求,询问服务器是否允许跨域,允许后再发送真正的请求。
  3. 使用代理服务器:对于前端而言,调用的接口都是同域名下的,然后由这个服务器去请求其他服务器的资源,再将资源返回。这种方法的优势在于可以自由设置请求头,不存在请求方式限制,如果设置得当的话,甚至可以对请求进行拦截、篡改。
  4. 如果是在开发环境下,还可以使用开发工具的设置,比如webpack的devServer可以配置proxy进行接口代理。
  5. 前端使用postMessage进行跨域操作,这是 H5 新增的一个API,可以实现跨文档通信。
  6. 如果仅是前后端分离项目的调试,还可以使用Chrome插件进行跨域,比如CORS Unblock等。

6.数据库并发问题的解决?

  1. 锁定机制:包括共享锁(读锁)和排他锁(写锁)。读锁在同一时刻可以允许多个读操作同时进行,但是禁止写操作。写锁则是在同一时刻只允许一个写操作,同时禁止其他读写操作。
  2. 事务机制:数据库通过事务这种机制,保证了一系列的数据库操作,要么全部执行成功,要么全部不执行(即,事务具有原子性)。此外,事务还应具备一致性,隔离性,持久性。当多个用户对同一数据进行修改时,实际上是对多个事务进行调度,事务之间是相互隔离的。