prism

JS由浅入深的一道面试题

旧街凉风 提交于 2020-04-10 10:04:02
前言: 前端面试中,JS是一大热点,下面就跟着小编来看一下一道由浅入深的面试题吧。 正文: 请说出下面代码的执行结果: for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, 1000); } ---------------------揭晓答案了---------------------   因为JS是单线程的语言,所以遇到异步函数的时候,setTimeout会被放到等待队列中,当主线程上的函数执行结束之后,再去执行等待队列中的函数,如下图所示:   当主线程执行完毕,此时变量i已经变成5,所以上述代码的结果是输出5个5。       问题来了:如果我想输出01234,应该如何实现呢?    方式一:let for (let i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, 1000); }   这里就要说一下let和var的区别了,let有块级作用域,就是一个{}的作用域,而var就没有块级作用域,只有函数作用域和全局作用域,所以使用var声明的话会打印出5个5,用let声明的话会打印出01234。       方式二:函数自执行,闭包 for (var i = 0; i < 5; i++) { (function

源码阅读(31):Java中线程安全的Queue、Deque结构——ArrayBlockingQueue(1)

不羁岁月 提交于 2020-04-10 08:16:03
1、概述 ArrayBlockingQueue是一种经常使用的线程安全的Queue结构,上文也已经提过,它是一种内部基于数组的,使用在高并发场景下的阻塞队列,也是一种容量有界的队列。该队列符合先进先出(FIFO)的工作原则,也就是说该队列头部的元素是最先进入队列集合的,也是最先被调用者取出的元素;该队列尾部的元素是最后进入队列集合的,也是按时间顺序会最后被调用者取出的元素。 在多线程同时读写ArrayBlockingQueue队列集合中的元素时,该队列还支持一种公平性策略,这是一种为生产者/消费者工作模式提供的配置模式(可以把ArrayBlockingQueue队列集合的读取操作线程看成消费者角色;把写入操作线程看成生产者角色),一旦启用了这个配置,则ArrayBlockingQueue队列会分别保证多个生产者线程和多个消费者线程获取ArrayBlockingQueue操作权限的顺序——先请求操作的线程会先获得操作权限(后文会给出示例)。 该队列的公平性策略实际上基于ReentrantLock——基于AQS机制的可重入锁的公平性功能,下面我们描述几种使用ArrayBlockingQueue的基本场景。 1.1、ArrayBlockingQueue的最基础使用 // ...... // 设置一个最大容量为5的队列 ArrayBlockingQueue < String > queue

深度学习笔记---摆数操作 NCHW和NHWC区别

廉价感情. 提交于 2020-04-10 07:42:57
深度学习中,经常出现摆数的要求; 经常会对数据的不同格式出现疑惑,这里记录下来; 说到的NHWC或者 NCHW其中每个代表的含义如下: N代表数量, C代表channel,H代表高度,W代表宽度。 1、NCHW其实代表的是[W H C N], 第一个元素是000,第二个元素是沿着w方向的,即001,这样下去002 003,再接着呢就是沿着H方向,即004 005 006 007…这样到019后,沿C方向,轮到了020,之后021 022 …一直到319,然后再沿N方向。 2、NHWC代表的是[C W H N], 第一个元素是000,第二个沿C方向,即020,040, 060…一直到300,之后沿W方向,001 021 041 061…301…到了303后,沿H方向,即004 024 …304.。最后到了319,变成N方向,320,340… 当在不同的硬件加速的情况下,选用的类型不同,在intel GPU加速的情况下,因为GPU对于图像的处理比较多,希望在访问 同一个channel的像素是连续的 ,一般存储选用 NCHW , 这样在做CNN的时候,在访问内存的时候就是连续的了 ,比较方便; 所以在深度学习的时候,推理的前处理,一般都是将RGB或BGR图像进行转变为NCHW的格式;通常我们用opencv读取图像是NHWC的格式,需要进行通道分离,因为网路是一个通道一个通道的对图像做卷积

mysql 的那些常见连接方式

↘锁芯ラ 提交于 2020-04-10 07:38:54
Join介绍 Join是SQL语句中非常重要的一个运算操作,常见的Join操作如下: mysql 官方只提供了内连接,左外连接,右外连接三种方式。通过一定的方法也可以实现其它的连接。 数据准备 a.创建两张表 create table ` person ` ( ` id ` int ( 11 ) , ` name ` varchar ( 255 ) , ` city_id ` int ( 11 ) ) ; create table ` city ` ( ` city_id ` int ( 11 ) , ` city_name ` varchar ( 255 ) ) ; b.插入数据 # 向person表中插入数据 insert into person values ( 1 , 'name1' , 1 ) ; insert into person values ( 2 , 'name2' , 2 ) ; insert into person values ( 3 , 'name3' , 3 ) ; insert into person values ( 4 , 'name4' , 5 ) ; #向city表中插入数据 insert into city values ( 1 , 'city1' ) ; insert into city values ( 2 , 'city2' ) ;

pycharm print 内容缺失 (内容包含 \r \n)

眉间皱痕 提交于 2020-04-09 20:10:49
代码如下: sttr = "456\r789" print(sttr) log: 只能打印出 789 ,前面的 456 并没有显示 主要原因是: \r 代表回车,也就是打印头归位,回到某一行的开头。 也就是将这一行前面的覆盖了。 “\n” “\r\n” 表示换行 点赞 收藏 分享 文章举报 放大的EZ 发布了367 篇原创文章 · 获赞 127 · 访问量 49万+ 他的留言板 关注 来源: oschina 链接: https://my.oschina.net/u/4326852/blog/3226516

python 获取当前时间 包含毫秒

 ̄綄美尐妖づ 提交于 2020-04-09 18:48:18
类似效果: import time def get_time_stamp(): ct = time.time() local_time = time.localtime(ct) data_head = time.strftime("%Y-%m-%d %H:%M:%S", local_time) data_secs = (ct - int(ct)) * 1000 time_stamp = "%s.%03d" % (data_head, data_secs) print(time_stamp) if __name__ == '__main__': get_time_stamp() 点赞 收藏 分享 文章举报 放大的EZ 发布了367 篇原创文章 · 获赞 127 · 访问量 49万+ 他的留言板 关注 来源: oschina 链接: https://my.oschina.net/u/4346209/blog/3226517

Linux系统中如何彻底隐藏一个TCP连接?

北城以北 提交于 2020-04-09 18:02:29
前面的文章中,我稍微描述了一下如何隐藏一个TCP连接: https://blog.csdn.net/dog250/article/details/105372214 在上文中,我采用了 传统 的做法,即hook住proc的/proc/net/tcp展示接口,但这个方法并没有可观赏性,说白了有点像掩耳盗铃,毕竟连接还是在那里的,你自己去遍历系统的TCP ehash表,还是能看到所有大的TCP连接的。 所以,今天我来用 手艺活儿 的方法,庖丁解牛般演示如何彻底隐藏一个TCP连接。 看看那些各种hook proc展示接口的掩耳盗铃法,多么的复杂!多么的复杂啊!看看我这个,多么的彻底!多么的简单啊! 所谓的彻底隐藏,就是将一个TCP连接从系统的TCP ehash表中摘除!这个很容易,调用 inet_unhash 即可了。 问题是,摘除了之后,我们把它放在哪里,才能让进来的数据包顺利匹配到该连接呢? 答案还是二进制hook。 我们搜索系统内存中含有8个字节(一个地址的大小)空隙的位置,把sock结构体的地址放进去即可。这个空隙一般在内核函数之间。比如我使用的地址: # define ROOM_ADDR 0xffffffff815622dd 它就是ip_rcv函数和ip4_frag_match之间的无用空隙。当然了,我们也可以动态分配内存,但是并不优雅。 来吧,下面是代码: // hide

Java中的字节流和字符流区别

三世轮回 提交于 2020-04-09 18:00:37
字节流 1、字节流在操作的时候不会用到缓冲区(也就是内存) 2、字节流可用于任何类型的对象,包括二进制对象 3、字节流处理单元为1个字节,操作字节和字节数组。 字符流 1、而字符流在操作的时候会用到缓冲区 2、而字符流只能处理字符或者字符串 3、字符流处理的单元为2个字节的Unicode字符,操作字符、字符数组或字符串, 在硬盘上的所有文件都是以字节形式存在的(图片,声音,视频),而字符值在内存中才会形成。 所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的。 下面以两个写文件的操作为主进行比较,但是在操作时字节流和字符流的操作完成之后都不关闭输出流。 使用字节流不关闭执行 public static void main ( String [ ] args ) { File file = new File ( "d:" + File . separator + "test1.txt" ) ; try { OutputStream os = new FileOutputStream ( file ) ; String str = "hello world" ; byte b [ ] = str . getBytes ( ) ; os . write ( b ) ; } catch ( FileNotFoundException e ) { e .

[UESTC 1805] 矩阵

∥☆過路亽.° 提交于 2020-04-09 17:59:56
题目描述: 题目链接: UESTC 1805 矩阵 题目大意: 求有多少个不相同的,大小为N×M的矩阵使得每一行元素的乘积和每一列元素的乘积均为K(K=1或-1)。 输入格式: 输入只有一行,三个数字N,M,K。(1≤N≤6,1≤M≤7,K=1或者−1) 输出格式: 输出一个数字,即满足条件的不同矩阵的数量。 样例输入: 2 2 1 样例输出: 2 题目分析: 这道题本身数据较小,可以暴力过,虽然我觉得暴力也不好写。还是推导一下正解: 首先当K=1时,对于N×M的矩阵,假设已有一个任意的(N-1)×(M-1)的矩阵。我们先考虑行,无论第i行的M-1个元素的乘积是1还是-1,我们都可以在对应的第i行的第M列填上1或-1,使得第i行的乘积为1。同样的,对于每一列,我们也可以在这一列的第M行填上1或-1,使得这一列的乘积为1。这样前N-1行和M-1列就满足条件了。现在来考虑第N行和第M列,事实上,前面填上的第N行的前M-1个元素和第M列的前N-1个元素乘积是一样的,所以在第N行第M列的位置可以填上相应的1或-1,使得第N行和第M列的乘积都是1。 那么可得到结论: 对于任意的(N-1)×(M-1)的矩阵都可找到唯一的与之对应的符合题目要求的N×M的矩阵。所以答案就是 2 ( n − 1 ) ( m − 1 ) 2^{(n-1)(m-1)} 2 ( n − 1 ) ( m − 1 ) 。

MySQL数据库面试题(2020最新版)

蹲街弑〆低调 提交于 2020-04-09 17:14:32
文章目录 数据库基础知识 为什么要使用数据库 什么是SQL? 什么是MySQL? 数据库三大范式是什么 mysql有关权限的表都有哪几个 MySQL的binlog有有几种录入格式?分别有什么区别? 数据类型 mysql有哪些数据类型 引擎 MySQL存储引擎MyISAM与InnoDB区别 MyISAM索引与InnoDB索引的区别? InnoDB引擎的4大特性 存储引擎选择 索引 什么是索引? 索引有哪些优缺点? 索引使用场景(重点) 索引有哪几种类型? 索引的数据结构(b树,hash) 索引的基本原理 索引算法有哪些? 索引设计的原则? 创建索引的原则(重中之重) 创建索引的三种方式,删除索引 创建索引时需要注意什么? 使用索引查询一定能提高查询的性能吗?为什么 百万级别或以上的数据如何删除 前缀索引 什么是最左前缀原则?什么是最左匹配原则 B树和B+树的区别 使用B树的好处 使用B+树的好处 Hash索引和B+树所有有什么区别或者说优劣呢? 数据库为什么使用B+树而不是B树 B+树在满足聚簇索引和覆盖索引的时候不需要回表查询数据, 什么是聚簇索引?何时使用聚簇索引与非聚簇索引 非聚簇索引一定会回表查询吗? 联合索引是什么?为什么需要注意联合索引中的顺序? 事务 什么是数据库事务? 事物的四大特性(ACID)介绍一下? 什么是脏读?幻读?不可重复读? 什么是事务的隔离级别