大师网-带你快速走向大师之路 解决你在学习过程中的疑惑,带你快速进入大师之门。节省时间,提升效率

Electron实现跨平台全能视频播放器

} var streams = data.streams; } }) } resolve(checkResult) }); } 对于H5 标签不支持的格式,需要ffmpeg转码。 Electron应用进程分为浏览器渲染进程,和nodejs主进程。nodejs可以启动http server,这个http server使用ffmpeg实时转码,返回H5 标签可以识别的fragmeted mp4视频流。 this._videoServer = http.createServer((request, response) = { var startTime = parseInt(getParam(request.url, "startTime"));videoCodec(videoCodec) .audioCodec(audioCodec) .

electron-vue,无法改变vuex状态

electron-vue,无法改变vuex状态 一、问题描述 在electron-vue中使用vuex,调用this.$store.dispatch("changeLogin"); console.log(this.$store); console.log(this.$store.getters.isLogin); 输出结果 isLogin初始是false,调用this.$store.dispatch("changeLogin");/modules' Vue.use(Vuex) export default new Vuex.Store({ modules, plugins: [ createPersistedState(), // 注释这个插件的调用 //createSharedMutations() ], strict: process.env.NODE_ENV !

Electron 打包canvas总结

app中,修正模块的依赖路径解决。 用第二种虽然花费大量精力,但至少出来结果了。 修改编译后的canvas.node的依赖路径: #!

【翻译】如何使用Electron和PDF.js构建一个PDF查看软件

/renderer.js'); const path = require('path'); const viewerEle = document.getElementById('viewer'); }) }) 这个代码使用Electron的 dialog 模块打开一个文件选择对话框。当用户选择了一个文件,我们就创建一个iframe载入PDF.js的Viewer。我们通过查询参数告知PDF.js需要打开的文件路径。 好了! 就是这样! 执行 npm start 启动应用程序。 界面几乎没有变化, 只是WebViewer 替代了PDF.js。 你现在可以给pdf文档

netty源码分析之服务端启动

*/ public NioServerSocketChannel(ServerSocketChannel channel) { super(null, channel, SelectionKey.OP_ACCEPT);register(channel),把jdk底层的channel注册到eventLoop上的selector上; 4、doBind0(regFuture, channel, localAddress, promise),完成服务端端口的监听,并把accept事件注册到selector上; 以上就是对netty服务端启动流程进行的一个简单分析,有很多细节没有关注与深入,其中如有不足与不正确的地方还望指出与海涵。

Spring MVC 实现文件的上传和下载

//构建一个完整的文件上传对象 File uploadFile = new File(uploadDir.getAbsolutePath() + "/" + fileName); } /** * 文件下载 * 读取服务器本地文件并封装为ResponseEntity对象 * 响应客户端,写回的是一个字节数组 * @param fileName 文件名 * @return */ @GetMapping("/download") public ResponseEntity download(String fileName){ //依据文件名构建本地文件路径 String filePath = System.getProperty("user.home") + "/files/" + fileName;

SpringIOC

// 下面这些就是有关于一些属性啥的解析,如果想弄的清清楚楚,还是需要花一点时间的,这里就跳过吧,只要明白:这里为BeanDefinition设置这么多属性,都是因为之后生成Bean实例的时候,需要BeanDefinition中维护的信息,BeanDefinition是生成Bean实例的根本,很重要! parseBeanDefinitionAttributes(ele, beanName, containingBean, bd); // 为序列号指定id beanFactory.setSerializationId(getId());

剑指offer(十二)数值的整数次方

/** * @Auther: 张梦楠 * @Date: 2018/7/30 09:22 * 简书:https://www.jianshu.com/u/d611be10d1a6 * 码云:https://gitee.com/zhangqiye * @Description: */ public class Offer12 { public static void main(String[] args) { double power = new Offer12(). System.out.println(power); } public double Power(double base, int exponent) { return Math.pow(base,exponent);

SpringCloud初体验(二)Ribbon

int serverCount = allList.size(); } } if (server == null) { /* * The only time this should happen is if the server list were somehow trimmed. * This is a transient condition. Retry after yielding. */ Thread.yield(); } @Override public void initWithNiwsConfig(IClientConfig clientConfig) { // TODO Auto-generated method stub } } 在客户端启动类加入注解 image.png 指明那个微服务,使用哪一种负载均衡算法,这样即可完成客户端的负载均衡 QQ群:552113611

使用spring4和java配置方式创建Rest-Api

} @RequestMapping(method = RequestMethod.POST) @ResponseStatus(HttpStatus.CREATED) @ResponseBody public Long create(@RequestBody Foo resource) { Preconditions.checkNotNull(resource); } } 你也许注意到我使用了一个Guava格式的工具类RestPreconditions public class RestPreconditions { public static T checkFound(T resource) { if (resource == null) { throw new MyResourceNotFoundException();

spring-session-data-redis共享方案

spring-session-data-redis共享方案 可以关注我的个人博客和公众号,第一时间发布最新的干货文章 个人博客网站:www.spacedong.top 微信公众号:spacedong 正文 传统的解决方案 在传统的 HTTP session 解决方案中,session 是存储在 JVM 的堆内存中。这个 JVM 和运行代码的 JVM 是一样的。 优点: 可以快速部署在多个服务器实例中。 动态地增加或者减少服务器的实例。 缺点: 在动态增加或者减

基于MVC设计模式的企业服务总线依赖注入

基于MVC设计模式的企业服务总线依赖注入 摘 要:在本文论述了基于任务管理模型的电子学习计算系统的设计问题。电子学习计算云的主要组成部分之一是控制器作为企业服务总线(ESB)充当外部参考的绝对模型抽象。 同时,View与Model完全分离,最终实现业务数据对象的隐私和安全。支持依赖注入模式的ESB增强了协议和消息转换,服务松耦合,全球服务契约,服务实现自主性

SpringMVC集成UEditor

" + PREFIX + PATH_SEPARATOR + time + PATH_SEPARATOR + originalFilename); } catch (Exception e) { e.printStackTrace(); logger.error("upload file error", e); map.put("state", "error"); } response.setHeader("Content-Type", "application/json"); pw.write(JSON.toJSONString(map)); pw.close(); } } catch (Exception e) { e.printStackTrace(); } } /** * 图片读取 */ @RequestMapping(PREFIX + "/{time}/{path}.

[Spring] Web层AOP方式进行参数校验

[Spring] Web层AOP方式进行参数校验 Spring的AOP方式有很多用途,本次记录其使用AOP的方式处理Controller层参数校验问题 思路 使用 Hibernate validator 注解式参数校验 利用AOP织入Controller层方法,在参数校验完成后检查BindingResult里的校验结果 代码 AOP类 package com.zp.haveplace.aop;setExceptionResponse(errorInfo); } 参考 [SpringMVC] Web层注解式参数校验 优雅的SSM(Spring+SpringMVC+Mybatis)框架

Redis 和 Springboot基础整合

Redis 和 Springboot基础整合 思路 使用string存储。如果需要存储对象,建议将对象转为json字符串再存储。 环境 框架 Springboot spring-boot-starter-parent版本:1.set(key, value);put(key, hashKey, value); } /** * 将元素value从一个集合移到另一个集合 * * @param key * @param value * @param destKey * @return */ public Boolean sMove(String key, String value, String destKey) { return redisTemplate.opsForSet().score(key, value);

AspectJ在Spring中的使用

} } 这个时候method2是无法被切到的,要想被切到可以通过如下奇葩的方式: @Component public class A{ @Autowired private A a; } 在AjType中就能获取到很多其他的aspectJ所需的相关信息(除了java反射所能获取到的信息以外) /** * Return the pointcut object representing the specified pointcut declared by this type */ public Pointcut getDeclaredPointcut(String name) throws NoSuchPointcutException;

spring入门——3种注入方式

spring入门——3种注入方式 1. 属性注入 声明成员属性的注入 声明一个成员变量同时生成set方法 成员属性类型分类: 基本数据类型+String 集合(List、set、map) 自定义类 都是在 bean 节点中,以子节点方式注入 2. 构造方法注入 都是在 bean 节点中,以子节点方式注入 3.接口注入( spring 没有提供,所以可以不用研究) 一、基本类型注入 1. 创建 Test01 类,含一个基本数据类型的成员

Java8中的default方法

Java8中的default方法 在java8以后,接口中可以添加使用default或者static修饰的方法,在这里我们只讨论default方法,default修饰方法只能在接口中使用,在接口种被default标记的方法为普通方法,可以直接写方法体。 1.实现类会继承接口中的default方法 如果接口A中有default方法: public interface A { public default void a(){ System.out.println("这是A");

Kotlin的枚举

fun sayHello() { println(hello) } //3、compaion(伴生对象) 静态方法,一个类对应一个半生对象,一个半生对象也只对应一个类; companion object { fun parse(name:String):Lang { return valueOf(name.toUpperCase()) } } } //4、枚举的扩展方法 fun Lang.sayBye(){ var bye = when(this){ Lang.ENGLISH - "bye" Lang.CHINESE - "再见" } println(bye) } fun main(args:Array ) { if (args.isEmpty()) return val lang = Lang.parse(args[0]) lang.sayHello() lang.sayBye() }

从零开始学 Kotlin 之「1」基础篇

reversed() val range1 = 10 downTo 1 也可以创建给区间创建步长 val range = 1..10 step 2 for (i in range){ print("$i ") } //输出 1 3 5 7 9 灵活的 Kotlin 甚至可以直接创建字母的区间 val range3 = 'a'.png 欢迎关注本文作者,这个系列的文章会首发在这里: image 扫码关注 + 回复「kotlin」,获取我整理的最新版 Kotlin 学习视频。