模块设计模型前端面试题积累

Posted ghylpb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模块设计模型前端面试题积累相关的知识,希望对你有一定的参考价值。

  1. re 的 match 和 search 区别?

    match()函数只检测字符串开头位置是否匹配,匹配成功才会返回结果,否则返回None

    import re
    
    s1 = ‘abcabcabc‘
    
    print(re.match(‘abc‘, s1))
    print(re.match(‘abc‘, s1).group())
    print(re.match(‘abc‘, s1).span())
    

    search()函数会在整个字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。

    import re
    
    s1 = ‘abcabcabc‘
    
    print(re.search(‘bca‘, s1))
    print(re.search(‘bca‘, s1).group())
    print(re.search(‘bca‘, s1).span())
    
  2. 什么是正则的贪婪匹配?或 正则匹配中的贪婪模式与非贪婪模式的区别?

    贪婪模式:能匹配的最大部分

    “.+”中的+会一直查找到最后一个符合条件的字符

    非贪婪模式:匹配越少越好

    “.+?"会匹配到第一个符合条件的字符就停止

  3. 如何判断一个邮箱合法

    import re
    
    if re.match(r‘^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$‘, email):
        print(‘right‘)
    else:
        print(‘wrong‘)
    
  4. json 序列化时,默认遇到中文会转换成 unicode,如果想要保留中文怎么办?

    import json
    a=json.dumps({"ddf":"你好"},ensure_ascii=False)
    print(a) #{"ddf": "你好"}
    
  5. logging 模块的作用?以及应用场景?

    在我们平时编写的程序,基本上都会有记录日志的需求,并且日志当中包含的内容既有正常的程序访问,又有错误,警告等信息输出,在python的logging模块当中就提供了标准的日志接口,可以通过它来存储各种格式的日志.
    logging模块也分为五个等级:
    debug(),
    info(),
    warning(),
    error(),
    critical()
    其中默认级别为warning,默认打印到终端
    
    """
    开发应用程序或部署开发环境时,可以使用DEBUG或INFO级别的日志获取尽可能详细的日志信息来进行开发或部署调试;应用上线或部署生产环境时,应该使用WARNING或ERROR或CRITICAL级别的日志来降低机器的I/O压力和提高获取错误日志信息的效率。
    """
    
  6. import 路径问题

设计模型

单例模式

1请手写一个单例

#encoding=utf8
import threading
import time
#这里使用方法__new__来实现单例模式
class Singleton(object):#抽象单例
    def __new__(cls, *args, **kw):
        if not hasattr(cls, ‘_instance‘):
            orig = super(Singleton, cls)
            cls._instance = orig.__new__(cls, *args, **kw)
        return cls._instance
#总线
class Bus(Singleton):
    lock = threading.RLock()
    def sendData(self,data):
        self.lock.acquire()
        time.sleep(3)
        print "Sending Signal Data...",data
        self.lock.release()
#线程对象,为更加说明单例的含义,这里将Bus对象实例化写在了run里
class VisitEntity(threading.Thread):
    my_bus=""
    name=""
    def getName(self):
        return self.name
    def setName(self, name):
        self.name=name
    def run(self):
        self.my_bus=Bus()
        self.my_bus.sendData(self.name)

if  __name__=="__main__":
    for i in range(3):
        print "Entity %d begin to run..."%i
        my_entity=VisitEntity()
        my_entity.setName("Entity_"+str(i))
        my_entity.start()

2单例模式的优点和应用?

单例模式的优点:
1、由于单例模式要求在全局内只有一个实例,因而可以节省比较多的内存空间;
2、全局只有一个接入点,可以更好地进行数据同步控制,避免多重占用;
3、单例可长驻内存,减少系统开销。
单例模式的应用举例:
1、生成全局惟一的序列号;
2、访问全局复用的惟一资源,如磁盘、总线等;
3、单个对象占用的资源过多,如数据库等;
4、系统全局统一管理,如Windows下的Task Manager;
5、网站计数器。
6、数据库配置,数据库连接池
7、应用程序的日志应用

3单例模式的缺点

1、单例模式的扩展是比较困难的;
2、赋于了单例以太多的职责,某种程度上违反单一职责原则(六大原则后面会讲到);
3、单例模式是并发协作软件模块中需要最先完成的,因而其不利于测试;
4、单例模式在某种情况下会导致“资源瓶颈”。

工厂模式

1工厂模式、简单工厂模式、抽象工厂模式

工厂模式的定义如下:定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。其通用类图如下。其产品类定义产品的公共属性和接口,工厂类定义产品实例化的“方式”。

import random


class PetShop(object):
    def __init__(self,animal_factory=None):
        #  pet 宠物  factory 工厂
        self.pet_factory = animal_factory

    def show_pet(self):
        pet = self.pet_factory.get_pet()
        print("this is a lovely", pet)
        print("it says",pet.speak())
        print("it eats",self.pet_factory.get_food())


class Dog:
    def speak(self):
        return "Dog"

    def __str__(self):
        return "this is Dog"


class Cat:
    def speak(self):
        return "Cat"

    def __str__(self):
        return "this is Cat"


class CatFactory:
    def get_pet(self):
        return Cat()

    def get_food(self):
        return "cat food"

class DogFactory:
    def get_pet(self):
        return Dog()

    def get_food(self):
        return "dog food"


def get_factory():
    return random.choice([DogFactory,CatFactory])

if __name__ == ‘__main__‘:
    shop = PetShop() # pet_factory 默认为None,后面延迟加载

    shop.pet_factory = get_factory()()  #  延迟加载,随机选择一个工厂然后实例出来一个对象给商店
    shop.show_pet()

2工厂模式的优点和应用

工厂模式、抽象工厂模式的优点:
1、工厂模式巨有非常好的封装性,代码结构清晰;在抽象工厂模式中,其结构还可以随着需要进行更深或者更浅的抽象层级调整,非常灵活;
2、屏蔽产品类,使产品的被使用业务场景和产品的功能细节可以分而开发进行,是比较典型的解耦框架。
工厂模式、抽象工厂模式的使用场景:
1、当系统实例要求比较灵活和可扩展时,可以考虑工厂模式或者抽象工厂模式实现。比如,
在通信系统中,高层通信协议会很多样化,同时,上层协议依赖于下层协议,那么就可以对应建立对应层级的抽象工厂,根据不同的“产品需求”去生产定制的实例。

3工厂模式的不足

1、工厂模式相对于直接生成实例过程要复杂一些,所以,在小项目中,可以不使用工厂模式;
2、抽象工厂模式中,产品类的扩展比较麻烦。毕竟,每一个工厂对应每一类产品,产品扩展,就意味着相应的抽象工厂也要扩展。

前端

如何用css隐藏一个元素?

display display:none使用这个属性,被隐藏的元素对网页的布局不起作用。不仅如此,一旦display设为none任何对该元素直接的用户交互操作都不可能生效。此外,读屏软件也不会读到元素的内容。这种方式产生的效果就像元素完全不存在。通过DOM依然可以访问到这个元素。因此你可以通过DOM来操作它。

你曾经使用过哪些前端框架?

html框架:
	Bootstarp#前后端不分离
js框架:
	jQuery
	Vue#前后端分离

什么是ajax请求?并使用jQuery和XMLHttpRequest对象实现一个ajax 请求。

"""
AJAX(Asynchronous javascript And XML)翻译成中文就是“异步的Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。

AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(这一特点给用户的感受是在不知不觉中完成请求和响应过程)
"""
########## jQuery. ###########
$ajax({
  url:"/test/",
  type:‘post‘,
  data:{‘n1‘:$("#num1").val(),
        ‘n2‘:$("#num2").val()
       },
  success:function (data){
    $("#num3").val(data)
  }
})

16.vue 中的路由的拦截器的作用?

判断是否有token值或是否to登录页,是则next(),否则跳转到登录页

17.axios 的作用?

axios是基于promise的用于浏览器和nodejs的HTTP客户端,本身有以下特征:

从浏览器中创建XMLHttpRequest;
从nodejs发出http请求
支持promiseAPI
拦截 请求和响应
转换请求和响应数据
取消请求
自动转换JSON数据
客户端支持防止CSRF/XSRF攻击

18.列举vue的常见指令。

v-text
v-html
v-show
v-if
v-else
v-else-if
v-for
v-on
v-bind
v-model
v-pre
v-cloak
v-once

19.简述jsonp及其原理(重点)?

为了保证用户访问的安全,现代浏览器使用了同源策略,即不允许访问非同源的页面,详细的概念大家可以自行百度。这里大家只要知道,在ajax中,不允许请求非同源的URL就可以了,比如www.a.com下的一个页面,其中的ajax请求是不允许访问www.b.com/c.php这样一个页面的。
JSONP就是用来解决跨域请求问题的

JSONP原理:
ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本,利用这个特性,服务端不再返回JSON格式的数据,而是返回一段调用某个函数的js代码,在src中进行了调用,这样实现了跨域。

20.简述cors及其原理(重点)?

CORS:全称"跨域资源共享"(Cross-origin resource sharing)

CORS需要浏览器和服务器同时支持,才可以实现跨域请求,目前几乎所有浏览器都支持CORS,IE则不能低于IE10。CORS的整个过程都由浏览器自动完成,前端无需做任何设置,跟平时发送ajax请求并无差异。so,实现CORS的关键在于服务器,只要服务器实现CORS接口,就可以实现跨域通信。

core在Django中的配置

以上是关于模块设计模型前端面试题积累的主要内容,如果未能解决你的问题,请参考以下文章

前端面试题之手写promise

web前端面试题

关于前端大厂面试经验分享

前端面试题记录

前端面试题记录

前端面试题