英勇投弹手
IP:上海
0关注数
22粉丝数
69获得的赞
百威
Java技术经理
文华学院
本科
工作10年
编辑资料
链接我:

创作·101

全部
问答
动态
项目
学习
专栏
英勇投弹手

✨📖【超好用的安卓阅读APP——阅读】📖✨

嗨,亲爱的小伙伴们!今天要和大家分享一款我最近发现的超级实用的安卓阅读APP——阅读!这款APP简直是爱书人的福音,赶快来看看吧!💖 🌟功能亮点🌟 1️⃣ 丰富的书源导入:不论你喜欢的是经典文学、现代小说,还是各类热门连载,这里统统都有哦~ 📚✨ 3️⃣ 无广告打扰:专注于阅读,不被广告打扰,享受纯粹的书香气息!😌 4️⃣ 多种格式支持:各种文学作品都能轻松导入,让你的书单不再单一!📖💫 🔍【实际使用体验】🔍 作为一个“书虫”,我总是在寻找更好的阅读工具。试用了这个APP之后,我真的爱上了它!界面简洁明了,让我可以很快找到自己想看的书。而且导入书源超级简单,只需几步,就能将自己喜欢的文档添加进去,真的是太方便啦~ 🙌💕 📝【小贴士】📝 如果你也是个爱看小说的人,不妨试试看这款APP哦~ 绝对能提升你的阅读体验,更重要的是,你再也不用担心找不到好看的小说啦!⏳💕 📅快把《阅读》下载到你的手机上,让我们一起沉浸在文字的海洋中吧~ 🌊✈️ 👉🏻 点击下方链接立即体验吧!🎉👇🏻 https://web.ugreen.cloud/web/#/share/6058525e6ac24a989ad06e72beb26af3 提取码:5J68 #种草 #安卓阅读 #好用的APP #书虫必备 #文学之美
15
0
1
浏览量263
英勇投弹手

安卓APP推荐!跳过广告就靠它——李跳跳!** ✨🌟

🌟✨ 超级实用的安卓APP推荐!跳过广告就靠它——李跳跳! ✨🌟 大家好呀~ 今天我要给大家安利一款我最近发现的绝佳神器——李跳跳!🎉 作为一个日常使用很多APP的小白,我每次打开应用时被广告折磨得不行,真的快受不了了!😩 直到我遇到了这个神奇的APP,它让我轻松告别了那些烦人的开屏广告! 🔍 李跳跳的神奇功能: 1️⃣ 瞬间跳过广告:打开任何应用时,自动帮你一键跳过开屏广告,再也不怕浪费时间啦! 2️⃣ 简洁易用界面:操作简单,老少皆宜,刚开始使用也完全不需要担心🙌。 3️⃣ 超强兼容性:几乎支持市面上所有主流APP,无论是游戏还是社交软件,都能轻松搞定哦! 🤔 使用体验: 自从下载了李跳跳,我再也不用等待那些令人抓狂的广告了,每次都能秒进我的应用里,真的是太开心了!想想每天能省下多少时间去做自己喜欢的事情呀~💖 📲 下载方法: 在各大安卓应用商店都没有上架😂😂😂 浏览器访问下载 https://web.ugreen.cloud/web/#/share/b29c1660741944d1a0334e608681642d 提取码:3A6C 下载安装, 然后导入跳过规则即可! 下面是规则文件 https://web.ugreen.cloud/web/#/share/9cb7068945cb4d3192208f272457823e 提取码:9HFF 打开 “李跳跳”,点击 “更多”,点击右上角三个小点,点击 “导入规则”,长按输入框,选择 “粘贴”,点击“保存”。 ⚠ 建议长按输入框,以调用系统自带的粘贴功能,请不要通过第三方 App (例如:输入法、微信等)作为中介进行复制,否则可能会出现规则被截断,粘贴不全导致格式错误的问题 使用教程PDF https://web.ugreen.cloud/web/#/share/07db8a4ef13847b5b8699d28c3144dbe 提取码:E763 💬 小小总结: 如果你和我一样厌烦广告,不妨试试这款李跳跳吧,它绝对会成为你手机中的必备良品!✨ 快把这篇种草文分享给身边的小伙伴,一起享受无广告的快乐吧~ 🎈 快去体验一下吧!💖📱 #李跳跳 #告别广告 #安卓必备
11
0
1
浏览量349
英勇投弹手

KeymouseGo

功能:记录用户的鼠标键盘操作,通过触发按钮自动执行之前记录的操作,可设定执行的次数,可以理解为 精简绿色版 的 按键精灵。 用途:在进行某些操作简单、单调重复的工作时,使用本软件就可以很省力了。自己只要做一遍,然后接下来就让电脑来做。
17
0
0
浏览量50
英勇投弹手

Fay

- Fay是一个集成了语言模型和数字字符的开源数字人类框架。它为不同的应用程序提供零售、助手和代理版本,如虚拟购物指南、广播、助手、服务员、教师和基于语音或文本的移动助手。 - 开发人员可以利用该项目简单地构建各种类型的数字人或数字助理。该项目各模块之间耦合度非常低,包括声音来源、语音识别、情绪分析、NLP处理、情绪语音合成、语音输出和表情动作输出等模块。每个模块都可以轻松地更换。
16
0
0
浏览量44
英勇投弹手

miya

**模块介绍** 1. 采用alibaba nacos 注册中心与配置中心 2. miya-gataway 网关,同一处理请求,连接各个服务 3. miya-auth 授权认证中心,管理令牌 4. miya-common 通用模块 5. miya-system 系统管理(权限) 6. miya-monitor-Admin 监控admin 7. miya-pay 支付服务: 整合支付宝 + 微信 + 银行卡 支付 8. miya-order 订单服务 9. miya-warehouse 仓储服务
10
0
0
浏览量29
英勇投弹手

连续

连续第二天的测试,功能完好无 bug
14
0
1
浏览量349
英勇投弹手

第一篇

这是第一篇分享,还没想好写什么,那就先这样吧。
13
0
1
浏览量331
英勇投弹手

Java解析网页内容

Java解析网页内容 - IO 流读取网页内容 try { //创建一个URL实例 URL url = new URL("http://www.baidu.com"); StringBuffer result = new StringBuffer(); try { //通过URL的openStrean方法获取URL对象所表示的自愿字节输入流 InputStream is = url.openStream(); InputStreamReader isr = new InputStreamReader(is,"utf-8"); //为字符输入流添加缓冲 BufferedReader br = new BufferedReader(isr); //读取数据 String data = br.readLine(); //循环读取数据 while (data!=null){ //输出数据 result.append(data).append("\n"); System.out.println(data); data = br.readLine(); } br.close(); isr.close(); is.close(); } catch (IOException e) { e.printStackTrace(); } System.out.println(result.toStrin
10
0
0
浏览量265
英勇投弹手

IDEA 最新版激活

工具软件下载, 见下文图片 目前官方最新版本是2024.2.4,亲测工具支持最新版本,按教程操作即可。工具一键激活,执行完,输入文中提供的专属激活码,就可以成功激活。 1. 下载软件, 解压缩 2. 进入目录 \jihuo-tool-2024.2.1\jetbra\scripts 3. Windows系统双击执行脚本 install-current-user.vbs Mac/Linux系统执行命令 sudo bash install.sh 4. 在弹出的提示框点击确定, 等待执行结束弹出ok 5. 重启idea, Mac/Linux 重启电脑, 启动idea选择注册码激活. 6. 下载专属激活码, 专属激活码下载
2
0
3
浏览量41
英勇投弹手

JDK8 stream 流的简单使用:过滤、分组、遍历、求和、去重

JDK8 stream 流的简单使用 - 2020年4月15日 - 排序,分组,遍历,求和,去重等 *** 测试Demo 实体 package com.ezhiyang.controller; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * @author Caixiaowei * @ClassName Demo.java * @Description 测试demo * @createTime 2020年04月15日 15:01:00 */ @Data @AllArgsConstructor @NoArgsConstructor public class Demo { /** * 姓名 */ private String name; /** * 年龄 */ private Integer age; } - 使用了lombok 插件 - @Data 所有属性的get和set方法,toString(), hashCode(), equals() - @AllArgsConstructor 生成含所有属性的构造函数 - @NoArgsConstructor 生成无参构造 测试 @Test public void testStream() { List list = Lists.newArrayList(new Demo("张三", 15), new Demo("李四", 20)); System.out.println("list: " + JSONObject.toJSONString(list)); // 过滤 List collect = list.stream().filter(demo -> demo.getAge() > 15).collect(Collectors.toList()); System.out.println("过滤 age > 15 data: " + JSONObject.toJSONString(collect)); // 分组 Map> listMap = list.stream().collect(Collectors.groupingBy(demo -> demo.getName())); System.out.println("按名字分组 listMap: " + JSONObject.toJSONString(listMap)); // 遍历 list.stream().forEach(demo -> { System.out.print("name: "); System.out.println(demo.getName()); }); // 排序1 collect.clear(); collect = list.stream().sorted((d1, d2) -> { return d2.getAge().compareTo(d1.getAge()); }).collect(Collectors.toList()); System.out.println("按age倒序 collect: " + JSONObject.toJSONString(collect)); // 排序2--正序 collect.clear(); collect = list.stream() .sorted(Comparator.comparing(Demo::getAge)) .collect(Collectors.toList()); System.out.println("按age正序 collect: " + JSONObject.toJSONString(collect)); // 排序3--倒叙 collect.clear(); collect = list.stream() .sorted(Comparator.comparing(Demo::getAge).reversed()) .collect(Collectors.toList()); System.out.println("按age倒叙 collect: " + JSONObject.toJSONString(collect)); // 求和 Integer sum = list.stream().map(Demo::getAge).reduce(0, (a, b) -> a + b); System.out.println("求和 sum: " + sum); Integer sum = list.stream() .filter(e ->(e.getAge() != null)) // 过滤null, 否则报空指针 .map(Demo::getAge).reduce(0, Integer::sum); List list = Lists.newArrayList(1, null, 3); Integer reduce = list.stream() .filter(x -> x != null) // // 过滤null, 否则报空指针 .reduce(Integer::sum).get(); } - 控制台打印 list: [{"age":15,"name":"张三"},{"age":20,"name":"李四"}] 过滤 age > 15 data: [{"age":20,"name":"李四"}] 按名字分组 listMap: {"李四":[{"age":20,"name":"李四"}],"张三":[{"age":15,"name":"张三"}]} name: 张三 name: 李四 按age倒序 collect: [{"age":20,"name":"李四"},{"age":15,"name":"张三"}] 求和 sum: 35 按对象属性值去重 - 测试User对象 @Data @AllArgsConstructor public class User { private Long id; private String name; private Integer sex; private String email; } - 测试, 注意去重属性为空或者null 则会报错,先过滤空/null public static void main(String[] args) { List users = new ArrayList(); users.add(new User(1L, "张三", 1, "1111@qq.com")); users.add(new User(2L, "大漂亮", 2, "2222@qq.com")); users.add(new User(3L, "大漂亮", 1, "3333@qq.com")); if (!CollectionUtils.isEmpty(users)) { List list = users.stream() .filter(c -> !StringUtils.isEmpty(c.getName())) // 过滤null, 否则报空指针 .filter(distinctByKey(user -> user.getName())).collect(Collectors.toList()); System.out.println(list); } } /** * 按属性去重 * @param keyExtractor * @param * @return */ private static Predicate distinctByKey(Function keyExtractor) { Map seen = new ConcurrentHashMap(); return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; } 输出结果: [User(id=1, name=张三, sex=1, email=1111@qq.com), User(id=2, name=大漂亮, sex=2, email=2222@qq.com)] list 转 map Map map = list.stream().collect(Collectors.toMap(User::getId, Function.identity())); 当id出现重复的时候会报错, 1. 可以用 Collectors.toMap(keyMapper, valueMapper, mergeFunction) 的重载方法解决, 用后面的值覆盖前面的值 Map map = list.stream().collect(Collectors.toMap(User::getId, u -> u, (u1, u2) -> u1));
0
0
0
浏览量201
英勇投弹手

redisson分布式锁

maven依赖 org.redisson redisson-spring-boot-starter 3.16.0 org.glassfish jakarta.el redis 配置 spring: redis: host: 127.0.0.1 port: 6379 password: database: 0 lettuce: pool: # 最大活跃链接数 默认8 max-active: 100 # 最大空闲连接数 默认8 max-idle: 10 # 最小空闲连接数 默认0 min-idle: 5 timeout: 30000 redisson 工具类 package com.miya.demo.common.util; import com.miya.demo.common.exception.BusinessException; import lombok.extern.slf4j.Slf4j; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.concurrent.locks.Lock; /** * redisson锁工具类 * * @author Caixiaowei * @date 2022/06/21 */ @Component @Slf4j public class RedissonLockUtil { private static final long DEFAULT_WAIT_TIME = 5L; @Autowired RedissonClient redissonClient; /** * 加锁后运行 * * @param lockName 锁名称 * @param runnable Runnable */ public void runWithLock(String lockName, Runnable runnable) { Lock lock = redissonClient.getLock(lockName); runWithLock(lock, lockName, DEFAULT_WAIT_TIME, runnable, true); } /** * 加锁后运行 * * @param lockName 锁名称 * @param waitTime 等待时间,超过之后取锁失败 * @param runnable Runnable */ public void runWithLock(String lockName, Long waitTime, Runnable runnable) { Lock lock = redissonClient.getLock(lockName); runWithLock(lock, lockName, waitTime, runnable, true); } public void runWithLock(Lock lock, String lockName, Long waitTime, Runnable runnable, boolean logEnabled) { if (waitTime == null) { waitTime = DEFAULT_WAIT_TIME; } try { boolean lockOn = lock.tryLock(waitTime, java.util.concurrent.TimeUnit.SECONDS); if (lockOn) { if (logEnabled) { log.info("Try lock [{}] success.", lockName); } try { runnable.run(); } finally { lock.unlock(); } } else { throw new BusinessException(String.format("Try lock [%s] fail.", lockName)); } } catch (InterruptedException e) { if (logEnabled) { log.info("Try lock [{}] fail with exception.", lockName); } throw new BusinessException(e); } } } 应用demo public void demo() { String lockKey = "xxxx" redissonLockUtil.runWithLock(lockKey, () -> { // todo 业务逻辑 }); }
0
0
0
浏览量178
英勇投弹手

LocalDateTime 与时间戳相互转换

/** * LocalDateTime 转 时间戳(秒级别) * * @param localDateTime * @return Long * @author Caixiaowei * @updateTime 2020/9/8 10:17 */ public static Long localDateTimeToSecond(LocalDateTime localDateTime) { Long epochSecond = localDateTime.toEpochSecond(ZoneOffset.ofHours(8)); return epochSecond; } /** * LocalDateTime 转 时间戳(毫秒级别) * * @param localDateTime * @return Long * @author Caixiaowei * @updateTime 2020/9/8 10:17 */ public static Long localDateTimeToMilliseconds(LocalDateTime localDateTime) { long milliseconds = localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli(); return milliseconds; } /** * 时间戳(秒) 转 LocalDateTime * * @param second 时间戳(秒) * @return LocalDateTime * @author Caixiaowei * @updateTime 2020/9/8 10:20 */ public static LocalDateTime secondToLocalDateTime(Long second) { LocalDateTime localDateTime = LocalDateTime.ofEpochSecond(second, 0, ZoneOffset.ofHours(8)); return localDateTime; } /** * 时间戳(毫秒) 转 LocalDateTime * * @param milliseconds 时间戳(毫秒) * @return LocalDateTime * @author Caixiaowei * @updateTime 2020/9/8 10:20 */ public static LocalDateTime millisecondsToLocalDateTime(Long milliseconds) { LocalDateTime localDateTime = Instant.ofEpochMilli(milliseconds).atZone(ZoneOffset.ofHours(8)).toLocalDateTime(); return localDateTime; }
0
0
0
浏览量160
英勇投弹手

Git 仓库迁移

Git 仓库迁移 - 完整的迁移代码和提交信息等. - 先把Git仓库信息clone 到本地,然后push 到新的Git 仓库 克隆git 信息到本地 git clone --bare 原来的git地址 push Git到新仓库 - clone 下来会出现一个同名的xxx.git 文件夹 cd xxx.git git push --mirror 新的git地址
1
0
0
浏览量0
英勇投弹手

python http requests 怎么实现模拟登录,提交表单?

百度登陆的话,你这样应该是登陆失败吧。百度登陆没有那么简单的,参考网页我弄丢了好像。你要么用 Firebug 分析百度的登陆流程,要么参考这个 https://github.com/liyangjie/baidupcsapi,要么等我写博客介绍吧。注意,要登陆百度,首先要访问百度的任意页面取得一个 cookie,然后才能 POST 登陆信息的。
1
0
0
浏览量0
英勇投弹手

如何理解HTTP PATCH是非幂等的?

所谓幂等,通俗来讲就是不管执行多少次,所造成的后果都一样,比如 DELETE /my/resource/123 不管执行多少遍都是删除 123 这个资源,不会造成把 456 给删了;再如 POST /my/resource 数据 name=张三&age=60 每执行一次就加一个张三,这是非幂等的。那回到 PATCH 上,如何理解它是非幂等呢,功能是更新部分内容没错,但对它的定义这个是不全的,完整描述如下: The PATCH Method The PATCH method requests that a set of changes described in the request entity be applied to the resource identified by the Request- URI. The set of changes is represented in a format called a "patch document" identified by a media type. If the Request-URI does not point to an existing resource, the server MAY create a new resource, depending on the patch document type (whether it can logically modify a null resource) and permissions, etc. 其中有很重要一句说明,如果 URI 对应的资源不存在,服务端可以创建一个新资源。 详见 https://tools.ietf.org/html/r...
1
0
0
浏览量0
英勇投弹手

502, 503和504的区别

参考 HTTP 状态码详解与选用
1
0
0
浏览量0
英勇投弹手

前端开发, 怎样有效管理 hosts 文件的频繁修改?

神器SwitchHosts
1
0
0
浏览量0
英勇投弹手

chrome devtools 中 network 一栏中的 Finish 时间代表着什么?

DOMContentLoaded 和 Load DOMContentLoaded 和 Load 分别对应 页面 DOMContentLoaded 和 Load 事件触发的时间点,即: DOMContentLoaded:DOM树构建完成。即HTML页面由上向下解析HTML结构到末尾封闭标签</html> 。 Load:页面加载完毕。 DOM树构建完成后,继续加载html/css 中的图片资源等外部资源,加载完成后视为页面加载完毕。 DOMContentLoaded 会比 Load 时间小,两者时间差大致等于外部资源加载的时间。 Finish Finish 时间与DOMContentLoaded 和 Load 并无直接关系。 Finish 时间是页面上所有 http 请求发送到响应完成的时间,HTTP1.0/1.1 协议限定,单个域名的请求并发量是 6 个,即Finish是所有请求(不只是XHR请求,还包括DOC,img,js,css等资源的请求)在并发量为6的限制下完成的时间。 Finish 的时间比 Load 大,意味着页面有相当部分的请求量, Finish 的时间比 Load 小,意味着页面请求量很少,如果页面是只有一个 html文档请求的静态页面,Finish时间基本就等于HTML文档请求的时间。(如下图) 页面发送请求和页面解析文档结构,分属两个不同的线程, 所以 Finish 时间与DOMContentLoaded 和 Load 并无直接关系。
0
0
0
浏览量0
英勇投弹手

springboot项目中异步调用有哪几种方式

如题, 在springboot项目中, 想要异步调用其他的方法, 有那几中常见的方案
1
0
0
浏览量156
英勇投弹手

微信小程序引入其它js的方法,使用require和import有什么区别?

import和require的区别node编程中最重要的思想就是模块化,import和require都是被模块化所使用。 遵循规范require 是 AMD规范引入方式import是es6的一个语法标准,如果要兼容浏览器的话必须转化成es5的语法 调用时间require是运行时调用,所以require理论上可以运用在代码的任何地方import是编译时调用,所以必须放在文件开头 本质require是赋值过程,其实require的结果就是对象、数字、字符串、函数等,再把require的结果赋值给某个变量import是解构过程,但是目前所有的引擎都还没有实现import,我们在node中使用babel支持ES6,也仅仅是将ES6转码为ES5再执行,import语法会被转码为require
0
0
0
浏览量0
英勇投弹手

微信小程序接入地图,规划的起始点 溢出地图 ,请问如何设置才不会出现这种情况

找到方法了,没有仔细看文档,这里有说明 添加了padding之后在iphone手机上能正常显示 效果图:
0
0
0
浏览量0
英勇投弹手

nginx 如何把https 代理到 http 或者代理到本地(127.0.0.1)

已经解决。nginx配置。 server { listen 443 ssl; server_name www.****.com; ssl on; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_certificate ./https/214319235880580.pem; ssl_certificate_key ./https/214319235880580.key; location / { # root html; # index index.html index.htm; proxy_pass http://www.****.com; } location /server/ { client_max_body_size 0; proxy_connect_timeout 300s; proxy_send_timeout 900; proxy_read_timeout 900; proxy_buffer_size 32k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_redirect off; proxy_hide_header Vary; proxy_set_header Accept-Encoding ''; proxy_set_header Host $host; proxy_set_header Referer $http_referer; proxy_set_header Cookie $http_cookie; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_headers_hash_max_size 51200; proxy_headers_hash_bucket_size 6400; proxy_pass http://**.**.**.***:10103/; }
0
0
0
浏览量0
英勇投弹手

element-ui 怎么让table的列头不换行

根据el的api实现的解决方案,通过 table 的 render-header 自己手动处理label :render-header ="labelFunction" labelFunction 代码如下:global.elTableHeadFunction = function (h,l,fontSize) { let f = 14; if(typeof(fontSize) != "undefined" && fontSize != null){ f = fontSize; } //列头的实际宽度 let width = l.column.realWidth; //14:字体大小 32 是el表格的左右 padding 的合 let maxFontCount = Math.floor((width-32)/f)-1; let chars = l.column.label.split(""); var label = ""; if(maxFontCount < chars.length){ for (let i = 0; i < maxFontCount; i++){ label += chars[i]; } label +=".."; }else{ label = l.column.label; } return label; };
0
0
0
浏览量0
英勇投弹手

element-ui 的el-date-picker的format设置之后是怎么用的呢?

经测试,format只影响前端显示部分,并不会影响具体的数据。解决方案参见:https://segmentfault.com/q/10...
0
0
0
浏览量0
英勇投弹手

我能动态设置el-input的readonly吗

v-bind:readonly="readonly"可以了,这样设置就OK了
0
0
0
浏览量0
英勇投弹手

element ui 的datePicker 日期控件怎么获取到鼠标选中的时间?

额 ,是题目太简单 大神们都懒得回答吗!!
0
0
0
浏览量0
英勇投弹手

el-table中怎么动态设置选中行的背景颜色?

可以借助row-style这个方法来实现但它是作用在tr上的,首先需要把作用在td上的默认选中样式覆盖成透明色 .el-table .current-row > td { background: transparent !important; } 然后直接处理就行 参考这个例子
0
0
0
浏览量0
英勇投弹手

sql问题之where条件的优先级

还是从运算符优先级分析 not最高,其次是and,最低是or,从左到右求值,括号可改变优先级
1
0
0
浏览量0
英勇投弹手

mysql 怎么统计七天内的订单,和每日的订单啊?

七天内的订单: SELECT * FROM t_order WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= DATE(create_time); 七天内每天的订单数量,先用where条件查出七天内的订单,再用group by 对每天进行分组就行了: SELECT DATE(create_time) createtime,COUNT(*) FROM t_order WHERE DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= DATE(create_time) GROUP BY createtime;
0
0
0
浏览量0
英勇投弹手

sql怎么随机取50条数据?

select * from table order by rand() limit 50;
0
0
0
浏览量0
英勇投弹手

SQLAlchemy中模糊查询,如何like多个关键字

from sqlalchemy import and_ words = ['%三%', '%猫%'] rule = and_(*[table.u_name.like(w) for w in words]) table.query.filter(rule)
0
0
0
浏览量0
英勇投弹手

【MySQL】求一个SQL语句的优化

加个变量 where @st:=instr(...) order by @st;
0
0
0
浏览量0
英勇投弹手

为什么计算结果返回-0

你可以先看看first(a*100)/last(a)的结果,因为精度的原因它的值可能大于100
0
0
0
浏览量0
英勇投弹手

请问下dolphindb中用不同的python去run同样的脚本,里面有相同的内存表定义,会互相影响吗?

DolphinDB会话隔离,变量只在当前会话有效。
0
0
0
浏览量0
英勇投弹手

单表分类取最值的SQL如何实现效率最高?

@sub 同学先排序再 group by 的方法是可以的,这里再写一种效率更高的方法。当然对 logintime 建立索引是非常可取的一点。select userid,dat from tbl t where t.logintime = (select max(logintime) from tbl where userid = t.userid) 参考:分组计算的SQL设计探讨
0
0
0
浏览量0
英勇投弹手

怎么用自定义泛型实现下面的代码,怎么优化

谢邀先来简单粗暴的。。。。竟然想把两个方法合一,很简单,其实合一的时候,就是把公共部分用同一个东西表示,楼上已有兄弟有建议用接口,是可以的,不过竟然属性和代码结构差不多,lambda+泛型应该就可以解决 我们可以看到,那两个方法,需要归一的地方就两个 customer.getDone()和client.getDone() customer.setLocation("hongkong")和client.setLocation("hongkong") 这两个地方的对应的方法分别就应该是Predicate和Consumer了,所以我们可以建立这么一个公共方法execute public <T> void execute(T t, Predicate<T> donePredicate, Consumer<T> locationConsumer){ if(donePredicate.test(t)){ locationConsumer.accept(t); } System.out.println("result: "+ t); } 所以之前的两个方法execute_customer和execute_client就可以改为 public void execute_customer(Customer customer){ this.execute(customer, Customer::getDone, c -> c.setLocation("hongkong")); }public void execute_client(Client client){ this.execute(client, Client::getDone, c -> c.setLocation("hongkong")); } 不过不建议你这么写。。。毕竟三个参数的方法,还是很长了。。。并且Customer和Client在业务上本身可能也没有啥联系,强行整合代码,只会给以后的维护带来巨大理解成本,因为它们只是恰好有两个相同的字段,恰好他们的处理模式一样 但是我们可以换个角度思考,既然恰好它们有两个相同的字段,恰好他们处理模式一样,题主也想把他们合在一个方法里,那我们不看Customer和Client,光看属性location和isDone,光看方法里if的处理,是不是就可以说明,他们两个属性合在一起代表着一个业务,一个独立于Customer和Client的业务,它有自己的属性location和isDone,也有自己的行为,那就是if的处理,假如我们设定这么一个业务叫Location,那它一定可以写成 public class Location { private String location; private Boolean isDone; // get set toString ... public void execute(){ if(this.getDone()){ this.setLocation("hongkong"); } } } 这样的话,Customer和Client就变成 public class Customer { private Location location; }public class Client { private Location location; } 因此Order里的方法就变成 public void execute_customer(Customer customer){ customer.getLocation().execute(); }public void execute_client(Client client){ client.getLocation().execute(); } 嗯嗯,这么写,赶脚完美的雅痞,当然一切还是以实际业务来决定,我只是根据当前题主提供的信息做了一些猜想,并且写出的一种方式,实际业务可能需要调整,仅供参考,就酱 ===============================小小更新============================== 评论里题主提到如何用接口来整合,其实这也是面向接口编程的小实例哈,面向接口编程,就是需要把整个业务逻辑按照接口预定义的方式组装起来,出现接口的调用的地方,即业务抽象的点 其实和之前的抽象点差不多,还是 customer.getDone()和client.getDone() customer.setLocation("hongkong")和client.setLocation("hongkong") 这两个点之前用函数式接口表示的,此时用接口去表示,比如我们定义这样一个功能接口,就叫ILocation吧,那它可以这么表示 public interface ILocation{ Boolean getDone(); void setLocation(String location); } 为什么要这么写,是恰好,这两个方法的命名方式就是Client和Customer中的属性set,get方法,这样就减少了写实现方法的必要,之后Client和Customer就可以这么表示 @Getter @Setter public class Client implements ILocation{ private String location; private Boolean isDone; }@Getter @Setter public class Customer implements ILocation{ private String location; private Boolean isDone; } 因为set和get方法方法都已经实现了ILocation,用了lombok的注解后,代码可以啥都不加了(lombok对于默认的Boolean类型属性的get方法是getIsDone,所以若是需要的话,不要加is开头) 之后在Order那里就可以这么写一个公用方法 public void execute(ILocation location){ if(location.getDone()){ location.setLocation("hongkong"); } } 接口实现大体就是这样,仅供参考,就酱 =============================2018-11-21新问题更新===============================回答问题之前,还是要说明一点哈,任何代码的整合,要么是要在业务范围内可以合并,要么就是公共结构或工具抽取,过分强行的整合代码,只会胡乱增加业务之间的耦合,给后续扩展开发带来极大的不变 回到题主的新问题中,可以看到,这个时候已经不是简单靠传入参数就解决了(虽然也还是可以,不过那么写实在不太友好,也不利于扩展),这次我们可以从直接两段方法中简单抽象出这么一个业务过程 public <T> List<T> retrieveEntityRecords(RequestParam request) { List<String> ids = request.getId(); String location = request.getLocation(); boolean idsCk = CollectionUtils.isNotEmpty(ids) && ids.size() > 0; boolean locationCk = !StringUtils.isEmpty(location); List<T> result; try { if (idsCk) { if (locationCk) { // use [ids location] query db } else { // use [ids] query db } } else { if (locationCk) { // use [location] query db } else { // query all record in db } } } catch (Exception e) { throw new SystemException(); } return result; } 以上这段代码应该就是之前两个方法的主干代码了,也是这次要整合的业务核心代码,我们还是学上个问题一样,把公共部分抽离处理啊,其他需要具体实现的那就用接口来实现了,那具体需要实现的就是这4行注释了 // use [ids location] query db // use [ids] query db // use [location] query db // query all record in db 那所以我们定义这么一个接口ILocationIdsQuery(个人理解就是按照Location和id进行查询的公共逻辑,所以这么简单取名了),它就定义有这么4个抽象方法 public interface ILocationIdsQuery<T> { List<T> queryByIdsAndLocation(List<String> ids, String location); List<T> queryByIds(List<String> ids); List<T> queryLocation(String location); List<T> query(); } 这么定义下来,就会发现其实这和customerRepository和clientRepository的接口方法一致,如果你的customerRepository和clientRepository没有公共的父类接口,那么这个时候你可以给它们都加个一个父类接口ILocationIdsQueryExecutor,并补充他们的实现,如果本身customerRepository和clientRepository就有这么一个公共的父类接口,那就可以不用定义这么一个新接口了 有了这么一个公共接口之后,那就简单了,直接开一个工具类LocationIdsQueryUtils(保持业务的一致性,方便其他人看看代码,所以就取了这么一个名字) public class LocationIdsQueryUtils {public static <T> List<T> doQuery(ILocationIdsQuery<T> locationIdsQuery, RequestParam request){ List<String> ids = request.getId(); String location = request.getLocation(); boolean idsCk = CollectionUtils.isNotEmpty(ids) && ids.size() > 0; boolean locationCk = !StringUtils.isEmpty(location); List<T> result; try { if (idsCk) { if (locationCk) { // use [ids location] query db result = locationIdsQuery.queryByIdsAndLocation(ids, location); } else { // use [ids] query db result = locationIdsQuery.queryByIds(ids); } } else { if (locationCk) { // use [location] query db result = locationIdsQuery.queryByLocation(location); } else { // query all record in db result = locationIdsQuery.queryAll(); } } } catch (Exception e) { throw new SystemException(); } return result; } } 那有了这么一个工具类,剩下的就好写多了,直接调用工具类即可 public List<Customer> retrieveEntityRecords(RequestParam request) { List<Customer> result = LocationIdsQueryUtils.doQuery(customerRepository, request); return result; }public List retrieveEntityRecords(RequestParam request) { List result = LocationIdsQueryUtils.doQuery(clientRepository, request); return result; } 大体就是这样,仅供参考,就酱
0
0
0
浏览量0
英勇投弹手

ubuntu 安装mysql自动输入密码

牛掰
0
0
0
浏览量0
英勇投弹手

问一个电商网站商品表和商品分类表的设计?

淘宝的类目体系是一个单独的项目,专门有人做类目的维护。而且分前台类目和后台类目,前台类目面向用户,后台类目面向技术。前后台类目通过类目的属性完成映射关系。 类目不是无限可分的。任何一个类目都是通过一组属性定义的。商品有了属性才归到一个类目下。如手机是一个类目,但华为手机不是一个类目,只是具有品牌:华为属性的手机,当然手机不会只具有品牌一个属性。但是所有的手机都归属于手机这个类目。 淘宝类目是树形结构,最高只有4级,所有的商品有一个类目id,这个类目id一定是一个叶子类目。非叶子类目不能挂商品。上面举例的手机就是一个叶子类目。 其实淘宝的类目体系中,属性才是最重要的。
0
0
0
浏览量0
英勇投弹手

flex布局如何让每个元素宽度自适应,而不是平分

当然可以,而且应该仅需给项目设置flex auto:
0
0
0
浏览量0
英勇投弹手

chrome拦截支付宝的支付新窗口,如何解决?

https开头的好像不会被拦截
0
0
0
浏览量0
英勇投弹手

stackoverflow 排序算法如何在网站中实现?

一些排名的算法,虽然不是 stackoverflow也是投票排名的网站hack news : 基于用户投票的排名算法(一) Reddit: 基于用户投票的排名算法(二)Reddit排名算法工作原理
0
0
0
浏览量0
英勇投弹手

go语言开发网站

上面的仁兄推荐的这本开源书不错,我就是看这本书开始学习Go的。https://github.com/astaxie/build-web-application-with-golang 但如果你以前没有关注过或不熟悉web的话,建议再看补习下HTML基本知识:http://www.w3school.com.cn 学习Go,我到是经常去官方看手册,看他们的blog,建议也看下:http://golang.org
0
0
0
浏览量0
英勇投弹手

absolute定位为什么会随着滚动条滚动?

设置overflow: auto; parent高度小于child高度出现滚动条child1距离parent顶部20px;当然会滚上去了,你如果设置成相对于parent的父辈定位的话 就不会滚
0
0
0
浏览量0
英勇投弹手

HTML 格式的邮件如何定义 CSS

经过google搜索,发现gmail目前支持inline的css方式。这里http://www.campaignmonitor.com/css/可以找到各个邮件客户端对css样式的支持情况。这里还有一篇不错的文章: http://groundwire.org/labs/email-publ...,介绍了一些在email中使用html和css的最佳实践。Why gmail blocked the css? http://stackoverflow.com/questions/15...看来只能悲剧的inline了。
0
0
0
浏览量0
英勇投弹手

ajax fetch获取不到数据提示需要跨域(肯定没有跨域)

因为 http://aabb:8088/Service/ 与 http://aabb:8088 是两个不同的域名
0
0
0
浏览量0
英勇投弹手

ajax能跨域post吗?

跨域ajax浏览器的兼容性不好解决jsonp只能GET跨域POST从来都是可以的 构造<form>表单想action给谁都可以跨域POST,并且想得到返回结果,需要对方服务器做一些配合思路: == a.com/post.html ==<script> function postcallback(data){ } </script> <form action="http://b.com/api.php" method="post" target="ifr-result"><input ....></form> <iframe name="ifr-result"></iframe> == a.com/ifr-callback.php ==<?php header('Content-type: text/javascript'); echo '<script>'; //回调原页面上函数处理返回结果 echo 'window.top.postcallback(' .$_GET['data']. ');'; echo '</script>'; == b.com/api.php ==<?php //.... $data = '{"ret":0,"msg":"ok"}'; // ** 让结果跳转到a.com域 ** header("Location: http://a.com/ifr-callback.php?data=".urlencode($data));
0
0
0
浏览量0
英勇投弹手

ajax与form表单提交

把验证过程放在输入过程中。提前确定是否允许提交~
0
0
0
浏览量0
英勇投弹手

Event Loop 中异步任务的疑问◔ ‸◔?

说下我的理解吧,先明确几个基本概念 js引擎只负责实现ecmascript标准,按照标准执行代码,它不关心也不知道event loop的存在,你给它什么代码它就执行什么 event loop是 js运行环境内部使用的机制,运行环境也就是Node以及各种各样的浏览器 js引擎执行代码时会有一个执行栈,执行栈中的代码执行完毕后,浏览器(JS运行环境)才会从event queue中取出事件,如果该事件有对应的callback,则再次交给js引擎执行。 所有的事件在产生后都会被浏览器放到event queue中,事件可以来源于鼠标键盘、网络IO、定时器等。event queue一般是由多个不同优先级的队列组成,分别对应不同类型的事件,具体的细节由实现者自己决定。 现在,根据你描述的问题,我尝试还原一下整个过程。 浏览器取得HTML文件后,做的第一件事就是解析HTML(它内部有另外的模块来做这件事),构建DOMTree,当遇到script标签,会停止解析,交给js引擎执行标签内的javascript代码块,这就是我们通常说的js会阻塞页面渲染。 此时js引擎执行栈中只有第一个script标签内的代码。一旦这段代码执行完毕,浏览器会检查event queue,这个时候,根据event queue的情况以及浏览器自身的实现策略就可能会有不同的结果。 浏览器可能会按照先后顺序,或者它预定的优先级依次取出全部事件给js引擎执行callback,还有可能为了加快页面渲染速度,只取出部分高优先级事件。 最后浏览器继续解析页面,遇到下一个script标签再次交给js引擎执行代码 我在Chrome57下多次执行了你的代码,只会出现第1,3种情况 这很好理解,当第一段script执行完时,chrome取出事件时,忽略低优先级的timeout事件,如果已经有xhr事件则取出,没有就继续解析HTML,碰到第二个script再次用js引擎执行。 最后,已上纯属个人见解。有些概念其实依赖于具体的实现的,不同浏览器的差异可能会导致表现出来的行为就不一样,要深入的了解细节只能去看它们的源码了。。。
0
0
0
浏览量0
英勇投弹手

如何正确判断js数据类型

由于具体实现上的问题,在实际的项目应用中,typeof只有两个用途,就是检测一个元素是否为undefined,或者是否为function。为何呢?JavaScript Garden整理出来了如下表格:Value function typeof ------------------------------------- "foo" String string new String("foo") String object 1.2 Number number new Number(1.2) Number object true Boolean boolean new Boolean(true) Boolean object new Date() Date object new Error() Error object [1,2,3] Array object new Array(1, 2, 3) Array object new Function("") Function function /abc/g RegExp object new RegExp("meow") RegExp object {} Object object new Object() Object object 所以我们一般用“鸭子类型”来做流程控制,好晚了,不多讲,去搜一下吧。 一定要区分这些东西?Object.prototype.toString()有一个妙用,如果我们以某个特别的对象为上下文来调用该函数,它会返回正确的类型。我们需要做的就是手动处理其返回的字符串,最终便能获得typeof应该返回的正确字符串。可以用来区分:Boolean, Number, String, Function, Array, Date, RegExp, Object, Error等等。jQuery.type()就是这样实现的。以下代码从jQuery源码中抽取出来,可以直接用。var class2type = {} ; "Boolean Number String Function Array Date RegExp Object Error".split(" ").forEach(function(e,i){ class2type[ "[object " + e + "]" ] = e.toLowerCase(); }) ; //当然为了兼容IE低版本,forEach需要一个polyfill,不作细谈了。 function _typeof(obj){ if ( obj == null ){ return String( obj ); } return typeof obj === "object" || typeof obj === "function" ? class2type[ class2type.toString.call(obj) ] || "object" : typeof obj; } 使用结果:_typeof(new String()) ->"string" _typeof("123") ->"string" _typeof(new RegExp()) ->"regexp" _typeof(null) ->"null"
0
0
0
浏览量0
英勇投弹手

dnspod的彩蛋怎么生成的

送你两篇文章: 基于 canvas 将图片转化成字符画 国庆节到了,献给 sf 社区的礼物 具体思路很简单,就是:扫描图片相应位置的像素点,再计算出其灰度值,根据灰度值的大小,分别用字符 #*+“ 和空格来填充。在第二个链接(国庆节到了,献给 sf 社区的礼物)中,我又对第一个 ANSII 图进行了升级,不仅仅显示出了 SF 字样,而且这个字样还是一个可以直接运行的 javascript 代码,代码的运行结果会输出 segmentfault。
0
0
0
浏览量0

履历

Java技术经理
百威
2021.05-2024.02
,
Java开发工程师
智阳网络技术(上海)有限公司
2020.02-2021.05
,
高级Java开发
上海启日信息技术有限公司
2018.09-2019.12
,
Java
深圳市筷云股份信息科技有限公司
2017.02-2018.09
,
Java
深圳市天泰国际旅行社有限公司
2014.04-2016.12
,
文华学院
本科
2009.09-2013.06