raw.githubusercontent.com port
Failed to connect to raw.githubusercontent.com:443我们在执行一些通过raw.githubusercontent.com进行安装的工具时候,总是会出现如下问题:
1curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
这里将提供两种解决方案,方案如下:
如果你在使用科学上网如果你是科学上网,则执行下面命令:
12# 7890 和 789 需要换成你自己的端口export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:789
再次执行之前连接 http://raw.githubusercontent.com:443 被拒绝的命令应该就成功了。
其他方式如果没有科学上网,则可以通过修改hosts ...
Java之动态代理
Java之动态代理动态代理是一种设计模式,通过对原对象进行包装生成代理对象,可以实现对原来对象的方法增强。比如spring的声明式事务就是使用的动态代理模式实现的。下面我们将会了解到:
动态代理的实现方式。
jdk和cglib动态代理类的生成源码分析。
jdk和cglib动态代理类的执行分析。
动态代理类的实现方式定义一个接口:
123public interface ComputerIntf { int add(int i);}
定义一个实现类(目标类):
123456public class Computer implements ComputerIntf { @Override public int add(int i) { return i + 1; }}
我们下面通过两种方式实现上面add方法在执行计算前输出入参日志。
jdk动态代理通过jdk自带的api来实现动态代理:
首先创建一个InvocationHandler的实现类,重写invoke方法,在方法调用前打印日志,增 ...
VirtualBox网络设置实践
VirtualBox网络设置实践
需求:使用virtualBox安装linux虚拟机做实验,需要linux可以访问外网(用来下载安装软件等),同时也需要和物理机互通,又要保证ip不变(不用每次ssh时候查看ip)。
实现思路
首先实现虚拟机可以访问外网,可以通过设置【桥接网卡】,物理机和虚拟机在同一个网络,具备物理机同样的网络连通性,但是当换办公场地时候ip会变。
为了实现ip不变,可以增加一个【仅主机(Host-Only)网络】,则物理机会创建个网络共享,多个虚拟机可以互联,将虚拟机设置为固定ip,ssh就不用更换ip。
设置虚拟机网卡配置,虚拟主机设为静态ip,桥接网卡设置为dhcp,两个网卡设为开机启动。通过以上两个网卡来实现我们的需求,下面将介绍如何配置。配置方法桥接网卡配置这个比较简单,直接设置》网络》桥接网卡 即可。仅主机(Host-Only)网络配置添加主机共享网络创建主机共享网络,使用默认的ip配置即可设置第二个网卡,选择配置好的主机共享网络配置虚拟机网卡查看网卡:1234567891011121314151617181920[root@vworld network- ...
JSON入参格式错误打印日志
JSON入参格式错误打印日志最近接了个项目,其中涉及到一个很大的数据表单,系统是前后端分离的,在实际开发调试中老是出现前端传入JSON数据不能被后端正常解析,这种问题在调试期间是可以通过F12得到入参数据,然后对入参数据进行格式分析即可。但是现在线上也偶尔会出现以下类似错误(当然这个可以看出来是json未正常结束,还有其他错误就不能直接用来排查问题):
123456789101112131415161718192021ERROR | 42907 | http-nio-8051-exec-2 | com.mhc.framework.common.exception.handler.RestExceptionHandler | [RestExceptionHandler.java:46] | com.alibaba.fastjson.JSONException: not close json text, token : } at com.alibaba.fastjson.parser.DefaultJSONParser.close(DefaultJSONParser.java:1 ...
Spring事物深入研究
Spring事务是如何实现的事务类的增强Spring的事务是通对目标类生成增强后的代理类,然后自动在执行目标方法前开启事务,目标方法后关闭事务等。下面是生成代理类的增强拦截器:
1234567891011121314151617public class TransactionInterceptor extends TransactionAspectSupport implements MethodInterceptor, Serializable { @Override //实现了MethodInterceptor的invoke方法 public Object invoke(final MethodInvocation invocation) throws Throwable { //获取目标类 Class<?> targetClass = (invocation.getThis() != null ? AopUtils.getTargetClass(in ...
Mybatis源码分析
概要本文通过通过jdbc到mybatis查询数据库代码来分析mybatis的优势,同时进一步分析mybatis的源码,分析mybatis的整体架构设计,最后再对mybatis的缓存进行剖析。
JDBC与mybatis下面介绍jdbc和mybatis操作数据库的方式。
jdbc访问数据库通过jdbc直接操作数据库:
1234567891011121314151617181920212223242526@Testpublic void jdbcTest() throws Exception{ // 1.获取链接 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_db", "root", "root"); // 2.准备会话 PreparedStatement statement = con ...
Java之线程池分析
java线程池ThreadPoolExecutor原理线程池构造器的每个参数含义123456789101112131415161718192021222324public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { if (corePoolSize < 0 || maximumPoolSize < ...
Java之Bigdecimal精度引发的问题
BigDecimal精度问题背景案例
有一次维护老系统碰到这样一个问题,给定一批车总放款金额,每辆车的实际价格(整数),让根据实际价格的比例进行计算每辆车的放款金额(整数)。
1234解决方案:1.循环每辆车2.前n-1辆车的放款金额=总放款金额*当前车的实际价格/总实际价格;3.最后一辆车放款金额=总放款金额-(n-1)车的总放款金额;
经过几次测试发现计算没有问题,就发布上线了,安全运行了一百多天,直到有一天出现了最后一辆的放款金额为负数,一个精度问题就发生了(突然想到墨菲定律)!
通过查看日志和数据的模拟,发现是一个四舍五入的问题,当实际价格/总实际价格的时候,如果结果是0.106经过四舍五入为0.11,这样前面每辆车就会多分配一些放款金额,最终导致(n-1)辆车总放款金额大于给定的总放款金额。
12最终通过配置BigDecimal的RoundMode,将四舍五入改为了舍去,这样保证n-1辆车都不会出现多算的情况,从而解决问题。 想这种问题在实际开发中很难去发现问题,因此我们用BigDecimal一定要清楚他的API,从而避免不适当的使用。
...
Java之编译器
写过规则引擎的同学都知道drools语言,我们都通过一个drools容器来加载并执行drools写的各种规则,也玩过通过Java的脚本引擎执行过Javascript代码.这些动态加载并运行代码主要是用于编写不同规则,而非在代码中写满各种ifelse判断.有的开发同学可能会想,Java语言可以作为想动态语言一样使用吗?答案是可以的,下面我们就开始!
简单实现sun公司在jdk1.6后就正式发布了关于Java编译器的API,下面我们直接看一个简单的例子:
12345678910@Testpublic void simpleCode() throws Exception { JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler(); int run = javaCompiler.run(null, null, null, "file/SimpleBean.java"); if (run == 0) { ...
Java之线程分析
java线程线程是操作系统能够进行运算调度的最小单位,它被包含在进程内共享进程范围内的资源(例如内存句柄和文件句柄),是进程中的实际运作单位,每个线程都有自己的程序计数器(program counter)、栈及局部变量等。我们说的java线程就是jvm程序中执行的线程。
java线程的创建Java线程有两个创建方式,可以通过继承Thread,重写run方法来创建。也可以通过实现runnable接口作为构造参数来创建线程。
参数简介:
ThreadGroup g 线程组,线程需要加到线程组中,方便线程的维护,线程的线程组默认是当前线程的线程组。
Runnable target 可执行目标,指线程开启后要执行的任务。
String name 线程的名称
long stackSize 线程栈期望的大小,默认0 忽略大小,可通过Xss参数配置,线程栈的大小影响递归的深度,线程栈越大递归的深度越大。栈大小默认为1024k,可以通过:-XX:+PrintFlagsFinal 打印ThreadStackSize。
AccessControlContext acc 线程的上下文访问控制 默认null ...