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


    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中的配置

  • 相关阅读:
    <转>修正版 疯狂代码 写给WEB2.0的站长
    一组MSSQL千万数量级分页存储过程
    flash AS +xml 加载图片(使用MovieClipLoader实现LOADING)
    [转]优化SQL Server的内存占用之执行缓存
    日志记录组件[Log4net]详细介绍(转)
    IBatis.Net如何支持多个数据库 [转帖]
    c#导入导出EXCEL
    弄了个新blogs 欢迎捧场
    ActionSrcipt 资源
    一个鼠标拖出一个圆形的简单demo
  • 原文地址:https://www.cnblogs.com/ghylpb/p/12684457.html
Copyright © 2020-2023  润新知