基础知识2020-4-21

Linux
Question

1终端是那个文件夹下的那个文件 黑洞文件是哪个文件夹下的命令
2 移动文件用哪个命令 改名用哪个命令
3复制文件命令 复制整个文件夹命令 需要提示功能
4删除命令 删除整个文件夹 删除空文件夹
5Linux命令有哪几种可用的通配符及其含义

Answer

1 /dev/tty
/dev/null
2 mv -r filename(整个文件夹)
mv filename newfilename
3 cp cp -r ???
4rm rm -r rmdir
5 ? 代表单个字符

  • 表示多个字符
    [charset] 表示charset集合中的任何单个字符

java
Question

1怎么防止死锁
2ThreadLocal是什么 有哪些使用场景
3synchronized底层实现原理
4synchronized 和volatile 的区别

Answer

1死锁发生的四个必然条件
互斥条件:进程对分配到的资源不允许其他进程访问,其他进程只能等到本进程使用完释放资源后才可以使用
请求保持进程获得一定资源后,发出对其他资源的请求,但是该资源可能被其他进程占有,请求进入阻塞状态,但是对自己已经获得的资源保持不放
不剥夺 进程已经获得的资源,在使用完释放之前不能被强行剥夺
环路等待 进程发生死锁后,若干进程形成首尾相接的循环等待资源关系
2 tThredLocal是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java提供Thread Local类来支持线程局部变量。是一种实现线程安全的方法。但是在管理环境中,使用线程局部变量的时候需要很小心,在这种情况下,工作线程的生命周期比任何应用变量的生命周期都要长。任何线程局部变量在使用后如果没有被释放,容易造成内存泄漏。
3synchronized类可以保证方法或代码块在运行时,同一时刻只有一个方法进入到临界区,同时它也可以保证共享变量的内存可见性。
Java中每一个对象都可以作为锁,这是synchronized实现同步的基础:
普通同步方法,所示当前实例对象
静态同步方法,锁是当前类的class对象
同步方法块, 锁是括号里面的对象
4
volatile 本质是在告诉jvm当前变量在寄存器(工作内存)的值是不确定的,需要从主存中读取;synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞
volatile 仅能使用在变量级别,synchronized则可以使用在变量、方法和类级别
volatile仅能实现变量的修改可见性,不能保证原子性,synchronized可以保证修改变量的修改可见性和原子性
volatile不会造成线程的阻塞 synchronized可能会造成线程的阻塞
volatile标记的变量不会被编译器优化 synchronized 标记的变量可以被编译器优化

python

1列出常见状态码 和意义
2 分别从前端、后端、数据库阐述web项目的性能优化
3使用pop和del删除字典中的"name"字段,dic={“name”:“zs”,“age”:18}
4列出常见MYSQL数据存储引擎
5计算代码运行结果,得出[(“a”,1),(“b”,2),(“c”,3),(“d”,4),(“e”,5)]

answer

1 200 Ok 七请求正常处理完毕
204 not content 请求成功处理但是没有实体的主体返回
206 Partial content get范围请求已成功处理
301 Moved Permanently 永久重定向,资源已永久分配新的url
302 found 临时重定向 资源已临时分配新的url
303 see other 临时重定向,期望使用get定向获取
304not modified 发送的附带请求未满足
307 Temporary Redirect 临时重定向 post不会编程get
400 bad request请求报文语法错误或参数错误
401 Unauthorized 需要HTTP认证或认证失败
403 Forbidden 请求资源被拒绝
404 Not FOund 无法找到请求资源
500 服务器故障或web应用故障
503服务器超负载或停机维护
2
前端优化:
1减少http请求(制作精灵图)
2 html和css放在页面上部,JavaScript放在页面下面,因为js加载比html和css慢,所以优先加载Html和css,以防页面显示不全,性能差。
后端优化:
1缓存读取次数高、变化少的数据。
2异步方式,如果有耗时操作,可以采用异步操作
3代码优化,避免太多循环和判断次数,如果具有多个if else语句,最有可能的放在前面
数据库优化:
1如有条件,数据存于redis缓存,方便读取
2建立索引,外键等
3
基础知识2020-4-21
4
InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。
MyISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。
MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。
5
基础知识2020-4-21