微信支付后台开发步骤

1、根据调用API必须遵循的协议规则,提交方式均采用post,提交和返回数据格式都为XML,根节点名为xml,字符统一采用UTF-8编码,签名算法使用MD5。

2、本次后台代码使用Java语言编写。由于微信支付要求传输方式必须采用https,而且实验室阿里云上已为Nginx服务器配置证书,因此只需配置一下/etc/nginx/sites-enabled/itest文件,在server参数下添加如下代码,让Nginx支持将.do和.jsp请求转发到后端Tomcat服务器上即可

阅读更多

MongoDB启用认证权限-记一次公网数据库被删经历

就在前几天,实验室挂在阿里云上的MongoDB被攻击了,数据全部被删除,只留下了一个叫 WARNING 的数据库,其中表里面的内容如下:

阅读更多

Java虚拟机运行时内存结构

运行时数据区

Java虚拟机在执行Java程序的过程中,会把它所管理的内存划分为若干个不同的数据区,这些区域都有自己各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进行的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。

阅读更多

JVM性能监控与故障处理工具

HotSpot虚拟机提供了许多虚拟机运行时调试工具,方便开发人员在应用运行时对虚拟机和应用性能进行监控和优化。

jps:JVM Process Status Tool

显示指定系统内所有的HotSpot 虚拟机进程。并显示虚拟机执行主类(Main Class, main()函数所在的类)的名称,以及这些进程的本地虚拟机的唯一ID ( LVMID, Local Virtual Machine Identifier)。

阅读更多

机器学习经典算法-朴素贝叶斯(Naive Bayes)及其应用

分类问题综述

在分类(classification)问题中,常常需要把一个事物分到某个类别。一个事物具有很多属性,把它的众多属性看做一个向量,即X=(x1,x2,x3,…,xn),用x这个向量来代表这个事物。类别也是有很多种,用集合 Y={y1,y2,…ym} 表示。如果x属于y1类别,就可以给x打上y1标签,意思是说x属于y1类别。这就是所谓的分类(Classification)。

阅读更多

使用MQTT协议+Redis缓存实现APP登录顶号功能

大家在玩游戏或使用QQ等IM工具时,想必都见到过弹出被顶号或者是您的账号于xx时间在另一设备登录,您已被迫下线这样的提示,然后不得不点退出按钮退出整个应用,或者点击重新登录把另一设备再顶下来。最近我参与的一个项目,正好就有这样的需求,而且,由于我们项目中已经使用到了MQTT协议进行消息推送,实现远程控制,后台用Java实现,缓存使用了Redis,因此,正好可以利用现有的技术来实现这个功能。

阅读更多

AppRTC服务器搭建

WebRTC,是Web Real-Time Communication的缩写,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术,于2011年5月开放了工程的源代码,在行业内得到了广泛的支持和应用,成为下一代视频通话的标准。

这篇文章要搭建的,是基于webrtc的apprtc示例,GitHub地址:https://github.com/webrtc/apprtc 里面有讲一些安装步骤,但是不够仔细,楼主试了几天,填了很多坑之后,终于将环境搭起来了,过程比较艰辛,要安装的东西和注意的细节太多,值得写篇文章来记录一下~

阅读更多

VMWare虚拟机网络配置

目前常用的虚拟机软件有VMware Workstation和Virtual Box等。在使用虚拟机软件的时候,初学者都会遇到很多问题,而VMware的网络连接问题可能是遇到最多的问题之一。VMware提供了三种网络工作模式,分别是是Bridged(桥接模式)、NAT(网络地址转换模式)和Host-Only(主机模式)。要想在网络管理和维护中合理应用它们,首先应该了解一下这三种工作模式。

阅读更多

Android WebView 页面性能监控实现

在上一篇 Android WebView 开发使用笔记 中记录了WebView的一些使用方法以及注意事项,在这一篇,我将对WebView中页面资源加载以及JS错误的监控实现进行详细的介绍。

阅读更多

Android WebView 开发使用笔记

最近在做的一个项目,涉及到关于WebView的监控,因此花了些时间查阅资料,并通过在页面加载完成后插入JS代码成功监控到了所需的信息,目前功能已全部完成,因此打算写下来做个总结,这一篇先记录一下对WebView的基本使用以及注意事项,下一篇详细讲述一下对WebView监控的实现。

基本使用

主要就是开启Javascript支持,设置WebViewClient和WebChromeClient等操作,下面代码中都有注释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
webview = (WebView) findViewById(R.id.webview);
WebSettings setting = webview.getSettings();
setting.setJavaScriptEnabled(true);// 如果访问的页面中有JavaScript,或者需要通过js和页面交互,则必须设置支持Javascript
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// 重写这个方法用来指定url,比如只有特定的url才在webview里打开,否则还是启动浏览器去打开,返回true或者false
return false;
}
// 如果要显示进度条,可以通过onPageStarted和onPageFinished这两个方法实现,在onPageFinished结束即可
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});
webview.setWebChromeClient(new WebChromeClient() {
// 可以通过拦截JS中的如下3个提示方法,也就是几种样式的对话框(在JS中有三个常用的对话框方法alert、comfirm、prompt),
// 得到他们的消息内容,然后解析即可。这样可达到修改弹出框样式与app风格统一,或者与本地代码进行交互的目的,
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
return super.onJsAlert(view, url, message, result);
}
@Override
public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
return super.onJsConfirm(view, url, message, result);
}
@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
return super.onJsPrompt(view, url, message, defaultValue, result);
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
}
});
//webView.loadUrl(file:///android_asset/test.html);//如果是加载本地文件则用这种写法
webview.loadUrl(url); //最后调用loadUrl加载网页

阅读更多