Golang笔记
Golang开山篇 Golang的学习方向 区块链研发工程师, Go服务器端/游戏软件工程师, Golang分布式/云计算软件工程师 Golang的应用领域 区块链的应用开发 分布式账本技术: 去中心化, 公开透明 后台服务器应用 云计算/云服务后台应用 学习方法介绍 先整体框架, 再细节 工科 做中学 适当囫囵吞枣 讲课方式说明 通俗易懂 兼顾技术细节 Golang的概述 什么是程序 Go语言诞生的小故事 Go语言的核心开发团队-三个大牛 肯.汤姆森 罗布.派克 Google创造go语言的原因 计算机硬件更新频繁, 目前主流语言不能利用多核CPU 缺乏一个足够简单高效的编程语言 c/c++编译速度慢, 内存泄漏等困扰 Golang的发展历程 2007年三大创始人开始设计 2009年11月10日, 开源 2015年8月19日, 1.5发布, 移除最后残余的C代码 … Golang的语言特点 静态编译语言的安全和性能, 动态语言开发维护的高效率, 结合 Go = C + Python 保留了指针, 弱化的指针 引入包的概念, 一个文件都要归属于一个包 垃圾回收机制, 内存自动回收 天然并发(重要) 从语言层面支持并发, 实现简单 goroutine, 轻量级线程, 可实现大并发处理, 高效利用多核心 基于CPS并发模型实现 吸收了管道通信机制, 形成Go语言特有的管道channel, 实现不同goroutine之间相互通信 函数可以多返回值 新的创新, 比如切片slice, 延时执行defer Golang开发工具介绍 Vscode, Goland ...
面试汇总
面试汇总 MySQL mysql隔离级别、如何避免脏读和幻读 https://blog.csdn.net/johnstrive/article/details/46724315 Read Uncommitted(读取未提交内容) 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。 Read Committed(读取提交内容) 这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。 Repeatable Read(可重读) 这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。 Serializable(可串行化) 这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。 这四种隔离级别采取不同的锁类型来实现,若读取的是同一个数据的话,就容易发生问题。例如: **脏读(Drity Read):**某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。 **不可重复读(Non-repeatable read):**在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。 **幻读(Phantom Read):**在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。 隔离级别 脏读 不可重复读 幻读 Read Uncommitted √ √ √ Read Committed × √ √ Repeatable Read × × √ Serializable × × × mysql主从同步原理和过程 slave(从服务器) master(主服务器) mysql主从是异步复制过程 master开启bin-log功能,日志文件用于记录数据库的读写增删 需要开启3个线程,master IO线程,slave开启 IO线程 SQL线程, Slave 通过IO线程连接master,并且请求某个bin-log,position之后的内容。 MASTER服务器收到slave IO线程发来的日志请求信息,io线程去将bin-log内容,position返回给slave IO线程。 slave服务器收到bin-log日志内容,将bin-log日志内容写入relay-log中继日志,创建一个master.info的文件,该文件记录了master ip 用户名 密码 master bin-log名称,bin-log position。 slave端开启SQL线程,实时监控relay-log日志内容是否有更新,解析文件中的SQL语句,在slave数据库中去执行。 ...
面试题目
1.什么是引用变量?在PHP中,用什么符号定义引用变量? 在PHP中引用意味着用不同的名字访问同一个变量内容。使用&符号。 <?php // 定义一个变量 $a = range(0, 1000); var_dump(memory_get_usage()); // 定义变量b,将a变量的值赋值给b // COW Copy On Write $b = $a; var_dump(memory_get_usage()); // 对a进行修改 $a = range(0, 1000); var_dump(memory_get_usage()); <?php // zval变量容器(需要安装xdebug扩展) $a = range(0, 3); xdebug_debug_zval('a'); // 定义变量b,把a的值赋值给b $b = $a; xdebug_debug_zval('a'); // 修改a $a = range(0, 3); xdebug_debug_zval('a'); 2.PHP中字符串可以使用那三种定义方法以及各自的区别是什么? 定义方式:单引号,双引号,heredoc和newdoc. 单引号:不能解析变量,不能解析转义字符,只能解义单引号和反斜线本身,变量和变量,变量和字符串,字符串和字符串之间可以用.连接 双引号:可以解析变量,变量可以使用特殊字符和{}包含,可以解义所有的转义字符,可以使用.连接 单引号效率高 heredoc类似于双引号,newdoc类似于单引号,两者都是用来处理大文本 八大数据类型:标量(浮点,整型,字符串,布尔),复合(数组,对象),特殊(null,资源) 布尔中与false七种:0,0.0,’’,‘0’,false,array(),NULL 超全局数组:$GLOBALS,$_GET,$_POST,$_REQUEST,$_SESSION,$_COOKIE,$_SERVER,$_FILES,$_ENV $_SERVER[’…’]在下面⬇ // HTTP_HOST 主机名 // HTTP_USER_AGENT 获取终端设备, 浏览器版本 // // SERVER_SOFTWARE 获取服务器环境 // SERVER_NAME 服务器名 // SERVER_ADDR 服务器地址 (IP) // REMOTE_ADDR 客户端IP地址 // // SCRIPT_FILENAME 脚本地址(盘符) // SCRIPT_NAME 脚本地址(网址) // // REQUEST_URI 传输地址(带参数) // REQUEST_METHOD 传输方式 // QUERY_STRING 传输参数 // // HTTP_REFERER 获取上一级的来源地址 null:直接赋值为NULL,未定义变量,unset销毁的变量 ...
云之梦面试题
第一课总结(最新PHP面试教程http://www.php.cn/course/876.html) 1.自己充满正能量,心态好,多吃苦,提升技能. 2.团队要正能量,融入团队,积极乐观. 3.人品第一,技能其次. 第二课 Use du. 当前目录的空间(Linux) crontab -e 分时日月周(Linux) cp f1.txt f2.txt 复制 看Linux启动信息:dmesg 第三课 加号(+)可以进行数组合并 月:m和n 日:d和j(带不带前导零) preg_split(/-|_/,$arr) 正则分割 str_split($arr,3) 按长度分割 str_replace('1','2',$str) 字符串替换(把1换成2) preg_replace(/linux|php/,'js',$arr) 字符串正则替换 类:protect,public,private interface 接口 abstract 抽象类或抽象方法 final 最终版本的类或方法 static 静态属性或方法 5.从表login中选出name字段包含admin的前10条结果所有信息的sql语句 select * from login where name like "%admin%" limit 10; 6.解释:左连接,右链接,内连接,索引 左连接:left ... join ... on 以左表为主导,先输出左边表的所有数据,右边匹配的输出,不匹配的值为null. 内连接:inner ... join ... on 相当于普通多表查询 索引:主键,唯一,普通 7.简述论坛中无限分类等等实现原理 表字段至少4列: id,name,pid(父类id),path(分类地图) 10.描述一下大流量高并发量网站的解决方案 1.服务器负载均衡 2.web服务器用nginx(3万)替换apache(3千) (最大并发数) 6.调高apache的默认并发数调大 7.减少客户在服务器上的连接断开时间 4.数据缓存(memcache,redis,tp文件缓存) 5.表索引 11.如何设计或配置MySQL,才能达到高效的使用目的? 1.mysql服务器主从复制 2.表分区 3.表引擎 数据小量尽量选择myisam 4.索引优化 用desc解析sql语句看字段 是否需要优化 5.服务器优化 max_connections=1500 并发连接数 wait_timeout=120 链接关闭时间 12.如何防sql注入? 1.表单尽量使用post提交 2.使用HTTP_REFERER检查源文件 3.开启addslashes 在特殊符号前加\ 4.使用htmlspecialchars对字符串实体 5.提高并发连接数 6.减小链接关闭时间 7.用户授权登录 8.定期给mysql打补丁 23.isset()和empty()的区别? isset()为假(false),只有未定义变量 empty()为空(true):未定义,0,false,'','0',array(),null 24.如何在页面之间传递变量? get,post,ajax,curl,cookie,session 25.冒泡排序? function mysort($arr){ for($i=0;$i<count($arr)-1;$i++){ for($j=0;$j<count($arr)-$i-1;$j++){ if($arr[$j]>$arr[$j+1]){ $x = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $x; } } } } mysql中二次排序 第一次排完,第二次排序在第一次排序之后, 不影响第一次排序的基础上进行排序 ...
JS复习
JS复习 第一天 1. javascript 简介 1.1 什么是javascript 1.1.1 概念: javascript是 基于对象 和 事件驱动 并具有相对安全性的 客户端 脚本语言 1.1.2 发展简史: ① Nombas公司1992年开发 嵌入式脚本语言 C-- 后改名 ScriptEase ② Netscape公司 1995年发布LiveScript 后改名javascript1.0 ③ 三足鼎立 NetScape推出javascript1.1后,Microsoft推出Jscript, 加上 ScriptEase ④ 标准化 1997javascript1.1 作为草案 提交给 ECMA(欧洲计算机制造商协会) 。由来自 Netscape、Sun、 微软、Borland 和其他一些对脚本编程感兴趣的公司的程序员组成的 TC39 锤炼出了 ECMA-262,该标准 定义了名为 ECMAScript 的全新脚本语言. 1.1.3 组成: 核心(ECMAScript) 文档对象模型(DOM) 浏览器对象模型(BOM) 1.1.4 客户端浏览器上执行的脚本 JavaScript VBScript applet(需要安装JDK) 1.1.5 ECMAScript核心: JavaScript ActionScript ScriptEase 1.1.6 扩展:node.js 服务端开发(apache+php)手机app: phonegap框架 1.1.7 课程 内容: JS 基本语法 JS 函数/对象/数组 JS 内置对象 JS 事件 BOM DOM HTML XML Ajax Jquery类库 Bootstrap 1.1.8 浏览器 IE IE6 7 8 / IE9+ EDGE 非IE Chrome firefox opera Safari ... 1.2 javascript的特点 ...