KevinHuang

KevinHuang的博客


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 一些书

  • 常用命令

  • python tips

  • 站点地图

  • rss

  • 公益404

  • 搜索

Chrome浏览器插件精选:开启高效上网的新纪元

发表于 2023-11-07 | 阅读次数:
Chrome浏览器插件精选:开启高效上网的新纪元在这个信息爆炸的时代,有效地管理您的在线活动已经变得至关重要。作为全球最受欢迎的浏览器之一,Chrome的功能可以通过一系列强大的插件来扩展。今天,我将向您介绍几个精选的Chrome插件,这些插件将帮助您打造一个更快、更智能、更个性化的上网体验。 Adblock - 屏蔽网页和视频广告当您浏览网页时,Adblock 插件可以帮助您屏蔽一切网页和视频广告。这不仅能为您提供一个更加清洁、无打扰的阅读环境,而且还能减少数据的消耗,加快页面加载速度。想象一下,在没有广告打断的情况下观看您最爱的视频或阅读文章,Adblock让这一切变为可能。 GoFullPage - 自动翻页截取整个网页内容 对于需要保存网页信息的用户来说,GoFullPage - Full Page Screen Capture 插件是一个必备工具。它可以自动翻页并截取整个网页内容,保存为单一的图片文件。无论是整个网页的长篇文章还是丰富的教程内容,这个插件都可以帮您一键截图保存,简化您的工作流程。 Google 翻译 - 最好用的翻译神器 在遇到外语网页时,有了Google 翻译 插件,您可以即刻将网页翻译成您熟悉的语言。它不仅提供了便捷的页面翻译功能,还允许您对选定的文本进行即时翻译,这无疑是探索全球内容的最佳工具。 Proxy SwitchyOmega - 支持http和socks的自动代理工具 Proxy SwitchyOmega 插件是一种灵活的网络代理工具,它支持HTTP和SOCKS代理。它让您可以根据需要快速切换代理,不仅方便访问地区限制内容,也为您的网络安全提供了一层额外的保护。 沙拉查词 - 聚合词典划词翻译的网页查词神器 当您在阅读外语网页或学习新单词时,沙拉查词-聚合词典划词翻译插件能够迅速提供单词释义和用例。这是一个非常实用的工具,特别是对于语 ...
阅读全文 »

leetcode第32题解题报告

发表于 2020-08-19 | 阅读次数:
题目: Longest Valid Parentheses Given a string containing just the characters ‘(‘ and ‘)’, find the length of the longest valid (well-formed) parentheses substring. Example 1: 123Input: "(()"Output: 2Explanation: The longest valid parentheses substring is "()" Example 2: 123Input: ")()())"Output: 4Explanation: The longest valid parentheses substring is "()()" 解题思路 符号对的匹配首先想到的是用栈来解决,左括号压栈,右括号匹配和出栈 解法1: 用栈stack存储左括号的索引,start标记栈中最底部左括号索引,遇到右括号判断stack,若为空,则记录当前位置的下一个索引为start;若非空, 则出栈一个元素,再次判断栈是否为空,为空则 max(res, index-start+1), 否则 max(res, index-stack[-1]) ;12345678910111213141516def longestValidParentheses(self, s): """ :type s: str :rtype: int """ res, start, stack = 0, 0, [] for index, c in enumerate(s): if c == "(": stack.append(index) else: ...
阅读全文 »

nginx开启gzip压缩

发表于 2020-04-24 | 阅读次数:
需求场景: 最近在部署公司angularjs前端项目的时候,发现打包生成的一个main.js特别大达到了10M,感觉前端这边应该有很大的优化空间,试了好几种方式比如:加优化参数–aot, —-build-optimizer等都试过,生成的文件大小基本没有变化,于是就想从压缩静态文件入手; angularjs项目中引入打包工具gzipper: 将打包命令写入package.json,参考如下: 1ng build --prod && gzipper --verbose --level 9 ./dist/my-app //level表示压缩级别:1-9(压缩率依次变高) nginx配置支持gzip压缩: 1234567891011# 在nginx配置http/server/location中加入如下配置: gzip on; //开启gzip gzip_proxied no-cache no-store private expired auth; //代理的情况 gzip_min_length 1k; //gzip最小压缩大小 gzip_buffers 4 16k; gzip_comp_level 5; //gzip压缩级别(1-9) gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript image/jpeg image/gif image/png; //支持压缩的文件类型 gzip_vary on; gzip_disable "MSIE [1-6]\."; //ie 1-6下禁用压缩 gzip_static on; //开启本地gz ...
阅读全文 »

求最大公约数和最小公倍数

发表于 2020-03-25 | 阅读次数:
辗转相除法的推导:123456789101112131415161718'''求x和y的最大公约数:假设 k = x / y , b = x % y, 则:1. x = k * y + b;假设 g为x和y的最大公约数: 则:2. x = g * c1 ; 3. y = g * c2 ; (c1, c2为某个常数)将1带入2,可得:4. k * y + b = g * c1;将3带入4,可得:k * (g * c2) + b = g * c1 ==> b = g * (c1 - k*c2)从而可得: b = g * c3;于是求x和y最大公约数函数 f(x, y) = f(y, b),'''def gcd(x, y): return x if y==0 else gcd(y, x%y) 辗转相减法:12345678910111213141516'''求x和y的最大公约数:假设 g为x和y的最大公约数: 则:1. x = g * c1 ; 2. y = g * c2 ; (c1, c2为某个常数)1减去2可得:x-y = g * (c1-c2)则可以推导出 y和x-y的最大公约数也是g :于是:f(x, y) = f(y, x-y)'''def gcd_sub(x, y): while(y): if y > x: x, y = y, x x, y = y, x-y return x
阅读全文 »

python3高阶函数库functools

发表于 2019-06-12 | 阅读次数:
###python2.7中functools库wrapper,reduce,partial,total_ordering,cmp_to_key cmp_to_key见名知意把cmp比较函数转换成key比较函数,python3中不支持cmp; total_ordering 这个装饰器是在python2.7的时候加上的,它是针对某个类如果定义了lt、le、gt、ge这些方法中的至少一个,使用该装饰器,则会自动的把其他几个比较函数也实现在该类中; reduce 和之前的reduce函数意义相同; partial局部部分的意思,可以固定函数的部分参数变成定制的函数,看到有些书上翻译成偏函数感觉非常晦涩; wrapper 装饰器函数,把装饰器函数伪装成被装饰函数,实际调用的是update_wrapper,源码设置了name,doc,module,dict属性给装饰器函数; python3.6.5中functools库新增了lru_cache和singledispatch lru_cache缓存计算结果 singledispatch 有点类似c++中的泛型和多态12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697import timefrom operator import mulfrom functools import cmp_to_key, total_ordering, reduce, partial, wraps, lru_cache, singledispa ...
阅读全文 »

Socks5代理转Http协议

发表于 2019-04-12 | 阅读次数:
###privoxyprivoxy在http代理服务方面之前跟tor进行合作,老牌值得信赖(tor后来转而跟polipo合作。不过实际使用过程,我发现还是privoxy的配置比较舒服。)。相比proxychains,privoxy相当于直接在本地监听指定的端口,启动一个HTTP的代理服务,任何转发到这个端口的服务相当于使用了这一HTTP代理服务。 ##安装 1brew install privoxy ##配置 1234567vim /usr/local/Cellar/privoxy/3.0.26/sbin/config# 在文档的最后添加如下语句,将接收到的数据转发到对应的ip和端口。# 此处,设定的监听端口为8118,数据转发到本地`127.0.0.1`;listen-address 0.0.0.0:8118forward-socks5 / 127.0.0.1:1080 . ##使用 12# mac下必须先cd /usr/local/Cellar/privoxy/3.0.26/sbin/usr/local/Cellar/privoxy/3.0.26/sbin/privoxy ##终端配置代理 12345678vim ~/.bash_profile# edit# proxy listalias proxy='export all_proxy=http://127.0.0.1:8118'alias unproxy='unset all_proxy'# end edit# 然后shell下运行 proxy和unproxy切换终端是否代理:proxy 后面终端就可以使用http代理了 另外今天发现了两个代理工具:brook和V2Ray,据说ss会被监听到,有空研究一下这两个工具
阅读全文 »

kong中配置支持socketio

发表于 2019-04-08 | 阅读次数:
###websocket它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。 ###python websocket server实现 socketio: flask_socketio 跨浏览器、跨平台,多种连接方式自动切换 功能完善,心跳检测,断线自动重连 使用方便,支持room和namespace; server和client必须配套使用,不能直接用原生WebSocket tornado_websocket 回掉方式,在异步化之后,并发处理能力应该不错, 因为是原生支持websocket而不像flask需要寻找第三方插件,所以可能更值得信赖 dwebsocket 没有用过, github上star 100多,比较少 flask_socketio实现1234567891011121314151617181920212223242526272829303132from flask import Flask, request, jsonifyfrom flask_socketio import SocketIO, roomsapp = Flask(__name__)socketio = SocketIO(app)def ack(data): print('push msg success:{}'.format(data)) #增加推送成功回调@app.route('/', methods=['POST'])def active_ws(): r = request.form print('push msg to:{}'.format(r.to_dict())) socketio.emit('server_pus ...
阅读全文 »

mysql中group by和order by解析

发表于 2018-12-11 | 分类于 mysql | 阅读次数:
###本文就和大家一起深入研究下mysql中group by与order by.下面是我模拟我的内容表我现在需要取出每个分类中最新的内容 1select * from test group by category_id order by `date` 结果如下 明显。这不是我想要的数据,原因是msyql已经的执行顺序是 引用 写的顺序:select … from… where…. group by… having… order by..执行顺序:from… where…group by… having…. select … order by… 所以在order by拿到的结果里已经是分组的完的最后结果。由from到where的结果如下的内容。 到group by时就得到了根据category_id分出来的多个小组 到了select的时候,只从上面的每个组里取第一条信息结果会如下 即使order by也只是从上面的结果里进行排序。并不是每个分类的最新信息。回到我的目的上 --分类中最新的信息根据上面的分析,group by到select时只取到分组里的第一条信息。有两个解决方法 1,where+group by(对小组进行排序)2,从form返回的数据下手脚(即用子查询)由where+group by的解决方法对group by里的小组进行排序的函数我只查到group_concat()可以进行排序,但group_concat的作用是将小组里的字段里的值进行串联起来。 1select group_concat(id order by `date` desc) from `test` group by category_id 再改进一下 1select * from `test` where id in(select SUBSTRING_INDEX(group_conc ...
阅读全文 »

python调用grpc服务设置headers

发表于 2018-12-03 | 分类于 grpc | 阅读次数:
python安装grpc相关库12pip install grpc grpcio grpcio-toolspip install protobuf #注意版本,开发过程中遇到过不同版本的protobuf不兼容的情况 python中引入第三方proto文件下载第三方proto文件到你本地proto目录,最好把路径都改到一级目录,省去很多不必要的麻烦生成.pb2.py和.pb2_grpc.py文件: 1python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. http.proto 如果使用目标pb2文件过程中依赖第三方的pb2文件,可以再次执行上面 python -m 生成第三方的pb2文件。 python设置grpc请求头headers:查阅了网上所有的资料都没有看到定制headers的方法,最终在grpc python example代码中发现了一种使用拦截器的方法,有点麻烦,不过能解决问题,如果你发现更方便的方法,麻烦告知我一下,万分感谢,拦截器方法如下: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475import grpcimport collectionsclass _GenericClientInterceptor( grpc.UnaryUnaryClientInterceptor, grpc.UnaryStreamClientInterceptor, grpc.StreamUnaryClientInterceptor, gr ...
阅读全文 »

慕课网免费视频课程

发表于 2018-10-30 | 分类于 学习 | 阅读次数:
免费学习资源:1、Java工程师 http://www.imooc.com/course/programdetail/pid/312、Web前端工程师 http://www.imooc.com/course/programdetail/pid/323、PHP工程师 http://www.imooc.com/course/programdetail/pid/344、Android工程师 http://www.imooc.com/course/programdetail/pid/335、Linux运维工程师 http://www.imooc.com/course/programdetail/pid/45
阅读全文 »
12…20
Kevin Huang

Kevin Huang

197 日志
24 分类
84 标签
RSS
E-Mail
友情链接
  • 董伟明
  • FOOFISH
  • 酷壳
  • 知道创宇
  • 阮一峰
  • 求索
  • Sdandroid
  • 全栈实验室
© 2023 Kevin Huang 豫ICP备16018730号-1
本站访客数 人次 本站总访问量 次