java

一入JVM深似海

Mac之Catalina OS中编译OpenJDK8

如果想深入学习JDK内部的实现机制,最便捷的途径是自己手动编译一套JDK,通过静心阅读和调试跟踪JDK源码去深入了解Java技术体系的原理,结合各类书籍、文章和博客,对比理解,更容易让你了解JDK是怎么运作的,底层都做了什么。

本篇文章是作者在Mac OS X Catalina 10.15.1 环境下编译总结的,在其他的版本中可能不适用,但对于解决编译过程中遇到的错误或许也能提供一些帮助。

阅读剩下更多

默认配图
知尽Java第几重

JAVA中BIO、NIO、AIO的分析理解

理解 IO

输入输出(IO)是指计算机同任何外部设备之间的数据传递。常见的输入输出设备有文件、键盘、打印机、屏幕等。数据可以按记录(或称数据块)的方式传递,也可以 流的方式传递 。

所谓记录,是指有着内部结构的数据块。记录内部除了有需要处理的实际数据之外,还可能包含附加信息,这些附加信息通常是对本记录数据的描述。

同步和异步

同步

  • 概念:指的是用户进程触发 IO 操作并等待或者轮询的去查看 IO 操作是否就绪。
  • 例子:每天要吃饭,下班后自己跑去菜市场买菜,回来在做饭,所有的事情都是自己一件接着一件执行的。

阅读剩下更多

默认配图
一入JVM深似海

类文件结构及类加载机制

我们都知道 JVM 并不能直接运行 Java 源文件,而是开发者通过 JDK 自带的工具命令 javac 将 Java 源文件编译成 class 字节码文件,也就是二进制文件,然后供JVM加载并使用。

尽管我们知道JVM 加载的是字节码,但我们对字节码有多少了解呢?本篇文章我们通过创建一个简单的User类对其编译一探字节码的究竟。此外,有些面试题中出现诸如String能存储多长的字符串,数组的最大维度是多少,一个方法最多能有多少个参数,一个类最多能定义多少个常量多少个变量多少个方法等等,我们也会在这边文章中会一一介绍。

阅读剩下更多

默认配图
莫愁逆向无知己

基于微信UI做群发机器人(零)

设计思想

从本质上来说这个项目不算机器人,因目前不能提供自动回复、自动对话的业务场景。

需求说明

公司大部分业务都是ToB的,运营管理着好几百个微信群,产品跟运营私交甚好,因此,在产品的耳边吹了一口气,“我们做一个微信机器人,帮助我们管理微信群吧,最好加上群聊,也可回答一些客户的问题”。产品听了,觉得这事可以有,想想,快到年底了,KPI考核也没什么补救,说不定这也就是一部分。

时间倒退到2017年8月底,产品开始设计一款名叫“微信机器人”的项目。嗯,看名字就觉得很高大上。BTW,设计稿呢???没有,就是口头产品,没进入评审环境,直接告诉我我们需要一款这样的…,能干…最好…的产品,Balabala说了一堆,其实就是做一个能够收发群消息,能够管理群成员,能够干微信能干的事情,最后,这些要干的事情,必须在我们的运营管理后台可操作,消息发送状态可查看

这项殊荣交给我了,限定要在9月初上线。

阅读剩下更多

默认配图
知尽Java第几重

Sikuli的App类中文手册

应用类(App)

class App

使用类或者实例的方法

一般而言,你可以选择使用类的方法(e.g. App.open("application-identifier"))或者先创建一个类的实例接着使用该实例的方法(e.g. 先myApp = App("application-identifier") ,之后 myApp.open())。(对于二者)没有一个优先级的用法推荐,唯一真正的不同之处在于,当使用实例方法时,可能会节省一些资源,因为使用类的方法可能会产生更多的中间对象。因此,如果您频繁地使用相同的应用或者窗口,使用实例方法也许更合适(注:transparent的意思为”透明的;显然的;坦率的;易懂的”,但译者认为此处理解为“合适的”最好)。

如何创建一个应用程序实例

基本的选择只是说,创建应用someApp = App("some-app-identifier")之后,你有你的应用实例,以后你可以一起使用实例的方法,而不必再次指定字符串。

通常,所有类的方法都会返回一个应用实例,您可以将其保存在一个变量中,以便之后在您的脚本中使用它。

在实例创建时,使用给定的文本扫描进程列表以查找可执行文件的名称。如果找到了,应用程序将被初始化为响应的信息(PID,可执行文件,主窗口最前面的窗口标题)。所以,你可以直接访问此应用实例,查看应用是否运行(isRunning()),是否有窗口(hasWindow()),获取主窗口的标题(getWindow())以及获取进程ID(PID)(getPID)。

阅读剩下更多

默认配图
知尽Java第几重

Java日志Log4j或者Logback的NDC和MDC功能

NDC和MDC的区别

Java中使用的日志的实现框架有很多种,常用的log4j和logback以及java.util.logging,而log4j是apache实现的一个开源日志组件(Wrapped implementations),logback是slf4j的原生实现(Native implementations)。需要说明的slf4j是Java简单日志的门面(The Simple Logging Facade for Java),如果使用slf4j日志门面,必须要用到slf4j-api,而logback是直接实现的,所以不需要其他额外的转换以及转换带来的消耗,而slf4j要调用log4j的实现,就需要一个适配层,将log4j的实现适配到slf4j-api可调用的模式。

说完基本的日志框架的区别之后,我们再看看NDC和MDC。

不管是log4j还是logback,打印的日志要能体现出问题的所在,能够快速的定位到问题的症结,就必须携带上下文信息(context information),那么其存储该信息的两个重要的类就是NDC(Nested Diagnostic Context)和MDC(Mapped Diagnositc Context)。

阅读剩下更多

默认配图
Shiro框架系列

二、ShiroFilter的配置

引言

上一节《DelegatingProxyFilter的作用》中详细讲解了DelegatingProxyFilter,并且引出了shiro。

Shiro是Java的一个安全框架。因为其较之于spring-security配置灵活,使用方便,越来越受到程序猿的青睐。目前,Shiro应用在各大公司的OA系统、CRM系统等具有资源权限管理的系统中。

Shiro的相关概念,请参考开涛的跟我学Shiro的第一章《Shiro简介》,如果要做相关开发,请仔细学习。

阅读剩下更多

默认配图
Spring技术栈

一、DelegatingProxyFilter的作用

人人网开源了一款基于Mybatis、Springmvc、Shiro框架的一套权限管理系统,项目的地址在此:【[SpringMVC版](https://gitee.com/babaio/renren-security)】,【[SpringBoot版](https://gitee.com/babaio/renren-security/tree/renren-security-boot)】。既然是web应用,就先从web配置开始学习。 renren-security是基于shiro框架做的权限管理。shiro和spring-security都能实现权限粒度的管控,只不过shiro提供了一套Java api,spring-security需要和springmvc整合在一起。

阅读剩下更多

默认配图
Spring技术栈

springboot(一):入门篇

【说明】
本文大部分类容来源于【纯洁的微笑】,本人只是添加了部分不同于他的。

什么是spring boot

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。springboot的口号是约定大于配置,也就是说大部分的配置都死约定好了的,springboot做了默认配置。

使用spring boot有什么好处

其实就是简单、快速、方便!平时如果我们需要搭建一个spring web项目的时候需要怎么做呢?

  • 1)配置web.xml,加载spring和spring mvc
  • 2)配置数据库连接、配置spring事务
  • 3)配置加载配置文件的读取,开启注解
  • 4)配置日志文件
  • n) 配置完成之后部署tomcat 调试

  • 现在非常流行微服务,如果我这个项目仅仅只是需要发送一个邮件,如果我的项目仅仅是生产一个积分;我都需要这样折腾一遍!

但是如果使用spring boot呢?
很简单,我仅仅只需要非常少的几个配置就可以迅速方便的搭建起来一套web项目或者是构建一个微服务!

阅读剩下更多

默认配图
返回顶部