JAVA开源B2C系统
前言最近有人想面向境外销售商品,但是又不想依托于亚马逊这些平台,于是找我来帮忙想弄个B2C系统。因为刚开始只是打算试试水,也就不打算投入多少成本了。所以这边就考虑使用开源的B2C系统来直接使用了。
B2C开源系统选择由于自己的主语言是JAVA,平时工作也都是用的JAVA。考虑到以后需要对系统进行二开、部署维护等。所以一开始就直接查找JAVA 的开源系统了,并且将是JAVA语言开发的作为了第一个必要选项。结果却是证明了自己的愚蠢啊。
在这里需要说明在选择一个开源系统作为线上系统实际部署应用的时候,我们应该主要考虑这几项:
项目的成熟程度
项目的生态环境
项目的二开友好程度
自己对项目的熟悉程度
就我自己来说,上面几点的重要程度应该是从高到低的。
几款开源的JAVA商店系统刚开始的时候查找开源商店系统没有什么头绪,都是直接通过关键字查找 ,什么 java Open source shop 、 java 开源商店 、 JAVA 开源购物车 等。查找起来特别费时,非常的浪费时间。特别是国内的,很多打着开源的幌子,实际上公布出来来的代码都是缺斤少两的,或者根本就没有把代码开源出来,简 ...
Feign基础教程
简介Feign使得 Java HTTP 客户端编写更方便。Feign 灵感来源于Retrofit、JAXRS-2.0和WebSocket。Feign 最初是为了降低统一绑定Denominator 到 HTTP API 的复杂度,不区分是否支持 Restful。
Maven依赖:
1234567<!-- https://mvnrepository.com/artifact/com.netflix.feign/feign-core --><dependency> <groupId>com.netflix.feign</groupId> <artifactId>feign-core</artifactId> <version>8.18.0</version> <scope>runtime</scope></dependency>
为什么选择Feign而不是其他你可以使用 Jersey 和 CXF 这些来写一个 Rest 或 SOAP ...
阿里云ECS搭建JAVA WEB环境
购买配置阿里云服务器ECS阿里云服务器ECS
云服务器(Elastic Compute Service,简称 ECS)是一种简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本,使您更专注于核心业务创新。
选购服务器从产品主页直接进入到选购页面就可以了。选择自己需要的服务器就好。主要有如下可选项:
计费方式
地域(服务器所在地域,考虑翻墙的请选择境外的)
网络(这个比较坑,有经典网络和专有网络两种,默认的是专有网络,经典网络和专有网络部互通。 如果自己只是弄一个服务器玩玩的话选经典网络就好)
实例(服务器的硬件配置)
带宽
镜像(服务器的操作系统)
存储(默认已经有40G硬盘,不够可可以额外购买)
安全设置(主要设置SSH远程连接时的用户密码)
服务器网络设置购买成功后进入控制台可以看到自己服务器的基本信息和可操作项,主要有以下两点需要注意:
分配的公网IP和私网IP (随后需要使用公网IP远程SSH到服务器)
右侧的功能选项(管理 远程连接等)
当我们直接使用公网IP访问我们服务器的时候发现是无法连通的。通过teln ...
HashMap源码解析
前言其实之前也有看过HashMap的源码,觉得自己对其中的实现原理什么的都还算是比较了解了。其实当初看的时候就没有看的多仔细,只是应付面试的问题罢了。
这不,最近有人提出个问题自救就没法回答了。
问: 我们知道,初始化 HashMap 的时候,可以使用默认的构造函数,也可以使用一个带 initialCapacity 参数的构造函数用于构造一个已知大小的实例。这样可以减少扩容时的数据转移等操作从而提高性能,那么已知需要存1000个数据,初始的 initialCapacity 应该是多少?
听到这问题的时候,脑海中大致知道有个扩容之类的与之相关,但是具体的却是不记得了,很是尴尬。所以接下来就回去再次详细的看了看 HashMap 的源码,这里作为记录,在下面的内容中会涉及解惑该问题。
注: 此篇文章的分析是基于JDK7的
HashMap 源码解析在解析前我们简单说下 HashMap 的大致实现原理。 HashMap 内部是由 数组+链表 的数据结构组成的,数组的大小为capacity(默认初始大小为16,可以通过构造函数传入参数 initialCapacity 来改变)。put ...
JAVA并发编程: CAS和AQS
说起JAVA并发编程,就不得不聊聊CAS(Compare And Swap)和AQS了(AbstractQueuedSynchronizer)。
CAS(Compare And Swap)什么是CAS
CAS(Compare And Swap),即比较并交换。是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数——内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。无论哪种情况,它都会在CAS指令之前返回该位置的值。CAS有效地说明了“我认为位置V应该包含值A;如果包含该值,则将B放到这个位置;否则,不要更改该位置,只告诉我这个位置现在的值即可。
在JAVA中,sun.misc.Unsafe 类提供了硬件级别的原子操作来实现这个CAS。 java.util.concurrent 包下的大量类都使用了这个 Unsafe.java 类的CAS操作。至于 Unsafe.java 的具体实现这里就不讨论了。
CAS典型应用java.util.concurrent.atomi ...
Lock 和 synchronized
前言Java多线程编程中,保证线程安全通常会使用到synchronized和Lock。那么合适该使用synchronized,什么时候该使用Lock呢。这个就需要我们对synchronized和Lock有个清晰的了解。
Lock和synchronizedsynchronized 是JAVA提供的强制原子性的内置锁机制。一个synchronized有两部分:锁对象的引用 (synchronized 方法的锁,就是该方法所在对象本身),以及这个锁保护的代码块。每个Java对象都可以作为一个用于同步的锁的角色,这些内置的锁被成为内部锁,线程进入 synchronized 块之前会自动获得锁,退出、报错异常、时会释放锁。内部锁是一种互斥锁,这就是说,至多只有一个线程可以获得锁,所以被 synchronized 声明的方法或代码块至多只有一个线程可以进入。从而保证了线程安全。
大致有如下用法:
123456789//作用于方法public synchronized void synchronizedMethod(){ //do something}// 作用与代码块s ...
利用Github Pages和Hexo搭建个人博客
Github Pages和Hexo介绍Github Pages 是 Github 推出的一个福利。可以在上面构建个人页面。**Hexo** 就是一个快速、简洁且高效的博客框架(官网上是这么说的,hhh),并且支持一键部署到github。可以用它来构建自己的个人博客,当hexo遇到Github pages时,我们就不需要自己的一个服务器就可以搭建一个个人博客网站了。下面开始讲搭建过程。
创建自己的Github Pages首先需要在Github上创建自己的静态页面。这个需要使用到Github Pages服务,需要有Github账号才行。如果没有账号的自行去官网注册一个。这里就不多说了。
如何创建自己的静态页面,总的来说就是(假设你使用过GitHub):
创建一个和Repository 并将其命名为 username.github.io其中 username 是你自己的github用户名。
在该Repository下创建静态页面(eg. index.html)1234567891011<!DOCTYPE html><html lang="en"& ...
股票相关术语
市盈率(PE):
市盈率是上市公司股价与每股收益(年)的比值。即:市盈率=股价/每股收益(年)。明显地,这是一个衡量上市公司股票的价格与价值的比例指标。可以简单地认为,市盈率高的股票,其价格与价值的背离程度就越高。也就是说市盈率越低,其股票越具有投资价值。
空头行情/多头行情:
股价长期保持上涨势头的股票行情称为多头行情。多头行情股价变化的主要特征是一连串的大涨小跌。
股价长期呈下跌趋势的股票行情称为空头行情,空头行情股价变化的特征是一连串的大跌小涨。
多头是指投资者对股市看好,预计股价将会看涨,于是趁低价时买进股票,待股票上涨至某一价位时再卖出,以获取差额收益。
空头是投资者和股票商认为现时股价虽然较高,对股市前景看坏,预计股价将会下跌,于是把借来的股票及时卖出,待股价跌至某一价位时再买进,以获取差额收益。采用这种先卖出后买进、从中赚取差价的交易方式称为空头。
未完待续
MySql 5.7.18免安装版安装使用
由于公司对电脑安全做了较多的限制。自己无法使用MySql的msi文件来安装Mysql。于是下了个mysql的zip压缩包来使用。
Mysql下载地址,我下的是版本为mysql-5.7.18-winx64.zip
下载后解压到任意目录,进入到解压后的mysql-5.7.18-winx64。
按照以往的经验。首先进入到bin目录下运行mysqld.exe来初始化mysql。
1D:\Dev\MySql\mysql-5.7.18-winx64\bin>mysqld.exe --initialize
不幸的是,失败了。错误日志如下:
12345D:\Dev\MySql\mysql-5.7.18-winx64\bin>mysqld.exemysqld: Could not create or access the registry key needed for the MySQL application to log to the Windows EventLog.Run the application with sufficient privileges once to creat ...
聊聊缓存
前言如今开发一定规模的web系统时一般会在项目中加入缓存模块块来缓存数据以减轻数据库的压力。从而提高系统的访问速度。最近的面试过程中也有不少是缓存相关的问题,那么下面就来聊下期间被问到的一个缓存更新策略的问题。
我们以Redis作为缓存作为例子。那么问题来了,当缓存的数据需要更新时该如何做才能确保在保证一致性(没有脏数据)的情况下还能有不错的并发量。
面试过程通常我们项目中和缓存交道的架构图大体如下:
面试过程中,由于我说自己使用过redis来缓存系统中的一些经常读取但是比较少修改的数据,比如说游戏配置,活动礼包配置,玩家所玩过的游戏这些。
于是面试官遍提出了如下的问题:
你在更新缓存的时候是使用的什么策略
其实工作中并没有怎么考虑这些问题,就直接回答:
这么更新啊,成功写数据库之后再更新Redis中的数据就好啦
接着面试官深入该问题,提出
如果此时写数据库成功了,但是Redis中的数据还没更新,那么就会造成数据不一致,这问题怎么解决?
然后我就想啊:
那我们在更新数据库的数据之前把Redis中对应的缓存数据删除就可以了
面试官接着问:
那如果在删除了对应 ...