Welcome to Haskell 在上一篇文章中,我通过几个Java的例子简单的说明了Monad的本质和一些工程中常见的用途。接下来的文章就不再侧重于工程了,而是要慢慢向理论转换。而作为过渡,我选择了Haskell来代替Java进行说明。本篇文章默认读者已经对Haskell的基本语法有所了解,因 […]
分类:Java
当我们谈论Monad的时候(一)
Monad不就是个自函子范畴上的幺半群,这有什么难理解的。 Phillip Wadler 当我们谈论Monad的时候,我们在谈论什么 坊间一直流传着一句话:“一百个学FP的人的心中就有一百个对Monad的理解”。而我相信,他们中的大部分人在看明白后又会写出一篇崭新的Monad文。我也一直很想写一写自 […]
玄学优化一个稳定排序算法
前一阵子(还挺前的)正好在忙数据结构的课程设计,大体是要求做一个航班管理系统。程序主体就是简单堆几个高效数据结构,再糊上一个RESTful API,没什么好谈的。不过在优化其中的排序算法时倒是学到了挺多。虽然说本质还是缝合若干优秀算法,但刚好最近也很久没更新博客了,所以干脆写一篇博客简述当时的思路吧 […]
PicaComic接口分析手记
好久没有更新技术类文章了,不过其实我也有慢慢在写几篇文章,然而它们依旧躺在草稿箱。刚好群里讨论写个Pica客户端,于是我就来分析下Pica的接口吧。 拆开来一看,竟然没有混淆……build.gradle改改也没多大成本吧,虽然给我省事就是了。 抓包得知,Pica的接口使用signature头以校验。 […]
各语言Y组合子大比拼
最近有点无聊,突然想试试在各种语言里面实现Y组合子。不过写完之后,没想到结果完全出乎我的意料。嘛,让我们来看看不同语言里的Y组合子。 首先祭上Y组合子的定义: Python魔法 和众多流行的弱类型语言一样,Python支持lambda表达式但不支持延迟求解和柯里化,所以Python的写法应该也是比较 […]
B站APP逆向工程手记
本文原载于DIARY,但是考虑到博客很久都没更新了,加上DIARY设立的本意是记录个人生活,所以这篇放在DIARY也有些不妥,故思索再三,移至此处更新。 最近在重写BiliAPI,由于之前采集的接口都是两年前的东西了,所以这次打算再逆向B站客户端。版本使用了官网下载的5.29.1。 8.16 可以说 […]
MCP Mapping 查看器汉化 – 查看SRG、MCP、混淆名的关系
简介 查找SRG、MCP、混淆名(主要是SRG、MCP)之间的关系一直是令人头疼的事情,不过其实MCP开发包中早就提供了一个工具MCP Mapping Viewer。不过可惜的是MCP Mapping Viewer实再太不接地气,导致国内访问十分困难。所以我就建了一个小小的镜像服务器,以供国内访问, […]
从Java虚拟机小测的结果来看JVM
前言 在去年年初我为了测试一个出题平台,随手打了几道题目,水了一篇Java虚拟机测试题。没想到今天一看竟然有人回答!热泪盈眶啊……好,那既然你肯回答,我就肯改主观题。截止目前,答题人数为24(有一次是我自己测试)。平均正确率是36%,平均答题时间竟然高达42:37!好感动(难道不是因为有人挂了很久么 […]
翻译 – Java局部变量类型推断的代码风格规范
原作者:Stuart W. Marks/2018-03-22 原文链接:http://openjdk.java.net/projects/amber/LVTIstyle.html 译者的话 Java 10给我们带了了一个很实用的特性——局部变量类型推断,此特性能大大的增加代码的整洁度与可读性。但是译 […]
[Java8]如何正确使用Optional
Optional是Java8提供的为了解决null安全问题的一个API。善用Optional可以使我们代码中很多繁琐、丑陋的设计变得十分优雅。这篇文章是建立在你对Optional的用法有一定了解的基础上的,如果你还不太了解Optional,可以先去看看相关教程,或者查阅Java文档。 使用Optio […]
Comments