J80 是一个 Z80 仿真器,使用 Java 开发,提供一个标准的 BIOS 支持 CP/M 2.2, CP/M3.0, and one simple ZX Spectrum 48/128K emulator.The spectrum 128K version emulation is incompletebut working. The goal of this emulator is that the'hardware' is built on-the-fly, reading the configuration from one file. This makes it veryeasy to add new peripherals or features.
peitengshun1 发布的帖子
-
Z80仿真器J80
-
基于Java的机器学习库Tribuo
Tribuo 是 Java 编写的机器学习库,可提供多类分类、回归、聚类、异常检测和多标签分类。Tribuo 提供了流行的机器学习算法的实现,还包装了其他库以提供统一的接口。Tribuo 包含加载、特性化和转换数据所需的所有代码。此外,它包括所有受支持的预测类型的评估类。
Tribuo 可在 Java 8+ 上运行。它本身是一个纯 Java 库,并且在所有 Java 平台上都受支持。但是,某些接口需要本机代码,因此仅在有本机库支持的情况下才受支持。该库在 Windows 10、macOS 和 Linux(RHEL / OL / CentOS 7+)上的 x86_64 架构上进行过测试,因为这些是 Tribuo 与之交互的本机库的受支持平台。该机器学习库的开发工作由 Oracle Labs 的机器学习研究小组领导。
-
ASP.NET Core这个HttpContextAccessor为什么改成了这个样子?
关于HttpContext其实我们大家都不陌生,HttpContext 就是关于 Http请求过程中涉及到的所有变量或者引用存放的一个仓库。 类似的我们还有 DbContext, ApplicationContext 。它封装了HttpRequest和HttpResponse,在处理Http请求时,起着至关重要的作用。
那么如何访问HttpContext对象呢?回到await/async出现以前的ASP.NET的时代,我们可以通过HttpContext.Current方法直接访问当前Http请求的HttpContext对象,因为当时基本都是同步的代码,一个Http请求只会在一个线程中处理,所以我们可以使用能在当前线程中传播的CallContext.HostContext来保存HttpContext对象,
一切都很美好,但是后面微软在C#为了进一步增强增强了异步IO的性能,从而实现的stackless协程,加入了await/async关键字,同一个方法内的代码await前与后不一定在同一个线程中执行,那么就会造成在await之后的代码使用HttpContext.Current的时候访问不到当前的HttpContext对象,下面有一段这个问题简单的复现代码。
await执行之前HostContext是可以正确的输出赋值的对象和数据,但是await以后的代码由于线程从16切换到29,所以访问不到上面代码给HostContext设置的对象了。
AsyncLocal默认会将当前线程保存的上下对象在发生await的时候传播到后续的线程上。
-
分布式任务调度平台XXL-JOB
XXL-JOB是一款分布式任务调度平台,其核心设计目标是旨在开发迅速、学习简单、轻量级、易扩展。如今已开放源代码并接入多家公司线上产品线,做到了开箱即用;这个项目是基于Java语言开发的,所以刚开始还被怀疑能不能集成.NET项目,第一反应就先去Nuget包中找找有没有现成的轮子,果然有小伙伴已经在用了,所以一件调用即可。
-
XXL-JOB任务调度平台的注册中心:执行器会周期性的自动注册任务, 调度中心还会自动发现注册的任务并触发执行。同时,XXL-JOB任务调度平台也能够支持手动录入执行器地址;
-
集群和分布式也很给力:调度中心和任务执行器可以进行集群部署,实现高可用;
-
健康检查:保证调度的高可用;
-
一致性: “调度中心”通过DB锁保证集群分布式调度的一致性, 一次任务调度只会触发一次执行;
-
分片广播任务:当任务执行器集群部署时,比如需要处理大量数据时,可以通过对应参数,将数据拆分给不同的任务执行器处理,提高效率;
-
邮件报警:任务失败时支持邮件报警,支持配置多邮件地址群发报警邮件;
用户/权限管理:XXL-JOB任务调度平台支持在线管理系统用户,存在管理员、普通用户两种角色。
项目地址:
github:https://github.com/xuxueli/xxl-job
-
-
java泛型
泛型本质:Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
泛型的本质是参数化类型,即给类型指定一个参数,然后在使用时再指定此参数具体的值,那样这个类型就可以在使用时决定了。这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
为什么使用泛型:泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
保证了类型的安全性。在没有泛型之前,从集合中读取到的每一个对象都必须进行类型转换,如果不小心插入了错误的类型对象,在运行时的转换处理就会出错。有了泛型后,定义好的集合names在编译的时候add(123)就会编译不通过。
相当于告诉编译器每个集合接收的对象类型是什么,编译器在编译期就会做类型检查,告知是否插入了错误类型的对象,使得程序更加安全,增强了程序的健壮性。
消除强制转换:泛型的一个附带好处是,消除源代码中的许多强制类型转换,这使得代码更加可读,并且减少了出错机会。 -
JDBC连接池、监控组件Druid
Druid是一个JDBC组件,它包括DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。DruidDataSource 高效可管理的数据库连接池。和SQLParser 。Druid可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题DruidDruiver和DruidDataSource都支持PasswordCallback。
SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。 扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件。
-
人手一个的ORM
这是一款轻量级ORM,它的英文全称是:DBHelper,用于查询使用原生SQL数据库,查询结果映射到实体类,增删改支持实体类,支持Oracle、MSSQL、MySQL、SQLite等多种数据库,有配套Model生成器,方便自己扩展以支持更多数据库特点:支持Oracle数据库、MSSQL数据库、MySQL数据库、SQLite数据库等四种数据库,十分的方便,并且扩展以支持更多关系数据库,DBHelper有配套的Model生成器;insert、update、delete操作无需写SQL语言。
DBHelper的查询使用原生SQL;查询结果通过映射转成实体类或实体类集合;支持参数化查询,通过SqlString类提供非常方便的参数化查询;支持连接多个数据源;单表查询、单表分页查询、简单的联表分页查询支持Lambda表达式;支持原生SQL和Lambda表达式混写。
优点在于代码实现比较简单,有经验的程序员容易掌控代码,自己修改和扩展,查询使用原生SQL。 -
Rust编写的Key-Value存储数据库Dorea
Dorea 是一款 Key - Value 数据存储系统,基于 Bitcask 存储模型实现。采用 Bitcask 的存储模型,数据类型层面支持结构化(使用了自制的一种 JSON 拓展格式来完成存储)。数据传输使用了自制的 TCP 协议,为了方便还内置了使用 Axum 开发数据库 Api 接口。
制作了个人常用的几门语言的 Driver ,包括:Deno、Rust、Python (Deno 和 Python 基于 Web 接口)。数据库索引是在内存中保存的,并且是按需加载(正在开发);有缓存淘汰机制。简单的拓展(插件)系统设计,采用 Lua 语言做插件,目前已经可以实装了qwq(包含了基本接口),单机可运行多个服务,并配置不同的 workspace 和 config-file
项目地址:
https://www.oschina.net/p/dorea -
高性能时序数据库QuestDB
QuestDB 是用于时间序列数据的高性能开源 SQL 数据库。它使用面向列的方法、大量并行向量化执行、SIMD 指令以及一系列低延迟技术。整个代码库是从头开始构建的,没有依赖关系,并且 100% 没有垃圾回收。QuestDB 实现了SQL,并使用本地扩展对其进行了时间序列扩展。
它公开了 PostgreSQL 有线协议、高性能 REST API,并支持InfluxDB Line Protocol 的提取。QuestDB 使用具有免维护方案的关系模型。关系和时间序列联接使随时间推移的数据关联变得容易。写入会持久地提交到磁盘,这意味着数据是安全的,但可以立即访问。
-
跨平台数据库工具 Azure Data Studio
Azure Data Studio是一款跨平台的数据库工具,适用于在Windows平台,MacOS平台和Linux操作系统等多系统上使用Microsoft系列内部部署和云数据平台的数据专业人员。此前已经发布预览版名称SQL Operations Studio下,并且Azure Data Studio 提供了与 IntelliSense、 代码段、 源代码管理集成和集成的终端的现代编辑器体验。 它在设计时考虑了数据平台用户,内置了查询结果集和可自定义的仪表板。
目前官方支持的数据库有SQL Server、Azure SQL 数据库服务器、Azure SQL 数据仓库和pgsql(PostgresSql),其中pgsql是通过插件的方式来实现的。并且Azure Data Studio还提供了非常现代化、且键盘焦点位于SQL编码经验等优点,这与内置功能,例如多个选项卡窗口、丰富的 SQL 编辑器、 IntelliSense、 关键字完成、 代码段、 代码导航和源代码管理简化日常任务(Git) 的集成。 运行按需 SQL 查询、 查看并将结果保存为文本、 JSON 或 Excel。 编辑数据、组织最喜欢的数据库连接,以及以熟悉的对象浏览体验浏览数据库对象。
-
编译数据库生成工具 Bear
Bear 是一个为 clang 工具生成编译数据库的工具。
JSON 编译数据库在 clang 项目中被用来提供关于单个编译单元如何被处理的信息。有了这个,就很容易用备用程序重新运行编译。
一些构建系统原生支持 JSON 编译数据库的生成。对于不使用这种构建工具的项目,Bear 在构建过程中会生成 JSON 文件。
-
一个项目,一个数据库好,还是多个项目共用一个数据库好
在开发项目的时候,你们都是怎么规划表和数据库的关系的,是一个项目一个数据库吗?
如果项目不大,一个数据库只放几张表,会不会感觉来浪费了!
-
Memcached结构存储
Memcached 可以把数据库调用、API 调用、页面渲染的结果,按照 key-value 结构存储在内存中。通过减轻数据库负载来加速动态 web 应用程序。
Memcached的数据存储方式被称为Slab Allocator,其基本方式是:先把内存分成很多个Slab,这个大小是预先规定好的,以解决内存碎片的问题。分配给Slab的内存空间被称为Page,默认是1M。一个Slab下可以有多个Page。
然后把一个Page分成很多个chunk块,chunk块是用于缓存记录的空间。chunk的大小是先有一个基本值,然后根据增长因子(1.25)来增大。slab class 是内存区类别(48byte-1M),每个类别有一个slab classId。
Memcached 里面保存着slab内空闲的chunk列表,当收到要保存的item的时候,它会根据item的大小去选择一个最合适的slab,然后找到空闲的chunk,把数据放进去。
memcached是一个高性能的分布式内存缓存服务器,memcached在Linux上可以通过yum命令安装,这样方便很多,在生产环境下建议用Linux系统,memcached使用libevent这个库在Linux系统上才能发挥它的高性能。它的分布式其实在服务端是不具有分布式的特征的,是依靠客户端的分布式算法进行了分布式,memcached是一个纯内存型的数据库,这样在读写速度上相对来说比较快。
memcached的内存分配是预先分配内存,常规的程序使用内存无非是两种,一种是预先分配,一种是动态分配。动态分配从效率的角度来讲相对来说要慢点,因为它需要实时的去分配内存使用,但是这种方式的好处就是可以节约内存使用空间;memcached采用的是预先分配的原则,这种方式是拿空间换时间的方式来提高它的速度,这种方式会造成不能很高效的利用内存空间,但是memcached采用了Slab Allocation机制来解决内存碎片的问题。
-
JAVA工程师偏爱MongoDB
MongoDB一个是基于文档式、建立于分布式存储系统之上的NOSQL数据库。MongoDB不仅仅高性能,开源代码,而且是一个无模式的文档型数据库,它在多个场景下可以替代传统的关系型数据库,也可以代替键或者值存储方式。
MongoDB 是一个基于分布式文件存储的数据库。它是由 C++语言编写。旨在为 WEB 应用提供可扩展的高性能的数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的项目,同时也是非关系数据库当中功能最丰富,最像关系数据库的一个数据库。
MongoDB数据库支持的数据结构非常松散,是一个类似json的bson格式,因此它可以存储比较复杂的数据类型。Mongo最大的特点是在于它支持的查询语言非常强大,其语法有一些类似于面向对象的查询语言,这个数据库几乎可以实现类似的关系数据库单表查询的很大一部分功能,而且一浪更比一浪强,Mongo还支持对数据建立索引。
MongoDB在多个站点部署的场景如下:第一个是网站实时数据处理:这个场景非常适合实时的插入、更新与查询数据,并且具备网站实时数据存储所需的复制及高度伸缩性等功能。第二个是缓存:由于性能很高,它适合作为信息基础设施的缓存层。在系统重启之后,由它搭建的持久化缓存层可以避免下层的数据源过载。高伸缩性的场景:非常适合由数十或数百台服务器组成的数据库,它的路线图中已经包含对MapReduce引擎的内置支持。
-
提高用户体验感的Rematch
Rematch 是没有 boilerplate 的 Redux 最佳实践。不再有 action types, action creators, switch 语句或 thunks。
rematch是对redux的二次封装,简化了redux是使用,极大的提高了开发体验。rematch仅仅是对redux的封装,没有依赖redux-saga,也没有关联react,因此其可以用在其他的视图库中,如vue等。
rematch的优点:省略了action types不必再多次写字符串,使用model/method代替;省略了action creators直接调用方法,不必再生产action type,使用dispatch.model.method代替;省略了switch语句,调用model.method方法,不必判断action type;集中书写状态,同步和异步方法,在一个model中使用state,reducers和effects来写状态,同步和异步方法。
项目地址:
https://github.com/kakaoG/taro-small-program guo_1991 -
初次尝试使用g++编译 .cpp 遇到的坑
编译错误如下,这是 string.h 找不到吗?
PS C:\Users\admin\Desktop\test> g++ .\钢琴.cpp In file included from c:\mingw\include\windef.h:269, from c:\mingw\include\windows.h:42, from .\钢琴.cpp:1: c:\mingw\include\winnt.h:49:10: fatal error: string.h: No such file or directory 49 | #include <string.h> | ^~~~~~~~~~ compilation terminated. PS C:\Users\admin\Desktop\test>
-
两个不同域名之间,ajax请求如何携带cookie
场景如下
api接口部署在 a 域名下,客户端接口在 b 域名下,当用户从b域名调用登录接口的时候,服务端要往客户端存储cookie的时候,发现cookie无法存储,也有可能是存储成功了,ajax无法携带cookie到a域名,导致鉴权体系无法正常使用
-
log4ne日志工具
log4net是一个可以帮助程序员把日志信息输出到各种不同目标的.net类库。它可以容易的加载到开发项目中,实现程序调试和运行的时候的日志信息输出,提供了比.net自己提供的debug类和trace类的功能更多。log4net是从java下有卓越表现的log4j移植过来的。它是apache基金资助的项目的一部分。
log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台、文件、数据库等)的工具。
log4net是Apache软件基金会Apache Logging Services工程的一部分。Apache日志服务工程致力于为程序调试和审计提供跨语言的日志服务。