zoukankan      html  css  js  c++  java
  • 面试相关

    1、什么情况下使用Python语言开发比较好?/你对Python怎么看?/。。。

      1、python的设计哲学“简单、明确、优美”,决定了python开发的易用性和高效性,同样的业务需求,C++需要一周,python可能三天可以完成,

      2、动态解释型脚本语言,跨平台

      3、很多高校开始开设python教学班

       4、潜在的问题也会少很多,因为python有非常强大的第三方库,同时封装了很多复杂的底层语言,如内存分配释放,指针的相关操作

    2、开发语言选型需要考虑多个方面:

      1、业务本身特点适合哪种语言

      2、公司历史技术栈和人员技术储备倾向哪种语言

    3、python是否存在内存泄露

     内存泄漏(Memory Leak)是指程序中己动态分配的内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

    python会存在内存泄露:

      例如当对象A中引用对象B,同时对象B中又引用对象A,A和B出现循环引用,python中使用的引用计数的内存管理方式,此时A和B的引用计数将永远大于1,解释器无法自动回收对象A和B的内存空间,即产生了内存泄露。

    l1 = [1, 2, 3]
    l2 = [4, 5, 6]
    l1.append(l2) 
    l2.append(l1)
    print(l1)
    print(l2)
    
    
    # [1, 2, 3, [4, 5, 6, [...]]]
    # [4, 5, 6, [1, 2, 3, [...]]]

    4. 过往的项目中有没有出现过性能问题?

      有

      对象A,B之间循环引用,导致内存泄露

     

    5. 什么是协程

    协程是一种用户态的轻量级线程,就是由用户自己控制调度,从而更高效利用CPU

    一个线程在执行是,只有当子程序内部发送中断或阻塞时,才会交出线程的执行权交给其他子程序,在适当的时候在返回来接着执行,省去了线程间频繁切换的时间开销,同时也解决了多线程加锁造成的相关问题

    6. 知道mysql的事务隔离吗?/事务隔离分哪几个级别?/事务隔离性怎么保证/...

    数据库支持事务本身需要具备四个特性:原子性、一致性、隔离性、持久性  ACID

       原子性:事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生

          A转账200 给B :  A-200   B+200 这两个动作必须一起成功后者一起失败

       一致性:事务前后数据的完整性必须保持一致

          A-200  B+200 符合逻辑运算

       隔离性:并发执行的多个事务之间互不干扰

       持久性:事务一旦被提交,他对数据库中数据的改变是永久性的

    事务的隔离性:并发执行的多个事务之间互不干扰

    事务隔离的级别:

      脏读:一个事务读取到另一个事务未提交的数据

      不可重复度:一个事务内读取表中的某一行数据,多次读取结果不同(其他事务更改了数据)

      虚读(幻读):一个事务内读取到别的事务插入的数据,导致前后读取不一致

    mysql数据库事务隔离有四个级别: RU, RC,RR,SE(可序列化)

      默认是RR级别: 可以处理脏读和不可重复读问题,SE可以解决幻读问题,但性能消耗大,一般不用,

      mysql的RR级别引入了GAP LOCK(间隙锁),可以在RR级别解决幻读问题, innodb间隙锁就是不仅仅锁住所需要的行(如果锁住的这行不存在)还会锁住一个范围的行,这个范围依据锁住的这行而定。上下刚好是两个相邻索引叶节点的范围。包含下范围,不包含上范围。

    7、 MySQL和MongoDB区别?

    mysql是关系型数据库,存储引擎有MyISam, InnoDB, Merge等目前大都使用支持事务的InnoDB存储引擎。myslq5.7开始支持json格式,向nosql靠近

    MongoDB 18年8月发布的4.0开始支持事务,当前其默认的存储引擎wiredtiger性能非常卓越

    区别:

      mysql索引底层是用B+树实现,mongoDB采用B树。

      B树的特性决定MongoDB在海量读写的情况下性能比mysql优越,B+树的特性决定Mysql更适合多区间范围查询的业务需求

      总体来说,如果是海量数据高并发读写,从技术角度推荐MongoDB,如果是数据结构相对统一,同时对于事务要求较高,个人倾向于Mysql

    8. 什么是IO多路复用?/epoll和select,poll有什么区别?

    I/O多路复用,I/O就是指的我们网络I/O,多路指多个TCP连接(或多个Channel),复用指复用一个或少量线程。

    一个线程,通过记录IO流的状态来同时管理多个I/O,可以提高服务器的吞吐能力

    select:最多支持1024个链接,轮询,非线程安全

    poll:去掉1024的限制,轮询,非线程安全

    epoll:去掉限制,不轮询,线程安全,只支持linux系统,绝大部分tcp链接处于就绪态时,轮询方式更好

    9. 了解过tornado或sanic吗?/有木有接触过其他web框架

    了解过,不过之前公司项目中大多框架选用django,少部分使用flask。

    django设计哲学简便,快速,强调代码复用,大而全是代表特性

    falsk相对小而精

    tornado和sanic是异步框架(异步框架),性能非常卓越,tornado是facebook的开源项目,应用颇为广泛,sanic是基于python3.5的近些年兴起的框架,用到了很多python3的新特性

    10、同步、异步、并行、并发

    并发:多个任务交替执行,

    并行:多个任务如果是单核处理器交替执行,在多处理器中可以重叠执行

    同步:一个进程的输出作为另一个进程的输入,存在依赖关系

    异步:彼此独立

  • 相关阅读:
    javablogs
    Android学习笔记WIFI设备
    线程
    初次尝试Chrome扩展开发——以幻灯片方式显示网页内的图片
    could not find the main class, Program will exit(已解决)
    tomcat6.0配置(含配置视频下载)
    Windows下JDK1.6.0+Tomcat6.0的安装配置
    Java学习
    【翻译】在没有安装ASP.NET MVC3的服务器上运行ASP.NET MVC3的程序scottgu
    AForge.NET框架的使用
  • 原文地址:https://www.cnblogs.com/echo2019/p/11098855.html
Copyright © 2011-2022 走看看