首页 文章 精选 留言 我的

精选列表

搜索[java],共10000篇文章
优秀的个人博客,低调大师

2018最新java版区块链开发视频教程免费下载

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xmt1139057136/article/details/82936024 连马云都说过,未来的方向只有AI(人工智能)和区块链。可见区块链的重要性,所以现在各招聘网站都对区块链方向有大量的需求。目前很多培训机构也都开始主打区块链培训了,乘着国庆,我给大家免费分享一套区块链开发视频教程给大家,希望能帮助到大家! 这套视频共有40多个章节,我已分享到公众号里。 要获取这套视频很简单,只需扫描下方微信二维码,关注业余草微信公众号,回复“区块链”关键字进行免费下载! 感谢您的关注!可加QQ1群:135430763,QQ2群:454796847,QQ3群:187424846。QQ群进群密码:xttblog,想加微信群的朋友,可以微信搜索:xmtxtt,备注:“xttblog”,添加助理微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

优秀的个人博客,低调大师

给女友讲讲设计模式——适配器模式(JAVA实例)5

前言 有这样一个人,看到别人一个个开餐馆赚了好多钱,于是自己也很想在餐饮业这方面大展拳脚,他从别人那里学到了他们的理念,还学习到了他们真正开店的经验。不但如此,他还引进了除了吃饭意外其他的服务,例如说提供了本该是酒吧才有的歌手驻场来提供好的就餐氛围这样的服务。正因为如此,生意做得生龙活虎。 正文 说起适配器模式,主要可以分为三种 : “类适配” ,“对象适配” ,“接口适配”。类适配与对象适配及其相似,接口适配相对有些出入。 下面就代码进行讲解一下。 package adapter; public interface Restaurant { public void haveFood(); public void haveDrink(); } 这是一个餐厅的接口,有食物,也有饮料。 package adapter; public class RestaurantImpl implements Restaurant{ @Override public void haveFood() { System.out.println("提供各种美食"); } @Override public void haveDrink() { System.out.println("提供各种饮料"); } } 我们是实现了这个接口,让他有具体的实际意义。 package adapter; public interface Bar { public void haveSong(); } 酒吧接口,提供了一个唱歌驻唱的服务。 package adapter; public class MyRestaurantAdapter extends RestaurantImpl implements Bar{ @Override public void haveSong() { System.out.println("在餐厅同样提供酒吧的驻唱服务"); } } 用适配器创建我们自己的餐厅,这样我们既有食物,饮料,还有了酒吧所具有的驻唱功能。 package adapter; public class MainTest { public static void main(String[] args) { MyRestaurantAdapter adapter = new MyRestaurantAdapter(); adapter.haveFood(); adapter.haveDrink(); adapter.haveSong(); } } 调用一下自己创造的餐厅。 下面是对象适配器,在适配器中,把自己想要继承的方法,定义为一个变量,然后以构造函数的函数,注入进去,和刚刚类适配器大同小异。 package adapter; public class MyRestaurantAdapter2 implements Bar{ private Restaurant restaurant; public MyRestaurantAdapter2(Restaurant restaurant) { this.restaurant = restaurant; this.restaurant.haveFood(); this.restaurant.haveDrink(); } @Override public void haveSong() { System.out.println("餐厅同样可以有酒吧的相关驻唱服务"); } } package adapter; public class MainTest { public static void main(String[] args) { MyRestaurantAdapter2 adapter2 = new MyRestaurantAdapter2(new RestaurantImpl()); adapter2.haveSong(); } } 下面介绍一下接口适配器,使用接口适配器主要的原因是这样的,在一个接口中有很多方法的时候,我们想要实现它,必须得把所有的他的方法都放在自己的类中,虽然是一些空方法,不用具体的实现,但是看起来也是特别让人感觉到火大的,所以我们用了一个抽象类作为了一个适配器,下面来看代码。 package adapter; public interface BestRestaurant { public void havebeef(); public void haveIceCream(); public void haveRedWine(); public void havePizza(); public void haveGooseLiver(); } 这是一个最棒的餐厅,有着各种各样的丰富料理。 package adapter; public abstract class BestRestaurantAdapter implements BestRestaurant { public void havebeef() { }; public void haveIceCream() { }; public void haveRedWine() { }; public void havePizza() { }; public void haveGooseLiver() { }; } 通过抽象类作为一个适配器,实现最好的餐厅接口。 package adapter; public class BestResaurantMy extends BestRestaurantAdapter{ @Override public void havebeef() { System.out.println("这里有牛肉"); } @Override public void haveRedWine() { System.out.println("这里有红酒"); } } 继承一下刚刚的抽象类,这样我们只需要实现自己想要的方法就可以了。不必再把那些没用的空方法一并放进来。 package adapter; public class Client { public static void main(String[] args) { BestRestaurant br =new BestResaurantMy(); br.havebeef(); br.haveRedWine(); } } 最后调用一下就大功告成了。 后记 最近公司实在是太忙,因为项目快要上线了,所以一直就耽搁没有进行更新,现在生物钟又回到正轨上了,要继续拿起书本不断进步学习,生命不息,学习不止。

优秀的个人博客,低调大师

JAVA实现调用微信js-sdk扫一扫

喜欢的朋友可以关注下。 已经很久没有给大家分享一片技术文章了,今天抽了点时间来,给大家说一说如何调用微信提供的扫一扫接口。 前提: 需要申请一个公众号:申请公众号需要的资料我就不说了,去申请微信会提示需要哪些。 准备appid(公众号的id) AppSecret (公众号的密钥) 正文: 首先,我们先来简单了解一下流程,详细的微信文档有说明。 获取Token→根据token获取Ticket→根据ticket签名→反会参数给前端→前端调起扫一扫接口 下面直接上代码 1.获取token /** * Description: 获取微信公众号token<BR> * * @author dsn * @date 2018年9月21日 上午9:53:26 * @param appid * @param secret * @return * @version 1.0 */ public static String getAccessToken(String appid, String secret) { String token = ""; String token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret; JSONObject result = PayCommonUtil.httpsRequest(token_url, "POST"); if (result.get("access_token") != null) { token = result.get("access_token").toString(); } return token; } 2.获取ticket /** * Description: 获取微信ticket<BR> * * @author dsn * @date 2018年9月21日 上午9:54:03 * @param token * @return * @version 1.0 */ public static String getTicket(String token) { if ("".equalsIgnoreCase(token) || null == token) { return ""; } String ticket_url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + token + "&type=jsapi"; JSONObject result = PayCommonUtil.httpsRequest(ticket_url, "POST"); return result.get("ticket").toString(); } 3.签名 public static String getSign(String jsapi_ticket, String noncestr, Long timestamp, String url) throws NoSuchAlgorithmException { String shaStr = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + noncestr + "×tamp=" + timestamp + "&url=" + url; MessageDigest mDigest = MessageDigest.getInstance("SHA1"); byte[] result = mDigest.digest(shaStr.getBytes()); StringBuffer signature = new StringBuffer(); for (int i = 0; i < result.length; i++) { signature.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1)); } return signature.toString(); } 4.action中调用 /** * Description:微信扫一扫接口 <BR> * * @author ran.chunlin * @date 2017年4月11日 上午10:07:35 * @param request * @return * @throws Exception * @version 1.0 */ @RequestMapping(params = "method=getWechatSign", method = RequestMethod.GET) public @ResponseBody Map<String, Object> getWechatSign(HttpServletRequest request) throws Exception { /* 返回的json数据 */ Map<String, Object> jsonMap = new HashMap<>(); // 构成子数据map Map<String, Object> subJsonMap = new HashMap<>(); // 1.获取参数 String url = showNull(request.getParameter("url")); String t = showNull(request.getParameter("t")); String appId = showNull(request.getParameter("appId")); String appSecret = showNull(request.getParameter("appSecret")); if (url == null || t == null || appId == null || appSecret == null) { return json4Map(jsonMap, subJsonMap, "参数为空", STATUSCODE_FAILED_BADINPUT_PARAM); } else { String accessToken = WeiXinUtils.getAccessToken(appId, appSecret); String ticket = WeiXinUtils.getTicket(accessToken); Long timestamp = System.currentTimeMillis() / 1000; String nonceStr = RandomStringUtils.randomAlphanumeric(16); String sign = getSign(ticket, nonceStr, timestamp, url); subJsonMap.put("result", "1"); subJsonMap.put("timestamp", timestamp); subJsonMap.put("nonceStr", nonceStr); subJsonMap.put("appId", appId); subJsonMap.put("sign", sign); } return json4Map(jsonMap, subJsonMap, "获取sign成功", STATUSCODE_SUCCESS); } 5.前端代码 // 扫一扫 进入页面时去调用 $.ajax({ type : 'GET', url : "你action的url", data : { appId : "", appSecret : "", url : location.href, t : Math.random() }, success : function(json) { if (json.data.result == "1") { wxConfig(json.data.timestamp, json.data.nonceStr, json.data.sign, json.data.appId); } } }); function wxConfig(_timestamp, _nonceStr, _signature, _appId) { wx.config({ // debug : false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId : _appId, // 必填,公众号的唯一标识 timestamp : _timestamp, // 必填,生成签名的时间戳 nonceStr : _nonceStr, // 必填,生成签名的随机串 signature : _signature,// 必填,签名,见附录1 jsApiList : [ 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'scanQRCode' ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); } //扫码调用 function scanCode() { wx.scanQRCode({ needResult : 1, scanType : [ "qrCode", "barCode" ], success : function(res) { console.log(res) //扫描返回的数据 var result = res.resultStr; }, fail : function(res) { layer.open({ content : '请稍后再试', skin : 'msg', time : 2 //2秒后自动关闭 }); } }); } 其实就是这么的简单 这里需要提醒大家 页面一定要引入 <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> 不然会调用不了微信的函数 如有需要可以加我Q群【308742428】大家一起讨论技术。 后面会不定时为大家更新文章,敬请期待。 喜欢的朋友可以关注下。

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册