mu

解谜游戏 MU Complex 的过关图文攻略 (Episode2)(下)

こ雲淡風輕ζ 提交于 2020-03-02 10:56:34
本文的游戏继续前文展开,前三篇攻略的地址如下: 解谜游戏 MU Complex 的过关图文攻略 (Episode1) http://my.oschina.net/Tsybius2014/blog/358145 解谜游戏 MU Complex 的过关图文攻略 (Episode2)(上) http://my.oschina.net/Tsybius2014/blog/693873 解谜游戏 MU Complex 的过关图文攻略 (Episode2)(中) http://my.oschina.net/Tsybius2014/blog/693896 现在我们只剩下右下角的区域没有打开了 我们首先连接到fuhong 从发来的mail中可以看出,管理员grisson帮fuhong重置了多次密码 这关有一个特殊的命令:resetpass,这个命令可以用来重置密码: 系统提示我们,把ResetID发送到邮箱 e.bolan@mushighz05.mu,就可以重置密码了 发送邮箱的系统,在mainframe中,ebolan.mail中给出了一个网址:mailer.mucomplex.com 打开这个地址: mailer.mucomplex.com 给 e.bolan@mushighz05.mu 发邮件,注意把 computer name 和 reset id 带上 其实你写的邮件里,将收件人填写正确

解谜游戏 MU Complex 的过关图文攻略 (Episode2)(上)

北战南征 提交于 2020-03-02 10:02:13
2014年曾经写过一篇《 解谜游戏 MU Complex 的过关图文攻略 (Episode1) 》,后来发现这个游戏出了Episode2,但可惜2015年的时候没有玩,今年发现的时候这个游戏在kongregate.com上的flash免费版已经下架,只好去steam平台上花¥34买了一个。 游戏的Episode1名叫“ENTER THE COMPLEX ”,剧情和原来没有变化,Episode2名叫“FREELYA”,开启时需要输入访问码“freeme”,这个访问码可以在Episode1通关时获取到。 进入到游戏后,会登录到一台名为jackparrot的主机,你接到的任务是获取密码并访问willterk。 这关一共有五个文件,termial.usage是对游戏技巧的简要说明,另外三个mail文件是公司其他员工向jakparrot发的邮件,每台主机都会有很多这样的文件,建议最好都扫一遍,因为有些mail文件中会提供对通关很重要的信息。 这关里最重要的文件是password,需要使用sudo命令打开,最后得到willterk主机的密码是peterobrain。 使用ssh命令登录willterk即可。 在willterk上,你需要找到密码登录mainframe,这一关需要用camera打开摄像头,用light normal和light black两个命令开关照明设备。 正常模式下

golang value并发安全的另一种玩法

懵懂的女人 提交于 2020-02-28 12:41:39
golang value并发安全的另一种玩法,就是使用 atomic.Value ,看一段代码。 package main import ( "sync" "sync/atomic" "time" ) func main() { var m atomic.Value type Map map[string]string m.Store(make(Map)) var mu sync.Mutex read := func(key string) (val string) { m1 := m.Load().(Map) return m1[key] } insert := func(key, val string) { mu.Lock() defer mu.Unlock() m1 := m.Load().(Map) m2 := make(Map) for k, v := range m1 { m2[k] = v } m2[key] = val m.Store(m2) } go func() { for { insert("k", "v") time.Sleep(100 * time.Millisecond) } }() go func() { for { read("k") } }() time.Sleep(10 * time.Second) } 相对于读写锁,少了一些锁的争抢,不过相对的

JVM源码分析之Metaspace解密

℡╲_俬逩灬. 提交于 2020-02-27 20:50:22
概述 metaspace,顾名思义,元数据空间,专门用来存元数据的,它是jdk8里特有的数据结构用来替代perm,这块空间很有自己的特点,前段时间公司这块的问题太多了,主要是因为升级了中间件所致,看到大家讨论来讨论去,看得出很多人对metaspace还是模棱两可,不是很了解它,因此我觉得有必要写篇文章来介绍一下它,解开它神秘的面纱,当我们再次碰到它的相关问题的时候不会再感到束手无策。 通过这篇文章,你将可以了解到 为什么会有metaspace metaspace的组成 metaspace的VM参数 jstat里我们应该关注metaspace的哪些值 为什么会有metaspace metaspace的由来民间已有很多传说,不过我这里只谈我自己的理解,因为我不是oracle参与这块的开发者,所以对其真正的由来不怎么了解。 我们都知道jdk8之前有perm这一整块内存来存klass等信息,我们的参数里也必不可少地会配置-XX:PermSize以及-XX:MaxPermSize来控制这块内存的大小,jvm在启动的时候会根据这些配置来分配一块连续的内存块,但是随着动态类加载的情况越来越多,这块内存我们变得不太可控,到底设置多大合适是每个开发者要考虑的问题,如果设置太小了,系统运行过程中就容易出现内存溢出,设置大了又总感觉浪费,尽管不会实质分配这么大的物理内存。基于这么一个可能的原因

图解Go语言的context了解编程语言核心实现源码

霸气de小男生 提交于 2020-01-06 23:30:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 基础筑基 基于线程的编程语言中的一些设计 ThreadGroup ThreadGroup是基于线程并发的编程语言中常用的一个概念,当一个线程派生出一个子线程后通常会加入父线程的线程组(未指定线程组的情况下)中, 最后可以通过ThreadGroup来控制一组线程的退出等操作, 然后在go语言中goroutine没有明确的这种parent/children的关系,如果想退出当前调用链上的所有goroutine则需要用到context ThreadLocal 在基于线程的编程语言语言中,通常可以基于ThreadLocal来进行一些线程本地的存储,本质上是通过一个Map来进行key/value的存储,而在go里面并没有ThreadLocal的设计,在key/value传递的时候,除了通过参数来进行传递,也可以通过context来进行上下文信息的传递 context典型应用场景 场景 实现 原理 上下文信息传递 WithValue 通过一个内部的key/value属性来进行键值对的保存,不可修改,只能通过覆盖的方式来进行值得替换 退出通知 WithCancel 通过监听通知的channel来进行共同退出的通知 上下文数据的递归获取 因为在go的context里面并没有使用map进行数据保存,所以实际获取的时候

图解Go里面的sync.Map了解编程语言核心实现源码

泄露秘密 提交于 2019-12-30 01:21:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 基础筑基 在大多数语言中原始map都不是一个线程安全的数据结构,那如果要在多个线程或者goroutine中对线程进行更改就需要加锁,除了加1个大锁,不同的语言还有不同的优化方式, 像在java和go这种语言其实都采用的是链表法来进行map的实现,本文也主要分析这种场景 并发安全的map实现的三种方式 在go语言中实现多个goroutine并发安全访问修改的map的方式,主要有如下三种: 实现方式 原理 适用场景 map+Mutex 通过Mutex互斥锁来实现多个goroutine对map的串行化访问 读写都需要通过Mutex加锁和释放锁,适用于读写比接近的场景 map+RWMutex 通过RWMutex来实现对map的读写进行读写锁分离加锁,从而实现读的并发性能提高 同Mutex相比适用于读多写少的场景 sync.Map 底层通分离读写map和原子指令来实现读的近似无锁,并通过延迟更新的方式来保证读的无锁化 读多修改少,元素增加删除频率不高的情况,在大多数情况下替代上述两种实现 上面三种实现具体的性能差异可能还要针对不同的具体的业务场景和平台、数据量等因此来进行综合的测试,源码的学习更多的是了解其实现细节,以便在出现性能瓶颈的时候可以进行分析,找出解决解决方案 map的容量问题

查看jvm的cg情况

五迷三道 提交于 2019-12-25 21:27:01
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1.查询java程序的pid ps -ef|grep java 查询 或者 top 查询 2.使用jstat查看gc情况 jstat -gc pid 1000[间隔时间] 得到如下 bash-4.4# jstat -gc 28 1000 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 34048.0 34048.0 0.0 2000.1 272640.0 41824.1 707840.0 63625.3 116736.0 106797.8 15104.0 13522.1 99 3.638 0 0.000 3.638 34048.0 34048.0 0.0 2000.1 272640.0 42511.0 707840.0 63625.3 116736.0 106797.8 15104.0 13522.1 99 3.638 0 0.000 3.638 34048.0 34048.0 0.0 2000.1 272640.0 42883.7 707840.0 63625.3 116736.0 106797.8 15104.0 13522.1 99 3.638 0 0.000 3.638 3.分析各个属性 YGC:young gc的次数

磁带双工备份报报ora-19565错误

橙三吉。 提交于 2019-12-24 18:10:10
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 当我执行磁带备份时,报以下错误: RMAN > backup as backupset device type sbt copies 2 incremental level 0 database; Starting backup at 03-MAY-13 using channel ORA_SBT_TAPE_1 channel ORA_SBT_TAPE_1: starting incremental level 0 datafile backup set channel ORA_SBT_TAPE_1: specifying datafile(s) in backup set input datafile file number=00001 name=/ oracle /app/oracle/oradata/sztech1/system01.dbf input datafile file number=00002 name=/oracle/app/oracle/oradata/sztech1/sysaux01.dbf input datafile file number=00005 name=/oracle/app/oracle/oradata/sztech1/example01.dbf input

ssh免密码登录配置

烈酒焚心 提交于 2019-12-24 14:40:55
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 生成秘钥对 [root@localhost ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:D0kugFN+1mryj+fpOrQ5vzZSsLr/jKnTmm26fJvqb7g root@localhost.localdomain The key's randomart image is: +---[RSA 2048]----+ | . | | + . | | o o o o | | . +.+ . | | . +oS | | +o..o | | =.+ . | | .+o@B+. | | .E/@&Xo |

如何高效地遍历 MongoDB 超大集合?

人盡茶涼 提交于 2019-12-16 15:41:38
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> GitHub 仓库: Fundebug/loop-mongodb-big-collection 本文使用的编程语言是 Node.js,连接 MongoDB 的模块用的是 mongoose 。但是,本文介绍的方法适用于其他编程语言及其对应的 MongoDB 模块。 错误方法:find() 也许,在遍历 MongoDB 集合时,我们会这样写: const Promise = require("bluebird"); function findAllMembers() { return Member.find(); } async function test() { const members = await findAllMembers(); let N = 0; await Promise.mapSeries(members, member => { N++; console.log(`name of the ${N}th member: ${member.name}`); }); console.log(`loop all ${N} members success`); } test(); 注意,我们使用的是 Bluebird 的 mapSeries 而非 map ,members 数组中的元素是一个一个处理的