百搜论坛欢迎您的加入!
adimg adimg
 
昨日:篇  今日:篇   总帖:篇   会员:
今日:0    总帖:10
baby
1794
Adobe Photoshop是 Adobe 公司历史上最大规模的一次产品升级,它集成图像扫描、编辑修改、图像制作、广告创意,图像输入与输出于一体,深受广大平面设计人员和电脑美术爱好者的喜爱。它可以编辑和合成多个图层中的位图,支持图层遮罩、图像合成和包含RGB、CMYK、CIELAB、专色通道和双色调等多种颜色模型。除了位图之外,它还具有编辑或渲染文本、矢量图形(特别是通过剪辑路径)、3D图形和视频。Photoshop的功能可以通过Photoshop插件、独立于PS图象处理软件开发和分发的程序来扩展,这些程序可以在其内部运行并提供增强的或者是全新的功能。【软件名称】:Adobe Photoshop CC 2022【安装环境】:Windows【下载链接】:https://pan.baidu.com/s/1gCPcyUQukQzcPC5EWxkxHw?pwd=memm 安装教程 1、下载软件安装包,鼠标右击压缩包,选择【解压到当前文件夹】。鼠标右击【Set-up】安装程序,选择【以管理员身份运行】。2、选择软件安装位置,点击界面上灰色的小文件夹图标,然后点击【更改位置】设置软件的安装路径。建议安装在除C盘以外的磁盘,可在D盘或其它盘创建一个新的文件夹。3、在桌面上找到并打开安装好的软件永久解锁
0 0 597天前
baby
1614
photosho最新2022激活码,Adobe Photoshop2022是Adobe公司最新的一款强大且使用的图像处理软件,是我们在日常生活工作中不可或缺的一款软件。如果我们要自由的实用ps的话就需要将其激活,但是激活需要购买正版ps才有的序列号激活码。大部分人都没有购买正版的ps却想使用这款方便的软件,为此小编给大家带来了pscc2022激活账户和序列号分享,如果大家有能力的话还请支持正版软件!pscc2022激活账户和序列号分享注册序列号:1045-1001-8097-5415-4545-1125注册序列号:1045-1200-1432-0104-0000-2517注册序列号:1045-1104-1855-1872-4339-64251045-1001-8097-5415-4545-11251045-1200-1432-0104-0000-2517最新Adobe Photoshop CS6序列号,可用 photoshop cs6 序列号:1330-1065-9944-2689-8304-01121330-1692-9902-6314-3617-75011330-1118-3520-6264-1054-36301330-1068-5620-4840-9508-19151330-1815-5938-9647-9527-45101330-2647-3943-2099-8061-54521330-0139-7505-5736-6124-07381330-0078-4913-6943-4948-24081330-7502-4530-1561-2996-46031330-1274-2696-0241-4106-68851330-6123-7653-7222-0443-41721330-5973-8481-5440-3018-57971330-0464-2511-9015-4578-68491330-8548-8533-1217-4746-15431330-1454-7003-6156-4495-78971330-1666-2067-5404-7633-3386最新Adobe Photoshop CS5序列号,可用ps cs5序列号:1330-1907-7983-5260-0401-41191330-1207-8543-1665-6187-68041330-1727-8083-9545-8144-41551330-1570-6911-1944-1775-42091330-1642-2756-9196-6949-77621330-1009-5948-8414-3502-08621330-1454-4321-1366-3255-4554最新Adobe Photoshop CS4序列号,可用ps cs4序列号:1330-1394-9102-0008-1704-82731330-1716-7461-1191-7643-72441330-1902-7469-1977-6114-12111330-1170-1002-7856-5023-07771330-1795-2880-5375-9721-53921330-1221-6824-4838-0308-68231330-1283-7461-4574-7002-25041330-1082-3503-2270-3738-67381330-1776-8671-6289-7706-29161330-1567-6599-8775-4155-3745最新Adobe Photoshop CS3序列号,可用ps cs3序列号:1330-1651-1449-2141-5933-28101330-1171-1107-1383-7434-5901330-1132-3743-3852-4421-38571330-1703-9518-0182-8709-24401330-1770-4356-5280-6440-71351045-1327-6200-1164-8677-49501045-1084-6341-6905-7261-71541045-1380-6674-5614-0950-96711045-1423-6436-0168-7941-17391045-1189-6296-3291-6041-10481045-1084-6341-6905-7261-71541045-1380-6674-5614-0950-96711045-0502-9715-8471-5218-7925最新Adobe Photoshop CS2(9.0)序列号,可用ps cs2(9.0)序列号:1045-1412-5685-1654-6343-14311045-1830-7483-3749-8386-58961045-0502-9715-8471-5218-79251045-1423-6436-0168-7941-17391045-1189-6296-3291-6041-10481045-1084-6341-6905-7261-71541045-1380-6674-5614-0950-9671最新Adobe Photoshop 8.0序列号,可用ps 8.0序列号:1045-0502-9715-8471-5218-79251045-1423-6436-0168-7941-17391045-1189-6296-3291-6041-10481045-1084-6341-6905-7261-71541045-1380-6674-5614-0950-9671
0 0 597天前
baby
1025
各位小伙伴面试的时候,经常会碰到面试官问一些高并发相关的业务场景,这篇文章帮助进入开发行业不久的程序猿了解如何简单实现抢购相关的业务流程,帮助大家梳理下思路。下面以 CRMEB 开源商城为例,了解下秒杀活动的创建流程。首先通过数据验证后,接下来开启事务来保证数据的一致性,然后创建秒杀商品,之后将库存写入 Redis 缓存中,这块后面优化思路里面会提到。用户下单时同样先开启事务,进行原子性操作,经过库存检测等验证后,创建成功后预扣除库存、积分抵扣等操作。后续会进行创建后置事件,例如订单记录、消息推送、订单超时自动取消、计算订单佣金、支付提醒等功能都可以放在后置事件中。下面从几个方面简单说下优化思路:数据库作为最终数据存储的地方,数据的准确性是放在第一位的,为了防止商品出现超卖的情况,一般会通过锁来解决,悲观锁 / 乐观锁,配合事务来一起使用,数据量大的情况下可以考虑读写分离,上云数据库。为了缓解网络 IO 和服务器压力,还可以将商品、库存等信息放在缓存中搭配使用,这样既能提高用户访问体验,还能减轻数据库访问压力,后续扣库存可以搭配消息队列来进行处理。可以部署多台服务器共同承担压力,有效降低服务器故障几率,保证秒杀业务统的高可用。可以通过 CDN 过滤大量的静态文件请求,服务端提前将数据放入缓存进行预热,加大服务器的吞吐量。作为电商项目,其中秒杀模块一种常见的促销方式,常用于刺激用户消费,往往商品一上架就被抢购一空。这类活动的特点就是用时比较短,瞬时并发量高,类似的还有 12306 抢票,淘宝双十一等。服务器的处理资源是有限的,为了避免出现超载导致服务器宕机,访问量过高导致服务器被压垮,这种情况下除了部署多台服务器以外还可以进行限流操作,防止恶意攻击和刷单,这块常用的有令牌桶算法和漏桶算法,相对来说令牌桶算法会尽可能的压榨服务器性能,建议优先使用令牌桶算法进行限流。为了应对短时间大量的读写高峰,可以考虑加入消息队列来进行削峰、解耦,业务线可以进行拆分,积分、库存、优惠券等操作可以放入不同的消息队列中进行异步消费,降低请求耗时,来提高服务吞吐量。有不懂不明白之处可以在下方留言源码附件已经打包好上传到百度云了,大家自行下载即可~链接: https://pan.baidu.com/s/14G-bpVthImHD4eosZUNSFA?pwd=yu27提取码: yu27百度云链接不稳定,随时可能会失效,大家抓紧保存哈。如果百度云链接失效了的话,请留言告诉我,我看到后会及时更新~GIT 项目推荐:包含多端免授权可商用附件地址:https://gitee.com/ZhongBangKeJi
0 0 608天前
baby
1107
安装安装依赖,这里请特别注意下版本yarn add monaco-editor@0.29.1 yarn add monaco-editor-webpack-plugin@5.0.0 复制代码配置 webpack 插件// vue.config.js ... const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin') module.export = { ... configureWebpack: { name: name, resolve: { alias: { '@': resolve('src'), }, }, plugins: [new MonacoWebpackPlugin()], }, ... } 复制代码请注意 monaco-editor-webpack-plugin 和 monaco-editor 的对应关系,否则可能会出现无法运行的情况。monaco-editor-webpack-pluginmonaco-editor7.*.*>= 0.31.06.*.*0.30.*5.*.*0.29.*4.*.*0.25.*, 0.26.*, 0.27.*, 0.28.*3.*.*0.22.*, 0.23.*, 0.24.*2.*.*0.21.*1.9.*0.20.*1.8.*0.19.*1.7.*0.18.*简易 SQL 编辑器先给大家上干货!<template> <div ref="codeContainer" class="editor-container" :style="{ height: height + 'px' }" /> </template> <script> import * as monaco from 'monaco-editor' /** * VS Code 编辑器 * * 通过 getEditorVal 函数向外传递编辑器即时内容 * 通过 initValue 用于初始化编辑器内容。 * 编辑器默认 sql 语言,支持的语言请参考 node_modules\monaco-editor\esm\vs\basic-languages 目录下~ * 编辑器样式仅有 'vs', 'vs-dark', 'hc-black' 三种 */ export default { name: 'MonacoEditor', props: { initValue: { type: String, default: '', }, readOnly: Boolean, language: { type: String, default: 'sql', }, height: { type: Number, default: 300, }, theme: { type: String, default: 'vs', }, }, data() { return { monacoEditor: null, // 语言编辑器 } }, computed: { inputVal() { return this.monacoEditor?.getValue() }, }, watch: { inputVal() { if (this.monacoEditor) { this.$emit('change', this.monacoEditor.getValue()) } }, theme() { this.setTheme(this.theme) }, height() { this.layout() }, }, mounted() { this.initEditor() }, beforeDestroy() { if (this.monacoEditor) { this.monacoEditor.dispose() } }, methods: { initEditor() { if (this.$refs.codeContainer) { this.registerCompletion() // 初始化编辑器,确保dom已经渲染 this.monacoEditor = monaco.editor.create(this.$refs.codeContainer, { value: '', // 编辑器初始显示文字 language: 'sql', // 语言 readOnly: this.readOnly, // 是否只读 Defaults to false | true automaticLayout: true, // 自动布局 theme: this.theme, // 官方自带三种主题vs, hc-black, or vs-dark minimap: { // 关闭小地图 enabled: false, }, tabSize: 2, // tab缩进长度 }) } this.setInitValue() }, focus() { this.monacoEditor.focus() }, layout() { this.monacoEditor.layout() }, getValue() { return this.monacoEditor.getValue() }, // 将 initValue Property 同步到编辑器中 setInitValue() { this.monacoEditor.setValue(this.initValue) }, setTheme() { monaco.editor.setTheme(this.theme) }, getSelectionVal() { const selection = this.monacoEditor.getSelection() // 获取光标选中的值 const { startLineNumber, endLineNumber, startColumn, endColumn } = selection const model = this.monacoEditor.getModel() return model.getValueInRange({ startLineNumber, startColumn, endLineNumber, endColumn, }) }, setPosition(column, lineNumber) { this.monacoEditor.setPosition({ column, lineNumber }) }, getPosition() { return this.monacoEditor.getPosition() }, }, } </script> <style lang="scss" scoped></style> 复制代码相关功能获取选中代码 getSelectionVal() { const selection = this.monacoEditor.getSelection() // 获取光标选中的值 const { startLineNumber, endLineNumber, startColumn, endColumn } = selection const model = this.monacoEditor.getModel() return model.getValueInRange({ startLineNumber, startColumn, endLineNumber, endColumn, }) }, 复制代码替换选中代码insertStringInTemplate(str) { const selection = this.monacoEditor.getSelection() // 获取光标选中的值 const { startLineNumber, endLineNumber, startColumn, endColumn } = selection const model = this.monacoEditor.getModel() const textBeforeSelection = model.getValueInRange({ startLineNumber: 1, startColumn: 0, endLineNumber: startLineNumber, endColumn: startColumn, }) const textAfterSelection = model.getValueInRange({ startLineNumber: endLineNumber, startColumn: endColumn, endLineNumber: model.getLineCount(), endColumn: model.getLineMaxColumn(model.getLineCount()), }) this.monacoEditor.setValue(textBeforeSelection + str + textAfterSelection) this.monacoEditor.focus() this.monacoEditor.setPosition({ lineNumber: startLineNumber, column: startColumn + str.length, }) }, 复制代码处理光标位置 setPosition(column, lineNumber) { this.monacoEditor.setPosition({ column, lineNumber }) }, getPosition() { return this.monacoEditor.getPosition() }, 复制代码自定义 SQL 库表提示,并保留原有 SQL 提示首先由后端提供具体的库表信息:export const hintData = { adbs: ['dim_realtime_recharge_paycfg_range', 'dim_realtime_recharge_range'], dimi: ['ads_adid', 'ads_spec_adid_category'], } 复制代码然后根据已有库表信息进行自定义 AutoCompleteimport * as monaco from 'monaco-editor' import { language } from 'monaco-editor/esm/vs/basic-languages/sql/sql' const { keywords } = language export default { ... mounted() { this.initEditor() }, methods: { ... registerCompletion() { const _that = this monaco.languages.registerCompletionItemProvider('sql', { triggerCharacters: ['.', ...keywords], provideCompletionItems: (model, position) => { let suggestions = [] const { lineNumber, column } = position const textBeforePointer = model.getValueInRange({ startLineNumber: lineNumber, startColumn: 0, endLineNumber: lineNumber, endColumn: column, }) const tokens = textBeforePointer.trim().split(/\s+/) const lastToken = tokens[tokens.length - 1] // 获取最后一段非空字符串 if (lastToken.endsWith('.')) { const tokenNoDot = lastToken.slice(0, lastToken.length - 1) if (Object.keys(_that.hintData).includes(tokenNoDot)) { suggestions = [..._that.getTableSuggest(tokenNoDot)] } } else if (lastToken === '.') { suggestions = [] } else { suggestions = [..._that.getDBSuggest(), ..._that.getSQLSuggest()] } return { suggestions, } }, }) }, // 获取 SQL 语法提示 getSQLSuggest() { return keywords.map((key) => ({ label: key, kind: monaco.languages.CompletionItemKind.Enum, insertText: key, })) }, getDBSuggest() { return Object.keys(this.hintData).map((key) => ({ label: key, kind: monaco.languages.CompletionItemKind.Constant, insertText: key, })) }, getTableSuggest(dbName) { const tableNames = this.hintData[dbName] if (!tableNames) { return [] } return tableNames.map((name) => ({ label: name, kind: monaco.languages.CompletionItemKind.Constant, insertText: name, })) }, initEditor() { if (this.$refs.codeContainer) { this.registerCompletion() // 初始化编辑器,确保dom已经渲染 this.monacoEditor = monaco.editor.create(this.$refs.codeContainer, { value: '', // 编辑器初始显示文字 language: 'sql', // 语言 readOnly: this.readOnly, // 是否只读 Defaults to false | true automaticLayout: true, // 自动布局 theme: this.theme, // 官方自带三种主题vs, hc-black, or vs-dark minimap: { // 关闭小地图 enabled: false, }, tabSize: 2, // tab缩进长度 }) } this.setValue(this.value) }, } } 复制代码编辑器 resize resize() { this.monacoEditor.layout() }, 复制代码编辑器设置主题注意!设置主题并非在编辑器实例上修改的哦! setTheme() { monaco.editor.setTheme(this.theme) }, 复制代码SQL 代码格式化编辑器自身不支持 sql 格式化(试了下 JavaScript 是支持的),所以用到了 sql-formatter 这个库。import { format } from 'sql-formatter' ... format() { this.monacoEditor.setValue( format(this.monacoEditor.getValue(), { indentStyle: 'tabularLeft', }), ) }, ... 复制代码右键菜单汉化需要安装以下两个库npm install monaco-editor-nls --save npm install monaco-editor-esm-webpack-plugin --save-dev 复制代码具体用法可以直接去 www.npmjs.com/package/mon… 里面看,我就不搬运了~记得销毁编辑器对象哦 beforeDestroy() { if (this.monacoEditor) { this.monacoEditor.dispose() } }, 复制代码踩坑下面是我遇到的几个坑。最新版本的 Monaco Editor 已经使用了 ES2022 的语法,所以老项目可能会出现编译不过的问题。所以我把版本调低了一些。在最初调试编辑器的时候出现了无法编辑的情况,后来发现是同事用到了 default-passive-events 这个库来关闭 chrome 的 Added non-passive event listener to a scroll-blocking <some> event. Consider marking event handler as 'passive' to make the page more responsive 警告。结果拦截一些 event。如何快速去看懂 Monaco Editor一开始我看它的官方文档是非常懵的,各种接口、函数、对象的定义,完全不像是个前端库那么好理解。鼓捣了好久才慢慢找到门路。先看示例查看它的 playground,上面其实是有一些功能可以直接找到的。查看它在 github 上的 /samples 目录,里面也有不少示例。去掘金这类网站上找别人写的示例,能有不少启发。再看 API了解了自己所需要的功能相关的代码,再去看它文档的 API 就会发现容易理解多了。逐步发散理解更多关联功能。源码附件已经打包好上传到百度云了,大家自行下载即可~链接: https://pan.baidu.com/s/14G-bpVthImHD4eosZUNSFA?pwd=yu27 提取码: yu27百度云链接不稳定,随时可能会失效,大家抓紧保存哈。如果百度云链接失效了的话,请留言告诉我,我看到后会及时更新~开源地址码云地址:http://github.crmeb.net/u/defuGithub 地址:http://github.crmeb.net/u/defu
0 0 618天前
admin
1212
苹果开发者账号(个人类型)申请流程 2022年最新版教程1.登录苹果官网,找到苹果开发者中心https://developer.apple.com/苹果开发者账号(个人类型)申请流程 2022年最新版教程如图,点击右边上会员中心按钮苹果开发者账号(个人类型)申请流程 2022年最新版教程2.在苹果开发者中心的登录界面,点击注册按钮苹果开发者账号(个人类型)申请流程 2022年最新版教程温馨提示:建议您新注册APPleid哦点击注册appleid跳转到新用户注册页面苹果开发者账号(个人类型)申请流程 2022年最新版教程根据您个人的真实信息填写根据页面流程完成appleid的注册苹果开发者账号(个人类型)申请流程 2022年最新版教程点击提交之后会进入邮箱和手机号验证页面苹果开发者账号(个人类型)申请流程 2022年最新版教程验证邮箱苹果开发者账号(个人类型)申请流程 2022年最新版教程验证手机号苹果开发者账号(个人类型)申请流程 2022年最新版教程之后会跳转到用户协议界面,点击第一个统一按钮,去掉下面的不同意按钮,点击右边下角的继续按钮即可完成注册苹果开发者账号(个人类型)申请流程 2022年最新版教程到了这个页面已经完成了新的appleid注册成为个人开发者的流程这一步还没有付费给苹果公司,但是已经能够享受到一些apple开发者的基础权限了3.正式开始注册成为苹果的个人开发者账号苹果开发者账号(个人类型)申请流程 2022年最新版教程点击页面底部的加入开发者计划页面会自动跳转到开发者介绍页面你可以在这里了解苹果开发者的一些常规介绍苹果开发者账号(个人类型)申请流程 2022年最新版教程在导航栏的右侧有一个加入按钮【ENROLL】点击进入正式的申请流程4.选择个人开发者计划,进行下一步苹果开发者账号(个人类型)申请流程 2022年最新版教程点击底部的继续按钮苹果开发者账号(个人类型)申请流程 2022年最新版教程会跳转到下一步苹果开发者账号(个人类型)申请流程 2022年最新版教程使用新的 Apple Developer app 注册。2020年新版苹果个人开发者账号注册流程第一步:首先用一部苹果手机,在APPstore里面搜索【Apple Developer】好的,打开苹果手机或平板苹果开发者账号(个人类型)申请流程 2022年最新版教程点击appstore苹果开发者账号(个人类型)申请流程 2022年最新版教程搜索Apple Developer并安装好,之后点击打开苹果开发者账号(个人类型)申请流程 2022年最新版教程登录或者新注册——我们这里是新注册苹果开发者账号,所以要选择【现在注册】点击之后会弹出界面苹果开发者账号(个人类型)申请流程 2022年最新版教程选择登录了【设置】的appleid,或者选择登录一个其他的appleid——这里我们已经把在PC端注册的appleid登录了【设置】,所以直接选择登录苹果开发者账号(个人类型)申请流程 2022年最新版教程点击继续按钮苹果开发者账号(个人类型)申请流程 2022年最新版教程点击底部继续按钮苹果开发者账号(个人类型)申请流程 2022年最新版教程在页面输入中文,之后点击右边上【下一步】继续姓氏名字身份证号码手机号——中文输入即可,根据个人信息真实填写苹果开发者账号(个人类型)申请流程 2022年最新版教程进行拍照进行人脸识别拍照的时候请注意一定把自己拍清楚,脸部拍全,之后点击提交苹果开发者账号(个人类型)申请流程 2022年最新版教程提交根据本地网络环境,有时候很快,有时候要等一段时间提交成功之后,页面会自动跳转苹果开发者账号(个人类型)申请流程 2022年最新版教程这里的信息需要输入英文字符,不会英文,您可以输入拼音pinyin苹果开发者账号(个人类型)申请流程 2022年最新版教程全拼音,之后点击继续苹果开发者账号(个人类型)申请流程 2022年最新版教程选择注册苹果开发者账号类型我们这里注册的是个人,那就直接选择第一个苹果开发者账号(个人类型)申请流程 2022年最新版教程点击继续按钮苹果开发者账号(个人类型)申请流程 2022年最新版教程点击同意注册协议苹果开发者账号(个人类型)申请流程 2022年最新版教程点击同意继续苹果开发者账号(个人类型)申请流程 2022年最新版教程付费688元年费给苹果公司付费成功之后您的苹果个人开发者账号就注册完成了您的邮箱就会收到欢迎加入的邮件通知苹果开发者账号(个人类型)申请流程 2022年最新版教程苹果重要的事项都会通过邮件来通知哦!请养成关注苹果邮件的好习惯拉!iOS开发者账号购买或者代申请:
0 0 625天前
baby
1224
自 2016 年知识付费兴起,发展至今已有 6 年,如今的知识付费市场,竞争只增不减,要求日益提高,你来我往间,充分演绎出了市场的优胜劣汰,同样,平台讲师也面临着众多市场考验,那么,一个合格的知识付费系统,到底应该具备哪些功能来适应市场发展呢?这些功能又该如何为平台讲师助力呢?系统功能可以有很多,内容矩阵、营销功能、系统功能、服务功能等等,其中与平台讲师最直接相关的,就是一个系统的内容矩阵,这是讲师的直接产物,是讲师塑造个人品牌的关键,今天,我们就以 CRMEB 知识付费系统为例,来了解一下知识付费系统的内容矩阵! 多元化内容展现形式图文、音频、视频、直播...... 这都可以是课程的展现形式,对用户而言,有了这些课程,就可以随时随地进行学习,可以反复听、反复学,巩固学习成果,还可以根据个人需求,设置个性化的学习计划。对平台讲师而言,也能一次面对多名用户,打破时间、地点的局限,减少重复工作,提高课程内容质量,还能接收用户反馈,综合考量对课程进行调整。其中,直播课程讲师还可以增加与用户的互动,能更直接的与用户进行交流,有利于社群运营。2、助学工具辅助为课程匹配相关的资料、题库练习、考试功能,可以帮助用户巩固知识、练习检验、查漏补缺,用户的很多疑惑都能通过查询资料解决,为讲师节省了很多解答时间,也能让用户形成使用习惯,增强用户粘性。3、精品专栏除此之外,CRMEB 知识付费系统还将精品课程进行归纳,整理成专题课程,再由相关专题课程构成专栏课程,这样的分类管理,方便用户查询,也能根据用户的学习动态推荐相关进阶课程,培养用户的长期使用习惯,让同类型进阶课程产品保持可观复购率。这样的功能设置也有利于讲师的长期曝光,吸引用户关注讲师,为讲师吸引可靠稳定的用户群体。知识付费系统的这些功能,不仅能有效吸引留存用户,还能为平台讲师打造个人品牌助力不少,同时,为讲师吸引到人气,自然也会为平台加分不少,互相成就,共存共荣。当然,一个讲师想要实现长期向好发展,还是需要具备过硬的专业知识实力,充分发挥出来自我知识才能,就会有意想不到的收获,也希望 CRMEB 的知识付费系统能继续更新优化,帮助更多内容创作者,在这个平台实现个人知识变现,更好的助力知识付费行业稳步发展。 源码附件已经打包好上传到百度云了,大家自行下载即可~链接: https://pan.baidu.com/s/14G-bpVthImHD4eosZUNSFA?pwd=yu27 提取码: yu27百度云链接不稳定,随时可能会失效,大家抓紧保存哈。如果百度云链接失效了的话,请留言告诉我,我看到后会及时更新~开源地址码云地址:https://gitee.com/ZhongBangKeJi/crmeb_zzff_classGithub 地址:https://gitee.com/ZhongBangKeJi/crmeb_zzff_class
0 0 630天前
admin
902
linux安装Zend Optimizer很简单,首先确定自己的PHP版本(必须版本是小于5.3的)PS: 查看系统PHP版本可以运行 php -v一、下载安装wget http://downloads.zend.com/optimizer/3.3.3/ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gztar -xzvf ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz./ZendOptimizer-3.3.3-linux-glibc23-i386/install.sh基本上一路回车就可以了,安装会自动检测php.ini和apache的路径。二、配置#php -v 查看安装成功与否问题:Failed loading /usr/local/Zend/lib/Optimizer-3.3.0/php-5.1.x/ZendOptimizer.so:/usr/local/Zend/lib/Optimizer-3.3.0/php-5.1.x/ZendOptimizer.so: cannot restore segment protafter reloc: Permission deniedFailed loading /usr/local/Zend/lib/Optimizer-3.3.0/php-5.1.x/ZendOptimizer.so:/usr/local/Zend/lib/Optimizer-3.3.0/php-5.1.x/ZendOptimizer.so: cannot restore segment protafter reloc: Permission denied说明没有加载zend optimizer模块。大概可能有三种情况:1. 对于 php.ini文件路径问题(使用apache的 phpinfo()显示php.ini路径正确与否,一般不会有错 )解决方法:php -i | grep php.ini 就可以找到当前php使用的php.ini文件。比如, 编译安装时没有指定php.ini存放路径, 那么默认php.ini会放在/usr/local/lib下面。最好是在编译PHP时指定PHP配置文件的路径 如: -with-config-file-path=/usr/local/etc。而一般zend默认安装 php.ini在/etc/目录下面或/usr/local/Zend/etc 所以需要在安装的时候手工指定我们php.ini文件存放的位置。如果不知道现在的PHP的配置文件具体位置的话 可以查看一下:php -i | grep php.ini如果php optimizer安装好了,却发现不能加载的话可以手工指定读取php.ini文件的位置。然后php -c /etc/ -v如果可以看到zend opt正确加载,那么做个连接就好了,连接到php默认读取的php.ini路径下面。比如ln -sf /etc/php.ini /usr/local/lib[root@localhost /]# php -vPHP 5.1.6 (cli) (built: Jan 22 2006 12:59:19)Copyright (c) 1997-2006 The PHP GroupZend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologieswith Zend Extension Manager v1.0.9, Copyright (c) 2003-2006, by Zend Technologieswith Zend Optimizer v3.3.2, Copyright (c) 1998-2006, by Zend Technologies正常了,phpinfo()看到的当然也是一样的。2. 调用库文件的问题(一般是apache调用问题)有的时候还有一些情况下 php -i 或php -v 在控制台下可以看到zend opt,但是 apache 执行phpinfo()的输出里面却看不到。一般是因为 调用php的时候zend模块不能加载, 比如AS4里面 就是这样的。如as4下面默认的php安装后读取库文件的路径是在/usr/lib下面,而php.ini文件中加载zend模块是在zend安装路径的lib目录中。比如/usr/local/Zend/lib,这时apache在执行php时不能加载zend模块。所以在控制台里php -v 可以正常,但是apache却没有加载zend。解决办法:先把zend模块copy到/usr/lib里面 然后改一下php.ini里面zend加载模块部分。3. 最恶心的SElinux问题(最常出现的权限问题)SElinux导致PHP不能使用zend/lib下的库文件。所以,即便是做了link也不行。只能够拷贝库文件到有权限的目录,或者直接关掉SElinux。但我已 在 /etc/selinux/config 的 SELINUX=disabled 关掉SElinux 还是不行, 再网络查询发现在你保证SElinux 被disable后,还执行下chcon -t texrel_shlib_t 命令:如: chcon -t texrel_shlib_t /usr/local/Zend/lib/Optimizer-3.3.0/php-5.2.x/ZendOptimizer.so(这个文件视具体执行文件)就可以了。我的解决的情况是:1. 关闭SElinux2. 运行 #chcon -t texrel_shlib_t /usr/local/Zend/lib/Optimizer3.3.0/php-5.1.x/ZendOptimizer.so就可以了。4.更悲剧的问题Apache2+PHP5不能加载Zend Optimizer的问题安装没有问题,但是不能加载。到Apache的日志目录,查看error日志。可以看到一些报错信息:PHP Warning: Zend Optimizer does not support this version of PHP - please upgrade to thelatest version of Zend Optimizer in Unknown on line 0[Sat Apr 28 17:56:47 2007] [notice] Apache configured -- resuming normal operations[Sat Apr 28 18:00:01 2007] [notice] SIGUSR1 received. Doing graceful restartFailed loading /usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so:/usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so: undefined symbol:compiler_globalsFailed loading /usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so:/usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so: undefined symbol:compiler_globals[Sat Apr 28 18:00:01 2007] [notice] Digest: generating secret for digest authentication ...[Sat Apr 28 18:00:01 2007] [notice] Digest: done[Sat Apr 28 18:00:01 2007] [notice] Apache configured -- resuming normal operations[Sat Apr 28 18:04:15 2007] [notice] SIGUSR1 received. Doing graceful restartFailed loading /usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so:/usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so: undefined symbol:compiler_globalsFailed loading /usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so:/usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so: undefined symbol:compiler_globalsFailed loading /usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so:/usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so: undefined symbol:compiler_globalsFailed loading /usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so:/usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so: undefined symbol:compiler_globals[Sat Apr 28 18:04:16 2007] [notice] Digest: generating secret for digest authentication ...[Sat Apr 28 18:04:16 2007] [notice] Digest: done[Sat Apr 28 18:04:16 2007] [notice] Apache configured -- resuming normal operations其中最突出的一条记录是:PHP Warning: Zend Optimizer does not support this version of PHP -please upgrade to the latest version of Zend Optimizer in Unknown online 0还有一条突出的是:/usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so: undefined symbol:compiler_globalsFailed loading /usr/local/Zend/lib/Optimizer_TS-3.2.6/php-5.2.x/ZendOptimizer.so:原因分析老实说,这个问题以前也没有遇到过。安装配置过不少Apache2+PHP5+ZendOptimizer,但是没有遇到这个情况。于是以compiler_globals作为关键字,在google上搜索,找答案。后来找到一个来自Zend.com上的链接,进去后,得到了解答。原文连接:http://www.zend.com/forums/index.php?t=msg&goto=9604&S=其中有一位朋友的留言,说明了问题:i just notice that Zend Optimizer only support prefork mode.Supported Web Servers:Apache 1.3.xApache 2.0.x (Prefork mode only)Apache 2.2.x (Prefork mode only)IIS 5, 6if you want to install Zend Optimizer ,hope this help you.也就是说,导致加载ZendOptimizer失败的原因,是因为编译安装Apache2的时候,指定了worker模式 --with-mpm=worker,Apache2运行在线程模式下。而ZendOptimizer只支持进程模式。也就是Apache2的prefork模式--with-mpm=prefork 。于是查看当前的Apache2是否支持了worker模式:# httpd -lCompiled in modules:core.cworker.chttp_core.cmod_so.c果然,是支持worker模式。解决办法其实解决的办法很简单,只需要按照下面三个步骤进行,就可以了:以 --with-mpm=prefork 参数重新编译安装Apache2重新编译安装PHP重新安装ZendOptimizer在程序都重新编译安装完后,重启Apache,就可以了。一些思考所谓"鱼肉与熊掌,两者不可兼得",目前Apache2+PHP,ZendOptimizer就只支持prefork模式。两者之间只能由使用者自己根据自己的实际需求来抉择了。希望zend尽快开发出支持Apache worker模式的ZendOptimizer吧。
0 0 663天前
admin
1111
积分商城,现在是随处可见,服装、餐饮、电商、超市... 各行各业都有自己的积分商城,如今已经成为了众多企业、门店运营的标配。虽然使用者众多,但在不同的经营主体手中,积分商城却发挥出了截然不同的效果。有的人用积分商城进行口碑积累与用户促活,但有的人还只是把积分商城作为一个兑换礼品的工具,完全没有发挥出积分商城的作用,其中区别就在于没有进行良好的积分商城运营。那运营良好的积分商城,到底会产生什么作用呢?接下来就一起来看看吧!1、促活再可靠的客户,也需要维持一定的活跃度,设置签到、做任务领积分机制,用积分兑换礼品、优惠券等,这样就能吸引用户通过参加签到、做任务领积分,形成进入商城的习惯。2、拉新在积分商城运营中,可以用购物拼单的形式进行拉新,拼单的低价可以作为积分商城的特权优惠,用拼单活动,引导老客户进行分享传播,提升购物量、稳定老客户的同时,还能收获一部分新客户群体,取得双赢的效果。当然,出了拼单外,也可以结合系统其他的营销功能进行拉新。留存调动用户积极性的前提是,要让用户认可积分的价值,和促活一样,不仅要推动用户去获取积分,还要去使用积分,所以搭配一些营销玩法,把积分、产品和用户结合为一体,通过活动、内容和渠道等方式,形成一套提升用户留存运营的体系和策略,实现高效用户运营。用户流量池用户流量池是一个很好的分析工具,当用户体量足够大时,对用户数据进行分析、加工,就能得到可靠的依据及参考方向,这对于积分政策维护、调整都有很大的参考价值。以上几种只是积分商城的部分作用,如果搭配合适的营销手段,合理运营,一定会收获更多不一样的效果。 源码附件已经打包好上传到百度云了,大家自行下载即可~链接: https://pan.baidu.com/s/14G-bpVthImHD4eosZUNSFA?pwd=yu27 提取码: yu27百度云链接不稳定,随时可能会失效,大家抓紧保存哈。如果百度云链接失效了的话,请留言告诉我,我看到后会及时更新~开源地址码云地址:http://github.crmeb.net/u/defuGithub 地址:http://github.crmeb.net/u/defu
0 0 664天前
admin
874
导读最糟糕的密码不是弱密码,而是根本没有密码。作为系统管理员,您必须确保每个用户帐户都有一个强密码。接下来我将简要的解释如何在   中查找密码为空的帐户。在进入主题之前,让我们快速回顾一下Shadow文件及其用途。Shadow文件在 RHEL 系统中,用户密码经过哈希处理并存储在名为 /etc/shadow 的安全文件中。Shadow密码文件包含用户帐户的用户身份验证信息和密码过期策略(password aging)的详细信息。Shadow文件归 root 用户所有,且只有超级用户才能读取。您可以使用以下 验证Shadow文件的所有权和权限:#  ls  -l /etc/shadow  ---------- 1 root root 618 Apr  7 07:52 /etc/shadow下面给出了影子文件中示例行的典型结构:user1:$6$5ps/XV21$EFmQ463GJZnsdF/:19089:0:99999:7:::您可能已经知道,Shadow文件有九个字段,每个字段间采用冒号分隔。接下来我们快速浏览一下每个字段。字段1(登录名)- 标识了一个登录帐号,同文件/etc/passwd中的相同。字段2(加密后密码) -包含用户对应的采用散列加密方式加密后的密码。如果此字段开头有一个感叹号 (!),则表示该用户帐户已被锁定。如果此字段为空,则该用户没有密码。字段3(上次更改)- 此字段显示最后一次修改密码的时间。如果此字段包含 0,则用户在下次登录时将被强制更改密码。字段4(最短天数)- 此字段显示在允许用户更改密码之前必须经过的最短天数(mindays)。您可以使用带有 -m 选项的 chage  来更改此字段的值。字段5(最大天数)- 显示用户密码过期前密码有效的最大天数 (maxdays)。如果该字段为 0,则表示此功能已禁用。可以使用带有 -M 选项的 chage 命令来更改该字段的值。字段6(警告)- 表示用户在密码过期前收到更改密码警告的天数(警告日)。您可以使用带有 -W 选项的 chage 命令或带有 -w 选项的 passwd 命令来更改此值。字段7(密码过期)- 定义用户能够使用过期密码登录的最大允许天数。这可以使用带有 -I 标志的 chage 命令或带有 -i 标志的 passwd 命令来更改。字段8(帐户到期) - 定义用户的帐户将到期且不再可用的天数。您可以使用带有 -E 选项的 chage 命令更改此字段的值。字段 9(保留)- 该字段保留供将来使用。如上所述,加密后的密码存储在Shadow文件中每个条目的第二个字段中,就在用户名之后。因此,如果影子文件中的第二个字段为空,则用户没有密码。下面,我向您展示一个查找所有无密码用户帐户的示例。查找所有没有密码的账户要检测所有没有密码的本地用户帐户,只需以 root 用户身份运行以下命令:# awk -F: '$2 == "" { print $1, "has empty password!. Please set a strong password ASAP!!" }' /etc/shadow下面是上述命令的输出示例:ostechnix has empty password!. Please set a strong password ASAP!!您还可以使用 getent 命令,同时结合 grep 和 cut 命令来识别 Linux 中的无密码的本地用户帐户,其命令如下所示:# getent shadow | grep -Po '^[^:]*(?=::)'也可以采用下面的命令:# getent shadow | grep '^[^:]*::' | cut -d: -f1以上所有命令将仅列出密码为空的本地用户帐户。如果要同时列出所有密码为空的帐户,下面的两个命令都可以实现该功能:# getent shadow | grep -Po '^[^:]*(?=:.?:)' # getent shadow | grep '^[^:]*:.\?:' | cut -d: -f1查看特定账户的密码状态上述命令将列出所有没有密码的帐户。您还可以使用带有 -S 标志的 passwd 命令检查特定用户帐户的密码状态。# passwd -S ostechnix下面是一个上述命令的输出示例:ostechnix NP 2022-04-07 0 99999 7 -1 (Empty password.)passwd命令将指示给定用户帐户的密码状态。可能的值是:LK – 该帐户被锁定。NP - 该帐户没有密码。PS – 该帐户有一个可用的密码。注意:在基于 Debian 的系统中,密码状态将分别用L、N、P来标识。在Linux中设置账户密码您可以作为无密码用户登录,但并不推荐!您必须设置至少包含 8 个字符的强密码,且密码中要包括大写字母、小写字母、特殊字符和数字。要在 Linux 中为用户帐户设置密码,请以 root 用户身份执行passwd 命令,如下所示:作为根用户:# passwd ostechnix使用上述命令时,请将ostechnix 替换为您自己的用户名。现在我们用passwd命令来检查帐户的密码状态:# passwd -S ostechnix输出示例如下:ostechnix PS 2022-04-07 0 99999 7 -1 (Password set, SHA512 crypt.)在Linux中锁定账户有时,您想要锁定一个没有密码的账户。如果是这样,首先如上所述找到密码为空的用户,以root用户的身份执行带有 -l 标志的 passwd 命令来锁定账户,其命令如下所示:# passwd -l ostechnix下面是上述命令的输出示例:Locking password for user ostechnix.passwd: Success现在我们再来检查下帐户的状态:# passwd -S ostechnix在Linux中解锁账户要在 Linux 中解锁无密码用户,请以root身份执行 passwd 命令或带有-p的usermod命令,其命令如下:# passwd ostechnix输入两次密码以解锁密码。使用 usermod 命令解锁用户密码为空的用户是不可能的,您可以使用 usermod -p 设置密码来解锁用户的密码。# usermod -postechnix总结 在本教程中,我们解释了什么是shadow文件以及该文件在 Linux 中的用途。然后,我们讨论了在 Linux 中查找所有没有密码帐户的各种命令。最后,我们学习了如何为用户设置密码,以及如何在 Linux 中锁定和解锁用户。
0 0 665天前
admin
918
学习 不能着急,要按照一定的方法和建议慢慢来 , 每个人 都有一套适合自己的方法,Linux的概念,版本,命令,功能,软件,用途,等等这些都是很好的切入点, 学习Linux分为几个层次,个人觉得 庖丁解牛差不多 。 学习Linux 就是把它的知识点、难点全部罗列出来,一个一个的由浅入深的分析,学习,掌握。学习Linux有很多东西 要注意 ,我觉得首先要注意思路。Linux是由Unix演变而来,最终 它 的基础上 的 很多应用软件 服务也 都是基于Unix的理念 而来 ,可能现在你觉得这是件很简单的道理。无非是把原来UNIX的任务机制中的多服务分散开来,然后有个总的业务逻辑来进行迅速的组合成一个新的服务,但是其中还是有很多不同的。   建议1:首先要明白Linux的设计理念缘自Unix,从这里着手,自己亲自动手安装一个系统 。我 建议你从Redhat开始。现在Redhat的安装基本上都是学习Windows的手法,很图形化了。只要遵循 指引 就可以很容易地让系统运行起来。我认为初学者应该从这个开始,这样会快很多。因为Linux上的软件包都是由不同的开发团队做的 或个人做的 ,所以我们一般人不知道 怎么来 安装,Redhat可以把这些东西组织管理起来,然后把这些系统软件卖给大家。因为他在这个行业非常精通 和出众 , 而卖软件是次要的,卖服务是它的主要的业务。 Redhat早已停止出个人版 而专门 做企业 客户了 。 但你还是可以去使用它。 装好操作系统后,建议你先学BASH SHELL编程。如果你想成为一名Oracl DBA,学好SHELL将为你的工作带来极大的便利。同时对理解Linux系统的启动和一些软件的调试有很大的帮助。比如说你可以很清楚的看到Linux的整个系统启动一个过程,至少在将来处理问题时,你会对问题有一个清晰的认识。 精通 BASH是 一个必要的条件 。这里主要说的就是精通,不是企业一般的了解,因为你只有精通了,用的 时间越来越长,你会发现它可以帮我们很方便的干很多其他事情。建议2: 学习和掌握一款 Linux编辑器 。 Emacs或Vim 都可以 。 我个人建议是Vim。 毕竟Vim几乎成了最基础的编辑器了,SSH上服务器,直接Vim。还是比较方便的,再结合快捷键,使用久了效率也是不低的。学习Linux有几种常用的服务软件 要必须 会用,像apache配置Web,用bind实现DNS,还有pro-ftp来搭建FTP,文件服务就会用到samba。 学习和掌握这些软件是学习Linux的成果和Linux的价值体现之一。为什么要学习Linux?学习Linux的用途在哪?就是体现在这些软件使用所带来的价值中。Linux系统本身自己运行没有什么意义,它的稳定高效运行让这些软件发挥出他们的价值才是关键。当然这里有一本书,我上面讲到的都会带你去实验,就是 。 这本书 从基本出发,命令实验相结合 ,书中有大量的命令以及详细应用。真的应该去一下建议3:了解 常用的服务端软件的 安装和配置,至少了解Apache,bind,samba这几种。这几种是最基础的Linux服务功能,掌握好这几种功能,相当于一只脚已经迈进了Linux活学活用的大门。在Linux中有很多命令需要掌握,这些命令将帮助 我们来 诊断问题并进行系统管理。如配置网卡 的命令 ifconfig,查找相关文件 命令 find,行编辑的命令sed、awk,网络状态 命令 netstat、ping等。这些 命令 可以通过实践来学习。也可以从书查找,当然最好是熟记于心,这样才能在用到的时候就拿出 来。不用花时间查找。建议4:在实践中学习掌握一到两种数据库,如现在主流的两种数据库MySQL和Oracle。MySQL用的人可以多些也比较简单,速度又快, 在一些web应用领域用的比较多 。如果你想自己学习甲骨文, 可以去它的官方站点多查看帮助 ,几乎所有使用的功能都可以在 上边 找到。建议5:建议 学习好 TCP/IP 这些基础的网络知识对TCP/IP协议层有一个深入的了解,我认为 你应该在学习Linux之前就应该具备 。 但 我还是建议你复习一下 。 很多时候, 网络问题占据了Linux问题的一大部分,具备了熟练地网络知识,对网络有一个全面的了解,往往再出了问题之后,会大体判断出问题所在。这里有一个小技巧:我平时都把常用的网络协议图都打印出来贴在自己的办公桌上 , 没事的时候看几眼以便 劳记在心,出问题的时候就可以自己知道是哪边网络信息不通 。有了上边的 五 点建议, 我一本好书 相信你在学习Linux的过程中不会再迷茫。来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69955379/viewspace-2890862/,如需转载,请注明出处,否则将追究法律责任。
0 0 665天前
快速发帖 高级模式
联系站长 友链申请桂ICP备19000949号-1     桂ICP备19000949号-1
您的IP:18.191.5.239,2024-04-19 07:19:29,Processed in 0.20608 second(s).
免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。
Powered by HadSky 7.12.9
免责声明
1、本站资源,均来自网络,版权归原作者,所有资源和文章仅限用于学习和研究目的 。
2、不得用于商业或非法用途,否则,一切责任由该用户承担 !
如果觉得本文还不错请点个赞或者打赏点轻币哦~
拒绝伸手党,拿走请回复,尊重楼主,尊重你我他~

侵权删除请致信 E-Mail:207882320@qq.com