首页
留言
导航
统计
Search
1
追番推荐!免费看动漫的网站 - 支持在线观看和磁力下载
2,516 阅读
2
推荐31个docker应用,每一个都很实用
1,314 阅读
3
PVE自动启动 虚拟机 | 容器 顺序设置及参数说明
934 阅读
4
一条命令,永久激活!Office 2024!
618 阅读
5
优选 Cloudflare 官方 / 中转 IP
490 阅读
默认分类
服务器
宝塔
VPS
Docker
OpenWRT
Nginx
群晖
前端编程
Vue
React
Angular
NodeJS
uni-app
后端编程
Java
Python
SpringBoot
SpringCloud
流程引擎
检索引擎
Linux
CentOS
Ubuntu
Debian
数据库
Redis
MySQL
Oracle
虚拟机
VMware
VirtualBox
PVE
Hyper-V
计算机
网络技术
网站源码
主题模板
登录
Search
标签搜索
Java
小程序
Redis
SpringBoot
docker
Typecho
Cloudflare
docker部署
虚拟机
WordPress
群晖
uni-app
CentOS
Vue
Java类库
Linux命令
防火墙配置
Mysql
脚本
Nginx
微醺
累计撰写
264
篇文章
累计收到
11
条评论
首页
栏目
默认分类
服务器
宝塔
VPS
Docker
OpenWRT
Nginx
群晖
前端编程
Vue
React
Angular
NodeJS
uni-app
后端编程
Java
Python
SpringBoot
SpringCloud
流程引擎
检索引擎
Linux
CentOS
Ubuntu
Debian
数据库
Redis
MySQL
Oracle
虚拟机
VMware
VirtualBox
PVE
Hyper-V
计算机
网络技术
网站源码
主题模板
页面
留言
导航
统计
搜索到
264
篇与
的结果
2023-02-22
Oracle-11.2.0.4安装包
找了好多都是收费的,在Google上找了近2个小时,自己下载,百度云也是坑货,我上传倒了OneDrive 上,有梯子哥们走这边,适用于Linux, 如果对你有用希望你留言或者点赞,这样会增加曝光度让更多的人知道软件包:p13390677_112040_Linux-x86-64_1of7.zipp13390677_112040_Linux-x86-64_2of7.zipp13390677_112040_Linux-x86-64_3of7.zipp13390677_112040_Linux-x86-64_4of7.zipp13390677_112040_Linux-x86-64_5of7.zipp13390677_112040_Linux-x86-64_6of7.zipp13390677_112040_Linux-x86-64_7of7.zip下载地址:链接: https://pan.baidu.com/s/1KJnYRHZtUVtg-t-eMXfxmQ 密码: gtk1
2023年02月22日
41 阅读
0 评论
0 点赞
2023-02-21
教程丨官方下载Oracle各版本安装软件及补丁包,包含8i 9i 10g 11g 12c 18c 19c 21c
最近还有一些人在询问到哪里下载 Oracle 数据库软件,故总结一下官方下载 Oracle 软件及补丁的渠道,以及一些注意事项。由于 Oracle 的开放下载政策,Oracle 的软件下载没有任何限制,且与付费版本没有任何区别,可以用来学习和测试,但是如果用于商业生产环境就需要主动向 Oracle 付费购买 license,否则有严重的法律风险,尤其是上市企业。当然 Oracle 也推出了免费版本 XE,不过也有严格的 CPU、内存、容量的限制,详情查看:浅谈 ORACLE 免费数据库 Oracle Database XE (Express Edition) 版。重要-----重要-----重要在开篇特别强调一下,无论从什么渠道下载的软件包一定要验证安装文件的 MD5 或者 SHA 值,确保安装软件与官方提供的软件完全一致,主要有下面两个问题:软件包被篡改植入勒索病毒,尤其是从非官方渠道下载的软件包很有可能带木马。比如云和恩墨在过去几年遇到最多紧急救援的案例:ORA-600 16703 错误的原因和解决方案,就是将恶意代码添加到安装文件,系统上线运行 1000 天后触发木马,勒索比特币。安装包不完整或者损坏,这样会造成多次尝试安装都失败,因为这种情况下的报错或者现象非常异常无法快速定位,可能会浪费大量的时间;另外就是即时安装成功了,软件本身也有隐患,问题可能会在后续暴露出来。官方下载 Oracle 的途径主要是 Oracle 官网、Oracle Delivery 以及 MOS,前两个普通账号即可登录,下载软件的版本也有一定的限制。MOS 需要关联企业 SI 激活,可以下载所有版本的软件以及服务期限内的补丁,部分扩展支持的补丁需要付费下载。导航1、Oracle 官网2、Oracle Delivery3、Oracle MOS3.1 Doc ID 2118136.2Oracle 11204 软件包Oracle 11204 补丁3.2 Patch SearchOracle 11.2.0.4.210420 补丁附 Oracle 11204 安装包 SHA 值1、Oracle 官网Oracle 官方网站,点击 product 找到 database,然后找到下载页面,直达地址如下:https://www.oracle.com/database/technologies/oracle-database-software-downloads.html,目前可以下载 Oracle database 19.5 for solaris,19.3 for all platform,以及 21c 的 x86 下的客户端。20c 由于疫情原因取消发布了,21c 应该会在近期发布。另外在底部也提供了三个 EX 免费版的下载链接:登录之后点击下载 icon 即可直接下载。点击列表中的 See All,可以查看到软件包的 sha256sum 值,再与本地安装包进行确认。 2、Oracle Delivery第 2 个地方就是 Oracle Software Delivery Cloud,这个也是官方渠道,Oracle 的绝大多数软件都可以在这里下载:https://edelivery.oracle.com,注册登录之后即可,虽然比官网直接下载要多一些,但是还是有一些限制,比如 Oracle 11204 只有 HP OpenVMS Itanium 平台的。然后下拉选择 DLP,输入要下载的软件,在下拉候选中选择相应的版本,然后点击搜索。点击选择需要下载的版本加入到下载队列中,可以通过右上角的 view items 查看,然后点击 continue 进入确认页面。勾选需要下载的软件包,是数据库、还是 client,还是集群,右侧选择对应的平台,然后点击右上角 continue,勾选同意 Oracle 许可协议,继续点击 continue 进入下载页面。直接依次点击左侧的 zip 文件名即可直接下载,不需要点击 download 按钮(如果点击会先安装一个 Oracle 下载器,然后统一下载),通过右上角的 show digest details 按钮显示安装包的 SHA 值并保持下来,待安装时比对确认。 3、Oracle MOS也就是 My Oracle Support(之前叫 metalink),这个需要企业或组织购买了 Oracle 的官方服务才可以开通,直接找管理员申请即可,开通之后即可下载除部分扩展支持外的软件和补丁。另外,MOS 还有一个重要的功能就是开 SR,也就是遇到问题可以找原厂的工程师甚至研发人员帮你解决。MOS 上介绍两种途径,一种是根据《Assistant: Download Reference for Oracle Database/GI Update, Revision, PSU, SPU(CPU), Bundle Patches, Patchsets and Base Releases (Doc ID 2118136.2)》文档导航指引直接下载,另外一种方法就是 MOS 上有一个 Patches and Updates 搜索的位置。3.1 Doc ID 2118136.2《Assistant: Download Reference for Oracle Database/GI Update, Revision, PSU, SPU(CPU), Bundle Patches, Patchsets and Base Releases (Doc ID 2118136.2)》该文档也是用得最多的,有快捷的指引,分类如下:Oracle Database Base ReleasesOracle Database PatchsetsOracle Database Updates (Versions 12.2 & higher)Oracle Database Update Revisions (Versions 12.2 & higher)Oracle Database PSU, SPU(CPU), Bundle Patches (Versions 12.1 & lower)OJVM Update/PSU/Bundle PatchesLatest Available Microsoft Windows Patches比如我们要下载 Oracle 11204 for Linux x86_64 安装包以及 11.2.0.4.201020 的 PSU。Oracle 11204 软件包左侧选择 Oracle Database Patchsets,然后点击 Patchsets ID 13390677。再次点击进入下载页面。点击右侧的download按钮,弹出下载框。点击文件名即可下载。同样通过show digest details显示sha-256值并记录。Oracle 11204 补丁左侧依次选择 Oracle Database PSU, SPU(CPU), Bundle Patches (Versions 12.1 & lower)和 11.2.0.4,点击 31537677 进入下载页面。重复上面的操作即可下载201020的PSU。3.2 Patch Search在 MOS 中有一个搜索安装包和补丁的功能,可以通过 ID 来搜,也可以模糊搜索。Oracle 11.2.0.4.210420 补丁比如我们要查询 Oracle 11204 最新的补丁,勾选 include all products in a family 搜索。 进入之后发现无法下载,Oracle 11204在2020年已经扩展支持,需要付费才可下载。如果实在需要,可联系O记客户经理或者尝试通过SR索取。以上列举了官方渠道的下载方式,下载速度还是不错的,千兆电信宽带基本上2M/s,几分钟即可下载完成,呼吁大家尽量在官方渠道下载,如果是其他渠道下载切记验证安装包,一般11204这个版本被篡改的较多,末尾附上Windows和Linux安装包的SHA-256值。附 Oracle 11204 安装包 SHA 值软件包名大小SHA-256p13390677_112040_MSWIN-x86-64_1of7.zip1.2 GB9C6E1235D1B0EE6C36E3F82FEBDC74160BB9766900579FC7EBBFACECD6E8F4B2p13390677_112040_MSWIN-x86-64_2of7.zip1.1 GB6343B2EA4F47C4E85FD4DC1B5C2EA0B86294E48FAD90DE1820C3F9DF906675F3p13390677_112040_MSWIN-x86-64_3of7.zip735.0 MBEC47CFF4D500BD357982C57D9F84F893293A3DBB79A62FC7AE66E2144BEFFF6Cp13390677_112040_Linux-x86-64_1of7.zip1.3 GB0B399A6593804C04B4BD65F61E73575341A49F8A273ACABA0DCDA2DFEC4979E0p13390677_112040_Linux-x86-64_2of7.zip1.1 GB73E04957EE0BF6F3B3E6CFCF659BDF647800FE52A377FB8521BA7E3105CCC8DDp13390677_112040_Linux-x86-64_3of7.zip1.1 GB09C08AD3E1EE03DB1707F01C6221C7E3E75EC295316D0046CC5D82A65C7B928C本文转载至:教程丨官方下载Oracle各版本安装软件及补丁包,包含8i 9i 10g 11g 12c 18c 19c 21c
2023年02月21日
115 阅读
0 评论
0 点赞
2023-02-18
顶级Javaer都在使用的类库,真香!
1.日志库2.JSON 解析库3.单元测试库4.通用库5.HTTP 库6.XML 解析库7.Excel 阅读库8.字节码库9.数据库连接池库10.消息库11.PDF 库12.日期和时间库13.集合库14.电子邮件 API15.HTML 解析库16.密码库17.嵌入式 SQL 数据库库18.JDBC 故障排除库19.序列化库20.网络库优秀且经验丰富的 Java 开发人员的特点之一是对 API 的广泛了解,包括 JDK 和第三方库。如何使用现有的 API 进行开发,而不是为常见的东西编写新的代码。是提升开发效率必选之路。一般来说,我会为日常项目提供有用的库,包括 Log4j 等日志库、Jackson 等 JSON 解析库以及 JUnit 和 Mockito 等单元测试 API。如果您需要在项目中使用它们,则可以在项目的类路径中包含这些库的 JAR 以开始使用它们,也可以使用 Maven 进行依赖管理。对 Java 程序员有用的开源库下面是收集的一些有用的第三方库,Java 开发人员可以在他们的应用程序中使用它们来完成很多有用的任务。为了使用这些库,Java 开发人员应该熟悉这一点,这就是本文的重点。如果您有一个想法,那么您可以研究该库并使用它。1. 日志库日志库非常常见,因为您在每个项目中都需要它们。它们对于服务器端应用程序来说是最重要的,因为日志只放置在您可以看到应用程序正在发生什么的地方。尽管 JDK 附带了自己的日志库,但仍有更好的替代方案可用,例如 Log4j、SLF4j 和 LogBack。Java 开发人员应该熟悉日志库的优缺点,并知道为什么使用 SLF4j 比普通的 Log4j 更好。2. JSON 解析库在当今的 Web 服务和物联网世界中,JSON 已成为将信息从客户端传输到服务器的首选协议。它们已取代 XML,成为以独立于平台的方式传输信息的首选方式。不幸的是,JDK 没有 JSON 库。但是,有许多优秀的第三方库可以让您解析和创建 JSON 消息,例如 Jackson 和 Gson。Java Web 开发人员应该至少熟悉这些库中的一个。3. 单元测试库单元测试是将普通开发人员与优秀开发人员区分开来的最重要的事情。程序员经常得到不编写单元测试的借口,但避免单元测试的最常见借口是缺乏流行单元测试库的经验和知识,包括 JUnit、Mockito 和 PowerMock。4. 通用库Java 开发人员可以使用一些优秀的通用第三方库,例如 Apache Commons 和 Google Guava。我总是在我的项目中包含这些库,因为它们简化了很多任务。重新发明轮子是没有意义的。我们应该更喜欢使用久经考验的库,而不是时不时地编写我们自己的例程。Java 开发人员最好熟悉 Google Guava 和 Apache Commons 库。5. HTTP 库我不喜欢 JDK 的一件事是它们缺乏对 HTTP 的支持。虽然您可以使用包中的类建立 HTTP 连接 java.net,但使用开源第三方库(如 Apache HttpClient 和 HttpCore)并不容易或无缝。尽管 JDK 9 带来了对 HTTP 2.0 的支持以及对 HTTP 的更好支持,但我强烈建议所有 Java 开发人员熟悉流行的 HTTP 客户端库,包括 HttpClient 和 HttpCore。6. XML 解析库有许多 XML 解析库,包括 Xerces、JAXB、JAXP、Dom4j 和 Xstream。Xerces2 是 Apache Xerces 系列中的下一代高性能、完全兼容的 XML 解析器。这个新版本的 Xerces 引入了 Xerces Native Interface (XNI),这是一个用于构建解析器组件和配置的完整框架,它非常模块化且易于编程。Apache Xerces2 解析器是 XNI 的参考实现,但其他解析器组件、配置和解析器可以使用 Xerces Native Interface 编写。Dom4j 是另一个用于 Java 应用程序的灵活 XML 框架。7. Excel 阅读库信不信由你——所有现实世界的应用程序都必须以某种形式与 Microsoft Office 交互。许多应用程序需要提供在 Excel 中导出数据的功能,如果您必须从 Java 应用程序中执行相同操作,则需要 Apache POI API。这是一个非常丰富的库,允许您 从 Java 程序读取和写入 XLS 文件。您可以查看该链接以获取在核心 Java 应用程序中读取 Excel 文件的工作示例。8. 字节码库如果您正在编写生成代码或与字节码交互的框架或库,那么您需要一个字节码库。它们允许您读取和修改应用程序生成的字节码。Java 世界中一些流行的字节码库是 javassist 和 Cglib Nodep。Javassist(JAVA 编程助手)使 Java 字节码操作变得非常简单。它是一个用于在 Java 中编辑字节码的类库。ASM 是另一个有用的字节码编辑库。9. 数据库连接池库如果您从 Java 应用程序与数据库进行交互,但不使用数据库连接池库,那么,您会丢失一些东西。由于在运行时创建数据库连接需要时间并且使请求处理速度变慢,因此始终建议使用数据库连接库。一些流行的是 Commons Pool 和 DBCP。在 Web 应用程序中,它的 Web 服务器通常提供这些功能,但在核心 Java 应用程序中,您需要将这些连接池库包含到您的类路径中才能使用数据库连接池。10. 消息库与日志记录和数据库连接类似,消息传递也是许多实际 Java 应用程序的共同特征。Java 提供 JMS 或 Java 消息传递服务,它不是 JDK 的一部分。对于此组件,您需要包含一个单独的 jms.jar同样,如果您使用第三方消息传递协议,例如 Tibco RV,那么您需要 tibrv.jar 在应用程序类路径中使用第三方 JAR 。11. PDF 库与 Microsoft Excel 类似,PDF 库是另一种普遍存在的格式。如果您需要在应用程序中支持 PDF 功能,例如 在 PDF 文件中导出数据,您可以使用 iText 和 Apache FOP 库。两者都提供有用的 PDF 相关功能,但 iText 更丰富更好。12. 日期和时间库在 Java 8 之前,JDK 的数据和时间库有很多缺陷,因为它们不是线程安全的、不可变的和容易出错的。许多 Java 开发人员依靠 JodaTime 来实现他们的日期和时间要求。从 JDK 8 开始,没有理由使用 Joda,因为您可以在 JDK 8 的新日期和时间 API 中获得所有这些功能,但是如果您使用的是较旧的 Java 版本,那么 JodaTime 是一个值得学习的库。13. 集合库尽管 JDK 拥有丰富的集合库,但也有一些第三方库提供了更多选项,例如 Apache Commons 集合、Goldman Sachs 集合、Google 集合和 Trove。Trove 库特别有用,因为它为 Java 提供了高速的常规和原始集合。FastUtil 是另一个类似的 API。它通过提供特定类型的映射、集合、列表和优先级队列来扩展 Java 集合框架,这些映射、集合、列表和优先级队列具有较小的内存占用、快速访问和插入;它还提供大(64 位)数组、集合和列表,以及用于二进制和文本文件的快速、实用的 I/O 类。14. 电子邮件 APIjavax.mail 和 Apache Commons Email 都提供了用于从 Java 发送电子邮件的 API 。它建立在 JavaMail API 之上,旨在简化它。15. HTML 解析库与 JSON 和 XML 类似,HMTL 是我们许多人必须处理的另一种常见格式。值得庆幸的是,我们有 JSoup,它极大地简化了在 Java 应用程序中使用 HTML。您可以使用 JSoup 不仅解析 HTML,还可以创建 HTML 文档它提供了一个非常方便的 API 用于提取和操作数据,使用最好的 DOM、CSS 和类似 jquery 的方法。JSoup 实现了 WHATWG HTML5 规范并将 HTML 解析为与现代浏览器相同的 DOM。16.密码库Apache Commons Codec 包包含各种格式的简单编码器和解码器,例如 Base64 和 Hexadecimal。除了这些广泛使用的编码器和解码器之外,编解码器包还维护了一组语音编码实用程序。17. 嵌入式 SQL 数据库库我真的很喜欢像 H2 这样的内存数据库,你可以将它嵌入到你的 Java 应用程序中。它们非常适合测试您的 SQL 脚本和运行需要数据库的单元测试。但是,H2 不是唯一的 DB,您还可以选择 Apache Derby 和 HSQL。18. JDBC 故障排除库有一些很好的 JDBC 扩展库可以让调试更容易,比如 P6spy。这是一个库,可以无缝拦截和记录数据库数据,而无需更改应用程序的代码。您可以使用它们来记录 SQL 查询及其时间。例如,如果您在代码中使用 PreparedStatment 和 CallableStatement,这些库可以记录带有参数的准确调用以及执行所需的时间。19. 序列化库Google 协议缓冲区是一种以高效且可扩展的格式对结构化数据进行编码的方法。它是 Java 序列化的更丰富和更好的替代方案。我强烈建议有经验的 Java 开发人员学习 Google Protobuf。20. 网络库一些有用的网络库是 Netty 和 Apache MINA。如果您正在编写需要执行低级网络任务的应用程序,请考虑使用这些库。以上就是今天分享给大家的一些工作中常用的库,了解并熟练的运用他们,不仅可以大大提高你的开发效率,也可以学习优秀代码的设计,提高自己的编码能力。
2023年02月18日
62 阅读
1 评论
0 点赞
2023-02-18
七种JS实现数组去重的方式
目录1.利用Set() + Array.from()2.利用两层循环 + 数组的splice方法3.利用数组的indexOf方法4.利用数组的includes方法5.利用数组的filter() + indexOf()6.利用Map()7.利用对象例:将下面数组去除重复元素(以多种数据类型为例)const arr = [1, 2, 2, 'abc', 'abc', true, true, false, false, undefined, undefined, NaN, NaN]1.利用 Set() + Array.from()Set对象: 是值的集合,你可以按照插入的顺序迭代它的元素。Set中的元素只会出现一次,即Set中的元素是唯一的。Array.from()方法: 对一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。const result = Array.from(new Set(arr)) console.log(result) // [ 1, 2, 'abc', true, false, undefined, NaN ]注意:以上去方式对NaN和undefined类型去重也是有效的,是因为NaN和undefined都可以被存储在Set中, NaN之间被视为相同的值(尽管在js中:NaN !== NaN)。2.利用两层循环 + 数组的splice方法通过两层循环对数组元素进行逐一比较,然后通过splice方法来删除重复的元素。此方法对NaN是无法进行去重的,因为进行比较时NaN !== NaN。function removeDuplicate(arr) { let len = arr.length for (let i = 0; i < len; i++) { for (let j = i + 1; j < len; j++) { if (arr[i] === arr[j]) { arr.splice(j, 1) len-- // 减少循环次数提高性能 j-- // 保证j的值自加后不变 } } } return arr } const result = removeDuplicate(arr) console.log(result) // [ 1, 2, 'abc', true, false, undefined, NaN, NaN ]3.利用数组的indexOf方法新建一个空数组,遍历需要去重的数组,将数组元素存入新数组中,存放前判断数组中是否已经含有当前元素,没有则存入。此方法也无法对NaN去重。indexOf() 方法:返回调用它的 String 对象中第一次出现的指定值的索引,从 fromIndex 处进行搜索。如果未找到该值,则返回 -1。function removeDuplicate(arr) { const newArr = [] arr.forEach(item => { if (newArr.indexOf(item) === -1) { newArr.push(item) } }) return newArr // 返回一个新数组 } const result = removeDuplicate(arr) console.log(result) // [ 1, 2, 'abc', true, false, undefined, NaN, NaN ]4.利用数组的includes方法此方法逻辑与 indexOf 方法去重异曲同工,只是用 includes 方法来判断是否包含重复元素。includes() 方法:用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true ,否则返回 false 。function removeDuplicate(arr) { const newArr = [] arr.forEach(item => { if (!newArr.includes(item)) { newArr.push(item) } }) return newArr } const result = removeDuplicate(arr) console.log(result) // [ 1, 2, 'abc', true, false, undefined, NaN ]注意:为什么includes能够检测到数组中包含NaN,其涉及到includes底层的实现。如下图为includes实现的部分代码,在进行判断是否包含某元素时会调用sameValueZero方法进行比较,如果为NaN,则会使用isNaN()进行转化。简单测试includes()对NaN的判断:const testArr = [1, 'a', NaN] console.log(testArr.includes(NaN)) // true5.利用数组的filter() + indexOf()filter 方法会对满足条件的元素存放到一个新数组中,结合 indexOf 方法进行判断。filter() 方法:会创建一个新数组,其包含通过所提供函数实现的测试的所有元素。function removeDuplicate(arr) { return arr.filter((item, index) => { return arr.indexOf(item) === index; }) } const result = removeDuplicate(arr) console.log(result) // [ 1, 2, 'abc', true, false, undefined ]注意:这里的输出结果中不包含NaN,是因为indexOf()无法对NaN进行判断,即arr.indexOf(item) === index返回结果为false。测试如下:const testArr = [1, 'a', NaN] console.log(testArr.indexOf(NaN)) // -16.利用Map()Map对象是JavaScript提供的一种数据结构 ,结构为键值对形式,将数组元素作为map的键存入,前端培训然后结合 has() 和 set() 方法判断键是否重复。Map对象用于保存键值对,并且能够记住键的原始插入顺序。 任何值(对象或者原始值)都可以作为一个键或一个值。function removeDuplicate(arr) { const map = new Map() const newArr = [] arr.forEach(item => { if (!map.has(item)) { // has()用于判断map是否包为item的属性值 map.set(item, true) // 使用set()将item设置到map中,并设置其属性值为true newArr.push(item) } }) return newArr } const result = removeDuplicate(arr) console.log(result) // [ 1, 2, 'abc', true, false, undefined, NaN ]注意:使用Map()也可对NaN去重,原因是Map进行判断时认为NaN是与NaN相等的,剩下所有其它的值是根据 === 运算符的结果判断是否相等。7.利用对象其实现思想和Map()是差不多的,主要是利用了对象的属性名不可重复这一特性。function removeDuplicate(arr) { const newArr = [] const obj = {} arr.forEach(item => { if (!obj[item]) { newArr.push(item) obj[item] = true } }) return newArr } const result = removeDuplicate(arr) console.log(result) // [ 1, 2, 'abc', true, false, undefined, NaN ]到此这篇关于七种JS实现数组去重的方式的文章就介绍到这了。
2023年02月18日
77 阅读
0 评论
0 点赞
2023-02-18
OpenWRT 路由配置技巧(PPTP VPN+断线自动重连+chnroutes国内路由表)
chnroutes 路由表这个路由表集中了所有分配到中国大陆的 IP 段,根据 http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest 每天自动更新,可使得在访问国内地址时不经过 VPN。想想如果能够让家里的路由直接连接 VPN,在家连接 WiFi 的所有设备直接达到Fan墙的效果,应该很 Cool,所以最近在某宝整了一个 Netgear WNDR3800 二手路由回来,先后分别在 DD-WRT 和 OpenWRT 成功配置 VPN + chnroutes,最后还是选择了 OpenWRT。DD-WRT vs OpenWRT关于 DD-WRT 和 OpenWRT ,我选择 OpenWRT 主要因为 DD-WRT ROM 中集成的软件太多,绝大多数用不到,要配置 jffs2 来保存脚本文件,一般配置则保存在 nvram 中,而且无线较不稳定,5G频段常搜索不到(当然可能是我这个路由器型号的支持问题)。OpenWRT 的配置文件语法统一,配置都存储在文件系统中,且 ROM 本身仅集成了必备组件,非常小,可以只安装需要的东西,WEB管理界面也是可选安装,简洁强大,经过若干天的使用一直比较稳定。配置已配置好 OpenWRT 上网的童鞋们可以直接跳过 1.刷ROM 和 2.初始配置刷ROMa. 首先确定你的设备可以被 OpenWRT 所支持(到这里查看支持的设备列表:http://wiki.openwrt.org/toh/start),然后到这里下载编译好的 ROM:http://downloads.openwrt.org/ 。最新的 stable 版本是 attitude_adjustment(12.09),我下载的是 trunk 版本。b. 在 OpenWRT 官网找相应设备的 Wiki 页面查看刷机方法,一般都是在路由方Web固件升级页面直接刷入(我的 WNDR3800 Wiki页面是:http://wiki.openwrt.org/toh/netgear/wndr3800)初始配置a. 路由器启动后,有的型号没有安装 Wifi 模块,需要先用网线连接到 LAN 口,本机 IP 配置为静态 192.168.1.x,然后 telnet 到 192.168.1.1,更改 root 密码,然后 ssh 连入,参考:http://wiki.openwrt.org/doc/start#configuring.openwrtb. 配置 WAN 口,让路由连上 Internet,参考:http://wiki.openwrt.org/doc/howto/internet.connection比如要配置PPPoE:代码如下:uci set network.wan.proto=pppoe uci set network.wan.username='yougotthisfromyour@isp.su' uci set network.wan.password='yourpassword' uci commit network ifup wanc. 安装 LuCI Web 管理界面并设置开机自动启动,参考:http://wiki.openwrt.org/doc/howto/luci.essentials代码如下:opkg update opkg install luci /etc/init.d/uhttpd start /etc/init.d/uhttpd enabled. 浏览器输入路由器 LAN 侧 IP(多为192.168.1.1),进行 Wifi 等配置配置 DNSa. 创建 /etc/config/sec_resolv.confvim /etc/config/sec_resolv.conf填入以下 DNS Servers:代码如下:nameserver 8.8.8.8 nameserver 8.8.4.4 nameserver 208.67.222.222b. 编辑 /etc/config/dhcpvim /etc/config/dhcp找到 option resolvfile 选项,替换为:option resolvfile '/etc/config/sec_resolv.conf'配置 PPTPa. 安装 ppp-mod-pptp代码如下:opkg updateopkg install ppp-mod-pptp如果需要 LuCI 支持(推荐):opkg install luci-proto-pppb. 配置 vpn 接口,编辑 /etc/config/network 文件,应该已经有以下内容(如果没有,需要插入),并配置里面的 server、username 和 password:代码如下:config 'interface' 'vpn' option 'ifname' 'pptp-vpn' option 'proto' 'pptp' option 'username' 'vpnusername' option 'password' 'vpnpassword' option 'server' 'vpn.example.org or ipaddress' option 'buffering' '1'c. 进入 Network -> Firewall ,把 vpn 加入 wan zone,效果如图:d. 进入 Network -> Interfaces ,此时应该已经可以看到 VPN Interface 并可以连接,效果如图:e. 此时在本机 traceroute www.google.com,应该能得到类似以下的结果:代码如下:FL-MBP:~ fatlyz$ traceroute www.google.com traceroute: Warning: www.google.com has multiple addresses; using 74.125.239.113 traceroute to www.google.com (74.125.239.113), 64 hops max, 52 byte packets fc_r0.lan (192.168.7.1) 2.266 ms 0.999 ms 0.946 ms 10.7.0.1 (10.7.0.1) 189.259 ms 187.813 ms 188.368 ms 23.92.24.2 (23.92.24.2) 189.847 ms 190.489 ms 188.939 ms 10ge7-6.core3.fmt2.he.net (65.49.10.217) 188.508 ms 192.216 ms 202.863 ms 10ge10-1.core1.sjc2.he.net (184.105.222.14) 195.695 ms 195.691 ms 284.242 ms 72.14.219.161 (72.14.219.161) 189.196 ms 192.287 ms 193.220 ms 216.239.49.170 (216.239.49.170) 192.496 ms 188.547 ms 189.881 ms 66.249.95.29 (66.249.95.29) 190.125 ms 190.335 ms 190.026 ms nuq05s01-in-f17.1e100.net (74.125.239.113) 189.804 ms 190.556 ms 190.242 ms可以看出,其中第二跳是 VPN 的网关,而 traceroute www.baidu.com 的话第二跳应该也是同样的结果。这时已经可以访问 Google, Baidu 等国内外的站点了。配置 chnroutesa. 到 chnroutes 项目的下载页面:http://chnroutes-dl.appspot.com/ 下载 linux.zip ,解压b. 把 ip-pre-up 重命名为 chnroutes.sh,打开编辑,在 if [ ! -e /tmp/vpn_oldgw ]; then 前插入以下代码,以避免 ppp 连接脚本重复执行导致重复添加路由表项:代码如下:if [ $OLDGW == 'x.x.x.x' ]; then exit 0 fi其中 x.x.x.x 是 VPN 的网关,可以先本机连接上去之后查看一下网关地址。c. ssh 连接到路由器,执行以下命令:代码如下:cd /etc/config/ mkdir pptp-vpncd pptp-vpnvim chnroutes.sh在 vim 中把编辑好的 chnroutes.sh 粘贴进去(当然也可以通过 ssh 直接把 chnroutes.sh 文件传过去,或者上传到某个地方再 wget 下载)执行以下命令,设置权限为可执行:chmod a+x chnroutes.shd. 用 vim 编辑 /lib/netifd/ppp-up 文件:vim /lib/netifd/ppp-up在 [ -d /etc/ppp/ip-up.d ] && { 这一行前插入以下内容,确保 ppp 连接脚本能够被执行:sh /etc/config/pptp-vpn/chnroutes.she. 重启路由,启动好之后,进入 LuCI 查看接口状态,等 WAN 和 VPN 都连接成功后,ssh进去,执行 route -n | head -n 10 ,效果应该类似这样:代码如下:root@FC_R0:/etc/config# route -n | head -n 10 Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.7.0.1 0.0.0.0 UG 0 0 0 pptp-vpn 1.0.1.0 58.111.43.1 255.255.255.0 UG 0 0 0 pppoe-wan 1.0.2.0 58.111.43.1 255.255.254.0 UG 0 0 0 pppoe-wan 1.0.8.0 58.111.43.1 255.255.248.0 UG 0 0 0 pppoe-wan 1.0.32.0 58.111.43.1 255.255.224.0 UG 0 0 0 pppoe-wan 1.1.0.0 58.111.43.1 255.255.255.0 UG 0 0 0 pppoe-wan 1.1.2.0 58.111.43.1 255.255.254.0 UG 0 0 0 pppoe-wan 1.1.4.0 58.111.43.1 255.255.252.0 UG 0 0 0 pppoe-wan其中 Destination 为 0.0.0.0 的是默认路由,网关为 VPN 网关,意味着默认流量都经过 VPN,而以下的条目则把目的为国内的网段都指向了 ISP 提供的网关。至此 PPTP VPN 和 chnroutes 已经配置完毕。配置 VPN 断线自动重连a. 创建 /etc/config/pptp-vpn/status-check.shvim /etc/config/pptp-vpn/status-check.sh在 vim 中粘贴以下内容(此脚本检测 VPN 连接状态,并在断线后会断开 WAN 和 VPN 接口,10秒后重新连接 WAN,并在 30 秒后重连 VPN):代码如下:#!/bin/sh</p> <p>if [ -f "/tmp/vpn_status_check.lock" ] then exit 0 fi</p> <p>VPN_CONN=`ifconfig | grep pptp-vpn`</p> <p>if [ -z "$VPN_CONN" ] then touch /tmp/vpn_status_check.lock echo WAN_VPN_RECONNECT at: >> /tmp/vpn_status_check_reconn.log date >> /tmp/vpn_status_check_reconn.log</p> <p> ifdown vpn ifdown wan sleep 10 ifup wan sleep 30 ifdown vpn sleep 10 ifup vpn sleep 40 rm /tmp/vpn_status_check.lock</p> <p>else date > /tmp/vpn_status_check.log fi执行以下命令,设置权限为可执行:chmod a+x /etc/config/pptp-vpn/status-check.shb. 进入LuCI 的 System -> Scheduled Tasks 填入以下内容,并保存:*/1 * * * * /etc/config/pptp-vpn/status-check.sh以上实际上是编辑了 cron 配置,cron 每分钟运行检测 / 重连脚本,重启 cron:/etc/init.d/cron restartc. 静待几分钟,查看 /tmp 目录,应该能看到 vpn_oldgw 和 vpn_status_check.log 文件,查看 vpn_status_check.log 文件,可以看到最近一次检测 VPN 连接状态的时间。代码如下:root@FC_R0:/tmp# ls vpn* vpn_oldgw vpn_status_check.log root@FC_R0:/tmp# cat vpn_status_check.log Tue Jul 15 00:04:02 HKT 2014 root@FC_R0:/tmp#你可以在 LuCI 中断开 VPN 接口,在接下来的4-5分钟,观察 WAN 和 VPN 的重连情况。d. 分别 traceroute www.google.com 和 www.baidu.com ,观察第二跳的地址:代码如下:FL-MBP:~ fatlyz$ traceroute www.google.com | head -n 3 traceroute: Warning: www.google.com has multiple addresses; using 74.125.239.115 traceroute to www.google.com (74.125.239.115), 64 hops max, 52 byte packets fc_r0.lan (192.168.7.1) 2.161 ms 0.912 ms 0.895 ms 10.7.0.1 (10.7.0.1) 193.747 ms 187.789 ms 289.744 ms 23.92.24.2 (23.92.24.2) 259.323 ms 354.625 ms 408.535 ms代码如下:FL-MBP:~ fatlyz$ traceroute www.baidu.com | head -n 3 traceroute to www.a.shifen.com (180.76.3.151), 64 hops max, 52 byte packets 1 fc_r0.lan (192.168.7.1) 1.190 ms 0.984 ms 0.731 ms 2 58.111.43.1 (58.111.43.1) 20.616 ms 38.822 ms 18.484 ms 3 183.56.35.133 (183.56.35.133) 20.056 ms 52.353 ms 87.841 ms可以看出,已成功对国内外的目标地址进行了路由选择。至此,OpenWRT 路由的基本配置、PPTP VPN、chnroutes 和自动重连已经配置完成。
2023年02月18日
385 阅读
0 评论
0 点赞
2023-02-17
Java零基础的学习路线
Java作为IT行业的核心技术职位之一,需要坚实的技术基础知识,良好的编码能力以及富有责任心和团队精神。尤其是在竞争越来越激烈的当下和未来,除了自身技术必须过硬以外,还需要软实力的提升,为公司创造更多的价值的技术人才更受用人单位的喜爱。今天主要跟大家聊的技术学习路线,至于软实力部分的学习提升主要还是要靠个人的实践积累而来的,只是靠单纯的职业素养能力培训无法全面提升的,所以稍后只是简单的提一下,更多的是先关注技术学习,毕竟行业门槛要先满足,再有机会说到提升的问题。Java开发是个高技术含量的活,也被称作高级技工,技术本身不过硬,那肯定是无法胜任的,这也决定了Java开发人员的不可替代性。企业在招聘Java开发岗位时都是非常慎重的,所以很多转行的零基础的在了解Java时也会心生恐惧,觉得学不会,难度大,这也很正常。因为很多大学生在面对选开发还是学UI测试时,都会选择后者,技术难度低好上手的。但其实也高估了开发的难度,下面分享一些关于零基础小白路如何学习Java的经验,希望能让大家更平常心的面对Java的学习。Java的学习路线概括虽然Java课程内容非常多,但可以大致概括为四个主要部分:(1)JavaSE基础阶段,主要是要掌握Java的基础语法、面向对象、Java高级语言等。面向对象是Java的基础必须要掌握的;其次重点就是集合、IO、反射、泛型等。Java基础打好了,后期的内容学习才能摸得着方向。(2)JavaWeb,主要是掌握HTML、CSS、JS、ajax以及数据库(MySQL、oracle)相关内容。学习前端课程一定要多练习,不然记不住。重点需要掌握的tomcat的使用和配置、Http协议和Servlet、cookie、session、JSP、ajax、request和response等。虽然这个阶段的内容繁杂,但是你也必须要把重点都掌握好,做综合型项目,反复练习。毕竟学到Javaweb阶段也是可以直接就业从事前端开发工作的,没有难度那怎么行,你说是不是。(3)Java主流框架学习,主要是掌握SpringMVC、mybatis、Springboot、Git、maven等,本阶段基本上都需要重点掌握,SSM是当下的发展趋势,掌握好了也关乎到你以后的薪资高低和入行起点。(4)中间件和微服务,主要掌握Springcloud、redis、rabbit、docker等。这是Java的发展,还在继续向大数据、人工智能领域漫延,不断扩展开发边界。Java的知识大纲:————————————————版权声明:本文为CSDN博主「课工场成都基地」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/kgccd/article/details/128458730
2023年02月17日
136 阅读
0 评论
0 点赞
2023-02-17
零基础java入门教程(入门篇)
Java 语言是一种应用性广但又枯燥的一门语言,想要学好 java 开发语言,那么在进入 java 行业之前,就需要做好充足的准备。目前Java 学习分为入门、初级、中级、高级四个阶段,每个阶段都有不同的学习重点。今天小编先来为大家分享零基础 java 入门教程(入门篇)。一、前期准备工作1.开发环境设置首先,你需要一台电脑,然后安装 JDK 和 JRE。JDK 提供了 Java 开发工具,也就是一些必要的 jar 包。JRE 是 Java 的运行环境组件,我们熟悉的 JVM 就在这里。安装完这两个东西后,一般都需要配置环境变量,否则有的目录可能找不到正确的。2.IDE 选择和安装IDE 是指本地开发编辑器。如果没有这个开发编辑器,就只能在记事本等工具中直接键入代码。IDE 最大的优势在于集成了大量的工具和功能模块,让我们可以非常轻松地完成开发。之前大家都用过 eclipse,但是 eclipse 已经不流行了,现在推荐大家直接用 Intellij idea 作为自己的第一个代码编辑器。如果你是用过 eclipse 的同学,基本可以无痛切换。Intellij idea 可以直接从官网下载,试用版为 30 天。如果你想永久使用它,可以在网上查找一些方法。3.关于 jar 包什么是 jar 包,其实就是打包一堆 class 格式的文件,在 Java 中称为 jar 包。这些 jar 包可以直接在编译器中识别出来供开发者使用。对于初学者来说,可能只需要使用 JDK 自带的一些 API,但是如果要引用外部的 jar 包,可能会遇到一些困难。对于 idea 来说,导入外部 jar 包有两种方式,一种是手动导入 jar 包,另一种是使用 maven。后者将在 Java Web 相关文章中介绍。手动导入 jar 包其实并不难。需要先下载 jar 包,然后在对应项目下选择导入 jar 包。具体方法这里就不描述了,大家可以去网上查。二、Java 入门必备知识点在 Java 的入门阶段,你可能需要接触到以下部分知识。无论你从哪一种方式学习,这些内容都是你在学习 Java 基础知识时绕不开的重点。Java 基础这部分内容是你必须掌握的内容。在入门阶段,你需要打下坚实的基础,以便在学习后面的内容时能够更上一层楼。如何打好基础?最好的方法是在 IDE 上实现书中或视频中的每个示例。当然,有时你也可以自己写一些有趣的例子。1.基本数据类型例如 int、double、char 及其包装类。熟悉基本数据类型的使用,了解每种类型占用多少字节,以及如何在它们与包装类之间进行转换。2.过程控制比如 for 循环、if else、while 循环等。如果你是学过 C 语言的同学,可以跳过这一部分。3.字符串类型 String 的使用字符串类型是 Java 中非常重要的类型。它不是基本的数据类型,但非常常用。熟悉和练习字符串相关的 API,开始你的字符串学习。4.数组数组的初始化方法有哪些,二维数组怎么写,数组作为方法参数怎么处理?5.类和对象Java 中最重要的两个概念:类和对象,它们是干什么用的,有什么区别和联系,请在代码中练习。Java 核心技术对于这一部分,我相信很多新手只能了解它们的基本用法,但不了解它们背后的一些原理:比如接口和抽象类为什么会有这些区别,多态是什么意思,为什么会有是反思?新手在学习这部分的时候,只需要知道怎么用就可以了。至于为什么会有这些特性,这些特性背后的原理是什么,可以在初、中级的时候进行了解。1.接口和抽象类写一些接口,写一些实现类来实现这些接口,明白为什么我们需要接口,为什么子类需要实现接口中的方法。同理,我们来实现一些抽象类。然后,看看它与界面有何不同。2.继承、封装和多态如何理解继承,子类和父类是什么关系?封装是保护代码的一种方式。实现封装的方法有哪些?多态性一般分为重载和重写,它们是如何使用的?3.异常处理Java 中的异常处理主要用于捕获和处理错误。请编写一些 try catch 代码块来捕获错误。4.集合类Collection 类是我们经常需要处理的东西,List、Map、Set 等,赶紧熟悉 API,然后写一些测试示例。5.IO 输入流和输出流IO 输入流和输出流可以操作文件、网络数据等,如何在 Java 代码中完成如此复杂的操作呢?实际上,只需要几个简单的 API。6.多线程为了对系统资源进行最合理的分配和调度,我们需要多线程。多线程让程序变得有趣,也带来了很多问题。使用 Thread 和相关 API 来尝试这些有趣的事情。零基础 Java 入门主要需要做好两项工作,第一是前期准备工作,包括开发环境的布置、IDE选择和安装、导入 jar 包,第二项工作是了解并掌握 java 入门必知知识点,例如基础数据类型、流程控制、字符串类型 String 的使用等等内容。
2023年02月17日
98 阅读
0 评论
0 点赞
2023-02-17
你应该知道的if-else简洁写法
本文并不肯定或者否定哪一种写法,仅仅为大家提供一些其他的编码思路或者一些值得借鉴的点子。设计更好的软件,替换 If-Else 的 5 种方法,从入门到高级示例If-Else 通常是一个糟糕的选择,它导致设计复杂,代码可读性差,并且可能导致重构困难。但是,If-Else 已成为事实上的代码分支解决方案,这确实是有道理的。这是向所有有抱负的开发人员讲授的第一件事。不幸的是,许多开发人员从来没有前进到更合适的分支策略。有些人的口头禅是:If-Else 是一把锤子,一切都是钉子。我将向大家展示一些技巧和模式,这些技巧和模式将终结这种可怕的做法。每个示例的难度都会增加。完全不必要的 Else 块这也许是那些初级开发人员最负罪的之一。下面的示例很好地说明了当你被认为 If-Else 很棒时会发生什么:只需删除 else 块即可简化此过程,如下图:看起来更专业吧?你会发现,实际上根本不需要其他块。像在这种情况下一样,你想要在满足特定条件的情况下执行某些操作并立即返回。价值分配如果你要根据提供的某些输入为变量分配新值,请停止 If-Else 废话,一种更具可读性的方法。尽管很简单,但它却很糟糕。首先,If-Else 很容易在这里被开关取代。但是,我们可以通过完全删除 else 来进一步简化此代码。如果不使用 else,则我们将剩下干净的可读代码。请注意,我也将样式更改为快速返回而不是单返回语句。如果已经找到正确的值,继续测试一个值根本没有意义。前提条件检查通常,我发现,如果方法提供了无效的值,则继续执行是没有意义的。假设我们从以前就有了 DefineGender 方法,要求提供的输入值必须始终为 0 或 1。应用保护子句防御性编码技术,你将检查方法的输入值,然后继续执行方法。至此,我们确保仅在值落在预期范围内时才执行主逻辑。现在,IF 也已被三元代替,因为不再需要在结尾处默认返回"未知"。将 If-Else 转换为字典,完全避免 If-Else假设您需要执行一些操作,这些操作将根据某些条件进行选择,我们知道以后必须添加更多操作。也许有人倾向于使用久经考验的 If-Else。如果添加新操作,则只需简单地添加其他内容即可。很简单 但是,就维护而言,这种方法不是一个好的设计。知道我们以后需要添加新的操作后,我们可以将 If-Else 重构为字典。可读性已大大提高,并且可以更轻松地推断出该代码。注意,仅出于说明目的将字典放置在方法内部。您可能希望从其他地方提供它。扩展应用程序,完全避免使用 If-Else这是一个稍微高级的示例。通过用对象替换它们,知道何时甚至完全消除 If。通常,您会发现自己不得不扩展应用程序的某些部分。作为初级开发人员,您可能会倾向于通过添加额外的 If-Else(即 else-if)语句来做到这一点。举这个说明性的例子。在这里,我们需要将 Order 实例显示为字符串。首先,我们只有两种字符串表示形式:JSON 和纯文本。在此阶段使用 If-Else 并不是什么大问题,如果我们可以轻松替换其他,只要如前所述即可。知道我们需要扩展应用程序的这一部分,这种方法绝对是不可接受的。上面的代码不仅违反了"打开/关闭"原则,而且阅读得不好,还会引起可维护性方面的麻烦。正确的方法是遵循 SOLID 原则的方法,我们通过实施动态类型发现过程(在本例中为策略模式)来做到这一点。重构这个混乱的过程的过程如下:使用公共接口将每个分支提取到单独的策略类中。动态查找实现通用接口的所有类。根据输入决定执行哪种策略。替换上面示例的代码如下所示。是的,这是更多代码的方式。它要求您了解类型发现的工作原理。但是动态扩展应用程序是一个高级主题。我只显示将替换 If-Else 示例的确切部分。如果要查看所有涉及的对象,请查看此要点。让我们快速浏览一下代码。方法签名保持不变,因为调用者不需要了解我们的重构。首先,获取实现通用接口 IOrderOutputStrategy 的程序集中的所有类型。然后,我们建立一个字典,格式化程序的 displayName 的名称为 key,类型为 value。然后从字典中选择格式化程序类型,然后尝试实例化策略对象。最后,调用策略对象的 ConvertOrderToString。
2023年02月17日
72 阅读
0 评论
0 点赞
2023-02-17
网站都变成灰色了,它是怎么实现的?
每逢大事时,全网网站和APP都会出现变灰的画面,具体怎么实现可参照以下。 先来感受一下变灰后的效果。 这种灰色的效果怎么实现的呢?如何做到图片、文字、按钮都变灰的效果呢?方案1:换一套灰色的 UI,那显然成本太大了,用脚指头想一想就知道不太可能。方案2:用魔法!!不好意思,还真被你猜中了!在网页端按下 F12,打开开发者模式,用元素选择器定位到 HTML 标签上,在「样式」的面板中往下翻,就可以看到这样一段代码。代码-webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); -o-filter: grayscale(100%); filter: grayscale(100%); filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);那这段代码是什么意思呢?直接把 filter grayscale 复制到搜索引擎里看一下。当参数为 0 的时候,颜色是正常的。然后依次试一下 60% 100% 可以看到图片逐渐变成灰黑色filter 函数可以用来改变图像的显示效果,用于 CSS 的 filter 属性。除了 grayscale 函数,可选项还有以下这些:可以看到,目前的主流浏览器版本都支持 grayscale 函数,比如说 PC 端的 Chrome、edge、Firefox、Opera、Safari 等等,除了 IE。 下面介绍几种让整个网页变黑的方法,直接贴代码第一种:修改CSS文件html { filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); -webkit-filter: grayscale(100%); }第二种:在网页的标签内加入以下代码<style type="text/css"> html { filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); -webkit-filter: grayscale(100%);} </style>第三种:修改标签加入内联样式<html style="filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); -webkit-filter: grayscale(100%);">第四种:作者本人用的CSS代码body *{ -webkit-filter: grayscale(100%); /* webkit */ -moz-filter: grayscale(100%); /*firefox*/ -ms-filter: grayscale(100%); /*ie9*/ -o-filter: grayscale(100%); /*opera*/ filter: grayscale(100%); filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); filter:gray; /*ie9- */ }
2023年02月17日
85 阅读
0 评论
0 点赞
2023-02-17
vue项目中使用elementUI的el-tabs组件跳转卡死问题
解决方案1:在页面上使用了el-tabs元素的页面(log.vue),使用el-row el-col元素来包裹el-tabs元素,也可以解决页面卡死问题<tempalte> <div class="log-box"> <el-row> <el-col :span="24"> <el-tabs> <el-tab-pane>1111</el-tab-pane> <el-tab-pane>22222</el-tab-pane> </el-tabs> </el-col> </el-row> </div> </template>解决方案2:在el-tabs标签上面,加一个兄弟节点–空的块级元素<tempalte> <div class="log-box"> <div> </div> <el-tabs> <el-tab-pane>1111</el-tab-pane> <el-tab-pane>22222</el-tab-pane> </el-tabs> </div> </template>此块级元素,要占位dom内容,但不设置宽高,即不影响页面为主;解决方案3:降级elementUI版本到2.6.3,或者升级vue版本到2.6x+解决方案4:vue(2.5.2)版本过低时 elment版本过高,会出现这个问题,解决方法:终端输入 npm audit fix 命令执行即可
2023年02月17日
74 阅读
0 评论
0 点赞
1
...
22
23
24
...
27