• 关于

    参数控制问题怎么解决

    的搜索结果

问题

Logstore 开启投递 报错 参数错误,请检查参数后重试 返回 管理控制台>>

美男来了 2019-12-01 20:23:40 1615 浏览量 回答数 1

回答

放在 Controller 层有两个问题,一个是如果被多个 Controller 层的方法调用就失去复用性。另外,一般参数校验和实例组装又耦合在一起,所以 Controller 会存在大量这样的代码,导致“坏味道”。当然,可以考虑通过 Hibernate Validator 解决问题。但是,本质上的思想是尽可能将通用的逻辑下层哟。业务逻辑层返回类型是 BO 对象,那么如果参数校验失败,怎么把具体哪个参数校验失败信息返回呢?一般情况下,我们会抛出自定义运行时异常,异常信息通过错误枚举类来控制。

景凌凯 2020-04-22 17:48:54 0 浏览量 回答数 0

问题

HotFix补丁不生效排查步骤该怎么做?

猫饭先生 2019-12-01 20:54:53 888 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

问题

控制台输出密码是明文,如何解决这个问题,不然别人看日志会得到密码信息:报错

kun坤 2020-06-06 13:13:03 0 浏览量 回答数 1

回答

看你发的那个例子的页面有个markPoint参数的symbolSize属性控制的,官方用的一个自定义的函数,这里你可以自己定义######尝试着添加了这个属性 怎么设置都无效。。。跪求解决方法。。被这个问题困扰了两天了到现在都还没解决。。######markPoint : {                                 symbol:'emptyCircle',                                 symbolSize : function (v){                                     return 10 + v/100                                 }, }

kun坤 2020-06-08 10:07:46 0 浏览量 回答数 0

回答

"看你发的那个例子的页面有个markPoint参数的symbolSize属性控制的,官方用的一个自定义的函数,这里你可以自己定义######尝试着添加了这个属性 怎么设置都无效。。。跪求解决方法。。被这个问题困扰了两天了到现在都还没解决。。###### markPoint : {                                 symbol:'emptyCircle',                                 symbolSize : function (v){                                     return 10 + v/100                                 }, }"

montos 2020-06-04 16:25:39 0 浏览量 回答数 0

回答

首先,你是复制复制注册那块的程序,是纯复制代码还是得利servlet,如果是后者建议重新自己手动创一个只复制逻辑代码,再检查下sql语句和web.xml映射最后打断点,或者用logger打印一下,看看具体怎么运行的 打印出来入库单号看看是不是和数据库存进去的一样,进一步确定问题 是打印servlet上的那些对象数据? 首先看在jsp页面上是否获取到数据,可以写一个简单的js,console.log一下,然后看看表单提交的时候是否调转到bean的处理方法里面,如果bean里面的方法没有响应,说明跳转的路径有问题,可以仔细检查下路径,如果成转到了bean的方法里,用控制台System.out一下有没有值,没有值的话说明参数的传递和获取有问题,如果到这都没有问题,检查数据库的字段和代码里的实体类的类型什么的,遇到这种问题一定要先判断问题出在哪个环节,然后在针对其解决,如果我的回答对您有所帮助,请您采纳,如果仍然有问题,把代码贴出来看看,谢谢!

爱吃鱼的程序员 2020-08-21 14:12:40 0 浏览量 回答数 0

问题

Vue面试题汇总【精品问答】

问问小秘 2020-05-25 18:02:28 11132 浏览量 回答数 2

回答

这个问题只能是泛泛而谈,具体到每一项在实际中都会有更深层次的细节问题需要考究。抛开具体的案例不说,我就谈谈我自己的一些做法。不过有一个前提:对我来说,我自己既是设计师也是前端,所以我做设计的时候会刻意忘记许多平面设计的原则,或者刻意考虑很多前端实践的原则,因此我写代码和我做设计这两件事情对我个人而言其实是一体的。之所以要先讲这个原则,是因为很多人强调“精确到像素的页面实现”,但如果前端工程师自己并不做 UI 设计,想达到这一目标可以说几乎不可能,而且我个人也觉得是没有必要的——如你题目所说,有那么多的变量影响(平台/设备等差异),强求所有的 outcome 都做到“像素级精确”真的有意义吗?倒是“渐进增强”或“平稳退化”更具实践价值。字体问题让不同的平台显示自身的最佳字体这在技术上是完全可行的,具体请见拙作:Web 中文字体应用指南(请不要在意文中对微软雅黑的评价,纯属个人偏好)排版问题你的问题描述的不是很清楚,我不太明白“当字体大小不一样时”这个条件和行高之间的对应关系对你来说困惑在哪里?仅就行距来说,遵循一个原则就可以:行高用相对单位不同的区域可能会显示不同尺寸的字体,但是不要用绝对尺寸来区隔它们,而是要学会使用 rem 和 em。有了这两个单位来控制字体大小,再加上 line-height 采用相对值,那么行高将始终保持在一个统一的,协调的比例。特定的地方如果要改变行高的比例,也不一定非要使用绝对值(绝对值的问题就是不能自适应),如果你使用 Sass/Less/Stylus 这样的预处理工具,可以利用一下各种函数计算出一个相对比例。详细参数?第三个问题也比较含糊,你所说的“详细参数”,具体是指?如果涉及到盒模型,别忘了调整 box-sizing,也别忘了重置各种元素的初始状态(比如用 Normalize),这样可以较好的应对跨平台的尺寸定义。尽量不要在具体的样式定义里写固定值,而是预先初始化一些值作为变量,然后在具体样式中依靠相互关系来写计算值——当然,前提是你可以用预处理器/CSS3 的 calc()(尚未标准化)。关于这一点,请参考一下 Bootstrap 的做法,很典型的范例。另外,使用框架(如 Bootstrap)可以在尺寸和布局定义上省下很大的功夫,但是框架在很多精细自定义布局的场景下显得冗余/死板。我倒是推荐使用像 Susy 这样的工具库,相当灵活强大,生成的 CSS 也非常漂亮。平台差异这是一个大坑,设备碎片化所带来的兼容性处理问题可能永远也无法完美解决。这个话题并不适合在这里铺开来谈,那得说多少啊……我觉得还是和设计师多多沟通才是王道,不要试图用技术来解决本来可以通过沟通而解决的问题。(我在最开始所说的前提主要就是为了表明这一点——我和“自己”沟通没有障碍)动态效果动态效果即使没有在设计图上呈现,也不代表设计师没有考虑过吧?这事儿你得和设计师沟通啊,确定了有哪些动态效果之后才能考虑工程上的实现以及跨平台的兼容性处理等问题,否则的话你甭做动态效果就好了呗。至于确定之后如何做具体的技术实现,我建议不要重复造轮子了,现成的效果库一堆一堆的,直接拿来用吧。当动态效果遇到兼容性问题的时候还可以直接救助于作者或社区。CSS 复用/模块化这事儿不是设计师需要考虑的,这可是开发者的职责范围。如果设计师在做设计稿的时候还要想办法把样式模块化给梳理出来,那他的负担也太大了点。复用/模块化这件事情,如果团队里没有使用框架系统需要从头做起,那我觉得还是不要过早优化为好,有很多抉择不到一定时候是很难明朗化的,所以开发届也一再强调不要过度/过早优化。然而很多时候由于项目时间紧压力大,如果没有章法的干活,等到想重构想模块化的时候,就发现代码已经乱的不可收拾了。可怎么办呢?重构本来就是一种无法速成并且迅速见效的技术,高质量的重构需要整个团队的共同努力。你问怎么疏离?这问题可太大了,你叫我怎么回答呢……(在这里,我真的歪着脖子想了半天该怎么回答)这样吧,分两个情况:倘若整个团队只有一个人(或极个别人)来负责复用/模块化,那么这个(些)人就尽可能不要去写具体的样式了,而是把精力集中在审核其他成员提交的代码上,严格控制代码提交的规范和粒度。通过代码审核来分析和设计样式模块化的方案,然后每隔一段时间召集其他成员一起进行一次重构(重构的具体方案取决于之前代码审核的结果)。不断重复这个过程(其实就是快速迭代的思想)。如果整个团队都有能力在自己负责的部分做复用/模块化设计,那么在项目开始前先一起讨论一下大致的规则约束。团队可以在一些比较成熟的方案里选择一个,比如 BEM/OOCSS/ACSS/SMACSS 等等,一起学习一下,达成共识。接下来照做就是了,定期的审核与讨论还是需要的,不过就不用太过频繁了(因为大家水平都够高呗)。我知道在这个问题上你期望更具体的技术/技巧,但实话说这个话题实在太宽泛了些,很难找个合适的切入点。建议题主还是少一些这样泛泛的问题吧,先挑个方向走进去,碰到具体问题再拿出来大家一起研究研究,这样才比较容易出干货——比如我上面提到的那几个模块化方案,不妨先挑一个试试看再说如何?

a123456678 2019-12-02 02:21:39 0 浏览量 回答数 0

问题

程序员报错行为大赏-配置报错

问问小秘 2020-06-11 13:18:25 6 浏览量 回答数 1

问题

移动推送 iOS SDK: iOS推送失败排查步骤该怎么做?

猫饭先生 2019-12-01 22:03:41 809 浏览量 回答数 0

问题

【精品回答】移动推送

montos 2020-04-09 09:57:11 14 浏览量 回答数 1

问题

阿里云-小程序云

问问小秘 2020-04-07 18:45:54 24 浏览量 回答数 1

回答

那个colModel里面的json 数据 这样设置 {name:'count', width:70, sorttype:'integer',formatter:'integer'}######sortable:true, sortname : 'score', sortorder : "desc", 这3个都设置了吗? 还有就是你先打印出后台返回的数据,看看是不是返回的时候就没有排对。 ###### 引用来自“刘新全”的评论sortable:true, sortname : 'score', sortorder : "desc", 这3个都设置了吗? 还有就是你先打印出后台返回的数据,看看是不是返回的时候就没有排对。 谢谢回答。jqGrid这三个属性缺省的情况下就是这样的吧?控制台里看到后台返回的JSON数据排序是对的。希望继续帮我解答! ######那个datatype怎么是local,应该是json吧!######可以是local的,因为我是本地获取好了的JSON数据对象给了jqGrid###### 引用来自“无脑仔的小明”的评论那个colModel里面的json 数据 这样设置 {name:'count', width:70, sorttype:'integer',formatter:'integer'} 感谢!我在colModel里加了 sorttype:'integer'排序就正常啦!再次感谢!也谢谢其它朋友!###### jqGrid排序问题及解决办法 ######请问楼主,我的jqgrid有个列可以排序,点击此列也能把需要排序的列名和排序方式传给后台,但当我对grid执行一次reloadGrid后,再点击这个排序列,相应的两个参数sord和sidx就没有,后台无法排序,请问这种情况怎么处理?###### 引用来自“wanghu1983”的评论 请问楼主,我的jqgrid有个列可以排序,点击此列也能把需要排序的列名和排序方式传给后台,但当我对grid执行一次reloadGrid后,再点击这个排序列,相应的两个参数sord和sidx就没有,后台无法排序,请问这种情况怎么处理? 如果我没记错的话,在reloadGrid的时候(判断)需要:  $node[0].grid.beginReq(); $node[0].grid.endReq(); $node.jqGrid('clearGridData'); $node.jqGrid('setGridParam', {data: jsonData}); $node.trigger('reloadGrid'); 说明:$node是表格的jq节点,jsonData是后台返回的json数据 ######谢谢 @零七九三 答复,我已通过jqGrid的onSortCol函数解决

kun坤 2020-06-14 06:26:57 0 浏览量 回答数 0

回答

那个colModel里面的json 数据 这样设置 {name:'count', width:70, sorttype:'integer',formatter:'integer'}######sortable:true, sortname : 'score', sortorder : "desc", 这3个都设置了吗? 还有就是你先打印出后台返回的数据,看看是不是返回的时候就没有排对。 ###### 引用来自“刘新全”的评论sortable:true, sortname : 'score', sortorder : "desc", 这3个都设置了吗? 还有就是你先打印出后台返回的数据,看看是不是返回的时候就没有排对。 谢谢回答。jqGrid这三个属性缺省的情况下就是这样的吧?控制台里看到后台返回的JSON数据排序是对的。希望继续帮我解答! ######那个datatype怎么是local,应该是json吧!######可以是local的,因为我是本地获取好了的JSON数据对象给了jqGrid###### 引用来自“无脑仔的小明”的评论那个colModel里面的json 数据 这样设置 {name:'count', width:70, sorttype:'integer',formatter:'integer'} 感谢!我在colModel里加了 sorttype:'integer'排序就正常啦!再次感谢!也谢谢其它朋友!###### jqGrid排序问题及解决办法 ######请问楼主,我的jqgrid有个列可以排序,点击此列也能把需要排序的列名和排序方式传给后台,但当我对grid执行一次reloadGrid后,再点击这个排序列,相应的两个参数sord和sidx就没有,后台无法排序,请问这种情况怎么处理?###### 引用来自“wanghu1983”的评论 请问楼主,我的jqgrid有个列可以排序,点击此列也能把需要排序的列名和排序方式传给后台,但当我对grid执行一次reloadGrid后,再点击这个排序列,相应的两个参数sord和sidx就没有,后台无法排序,请问这种情况怎么处理? 如果我没记错的话,在reloadGrid的时候(判断)需要:  $node[0].grid.beginReq(); $node[0].grid.endReq(); $node.jqGrid('clearGridData'); $node.jqGrid('setGridParam', {data: jsonData}); $node.trigger('reloadGrid'); 说明:$node是表格的jq节点,jsonData是后台返回的json数据 ######谢谢 @零七九三 答复,我已通过jqGrid的onSortCol函数解决

montos 2020-06-02 12:12:31 0 浏览量 回答数 0

回答

那个colModel里面的json 数据 这样设置 {name:'count', width:70, sorttype:'integer',formatter:'integer'}######sortable:true, sortname : 'score', sortorder : "desc", 这3个都设置了吗? 还有就是你先打印出后台返回的数据,看看是不是返回的时候就没有排对。 ###### 引用来自“刘新全”的评论sortable:true, sortname : 'score', sortorder : "desc", 这3个都设置了吗? 还有就是你先打印出后台返回的数据,看看是不是返回的时候就没有排对。 谢谢回答。jqGrid这三个属性缺省的情况下就是这样的吧?控制台里看到后台返回的JSON数据排序是对的。希望继续帮我解答! ######那个datatype怎么是local,应该是json吧!######可以是local的,因为我是本地获取好了的JSON数据对象给了jqGrid###### 引用来自“无脑仔的小明”的评论那个colModel里面的json 数据 这样设置 {name:'count', width:70, sorttype:'integer',formatter:'integer'} 感谢!我在colModel里加了 sorttype:'integer'排序就正常啦!再次感谢!也谢谢其它朋友!###### jqGrid排序问题及解决办法 ######请问楼主,我的jqgrid有个列可以排序,点击此列也能把需要排序的列名和排序方式传给后台,但当我对grid执行一次reloadGrid后,再点击这个排序列,相应的两个参数sord和sidx就没有,后台无法排序,请问这种情况怎么处理?###### 引用来自“wanghu1983”的评论 请问楼主,我的jqgrid有个列可以排序,点击此列也能把需要排序的列名和排序方式传给后台,但当我对grid执行一次reloadGrid后,再点击这个排序列,相应的两个参数sord和sidx就没有,后台无法排序,请问这种情况怎么处理? 如果我没记错的话,在reloadGrid的时候(判断)需要:  $node[0].grid.beginReq(); $node[0].grid.endReq(); $node.jqGrid('clearGridData'); $node.jqGrid('setGridParam', {data: jsonData}); $node.trigger('reloadGrid'); 说明:$node是表格的jq节点,jsonData是后台返回的json数据 ######谢谢 @零七九三 答复,我已通过jqGrid的onSortCol函数解决

kun坤 2020-05-31 21:44:55 0 浏览量 回答数 0

回答

"那个colModel里面的json 数据 这样设置 {name:'count', width:70, sorttype:'integer',formatter:'integer'}######sortable:true, sortname : 'score', sortorder : "desc", 这3个都设置了吗? 还有就是你先打印出后台返回的数据,看看是不是返回的时候就没有排对。 ###### 引用来自“刘新全”的评论sortable:true, sortname : 'score', sortorder : "desc", 这3个都设置了吗? 还有就是你先打印出后台返回的数据,看看是不是返回的时候就没有排对。 谢谢回答。jqGrid这三个属性缺省的情况下就是这样的吧?控制台里看到后台返回的JSON数据排序是对的。希望继续帮我解答! ######那个datatype怎么是local,应该是json吧!######可以是local的,因为我是本地获取好了的JSON数据对象给了jqGrid###### 引用来自“无脑仔的小明”的评论那个colModel里面的json 数据 这样设置 {name:'count', width:70, sorttype:'integer',formatter:'integer'} 感谢!我在colModel里加了 sorttype:'integer'排序就正常啦!再次感谢!也谢谢其它朋友!###### jqGrid排序问题及解决办法 ######请问楼主,我的jqgrid有个列可以排序,点击此列也能把需要排序的列名和排序方式传给后台,但当我对grid执行一次reloadGrid后,再点击这个排序列,相应的两个参数sord和sidx就没有,后台无法排序,请问这种情况怎么处理?###### 引用来自“wanghu1983”的评论 请问楼主,我的jqgrid有个列可以排序,点击此列也能把需要排序的列名和排序方式传给后台,但当我对grid执行一次reloadGrid后,再点击这个排序列,相应的两个参数sord和sidx就没有,后台无法排序,请问这种情况怎么处理? 如果我没记错的话,在reloadGrid的时候(判断)需要:  $node[0].grid.beginReq(); $node[0].grid.endReq(); $node.jqGrid('clearGridData'); $node.jqGrid('setGridParam', {data: jsonData}); $node.trigger('reloadGrid'); 说明:$node是表格的jq节点,jsonData是后台返回的json数据 ######谢谢 @零七九三 答复,我已通过jqGrid的onSortCol函数解决"

montos 2020-05-31 12:03:53 0 浏览量 回答数 0

问题

荆门开诊断证明-scc

游客5k2abgdj3m2ti 2019-12-01 22:09:00 1 浏览量 回答数 0

问题

【javascript学习全家桶】934道javascript热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:22 6202 浏览量 回答数 1

问题

深入分析字符编码之五-常见问题分析

夏天的日子 2019-12-01 21:13:23 4211 浏览量 回答数 0

问题

【精品回答】视频点播

montos 2020-04-09 09:57:05 5 浏览量 回答数 1

问题

H5技术百问——不懂H5你就OUT啦

yq传送门 2019-12-01 20:27:41 44227 浏览量 回答数 46

问题

错误码表:常见错误码表

行者武松 2019-12-01 22:00:58 2728 浏览量 回答数 0

问题

API常见错误码表上线-就帮你到这里了

仙游 2019-12-01 21:00:08 5576 浏览量 回答数 1

问题

【精品问答】Java技术1000问(1)

问问小秘 2019-12-01 21:57:43 38419 浏览量 回答数 12

问题

【精品回答】移动用户反馈

montos 2020-04-08 22:09:27 9 浏览量 回答数 1

回答

从业余程序员到职业程序员 程序员刚入行时,我觉得最重要的是把自己培养成职业的程序员。 我的程序员起步比同龄人都晚了很多,更不用说现在的年轻人了。我大学读的是生物专业,在上大学前基本算是完全没接触过计算机。军训的时候因为很无聊,我和室友每天跑去学校的机房玩,我现在还印象很深刻,我第一次走进机房的时候,别人问,你是要玩windows,还是dos,我那是完全的一抹黑。后来就只记得在机房一堆人都是在练习盲打,军训完,盲打倒是练的差不多了,对计算机就这么产生了浓厚的兴趣,大一的时候都是玩组装机,捣鼓了一些,对计算机的硬件有了那么一些了解。 到大二后,买了一些书开始学习当时最火的网页三剑客,学会了手写HTML、PS的基本玩法之类的,课余、暑假也能开始给人做做网站什么的(那个时候做网站真的好赚钱),可能那样过了个一年左右,做静态的网页就不好赚钱了,也不好找实习工作,于是就开始学asp,写些简单的CRUD,做做留言板、论坛这些动态程序,应该算是在这个阶段接触编程了。 毕业后加入了深圳的一家做政府行业软件的公司,一个非常靠谱和给我空间的Leader,使得自己在那几年有了不错的成长,终于成了一个职业的程序员。 通常来说,业余或半职业的程序员,多数是1个人,或者很小的一个团队一起开发,使得在开发流程、协作工具(例如jira、cvs/svn/git等)、测试上通常会有很大的欠缺,而职业的程序员在这方面则会专业很多。另外,通常职业的程序员做的系统都要运行较长的时间,所以在可维护性上会特别注意,这点我是在加入阿里后理解更深的。一个运行10年的系统,和一个写来玩玩的系统显然是有非常大差别的。 这块自己感觉也很难讲清楚,只能说模模糊糊有个这样的概念。通常在有兴趣的基础上,从业余程序员跨越到成为职业程序员我觉得不会太难。 编程能力的成长 作为程序员,最重要的能力始终是编程能力,就我自己的感受而言,我觉得编程能力的成长主要有这么几个部分: 1、编程能力初级:会用 编程,首先都是从学习编程语言的基本知识学起的,不论是什么编程语言,有很多共同的基本知识,例如怎么写第一个Hello World、if/while/for、变量等,因此我比较建议在刚刚开始学一门编程语言的时候,看看编程语言自己的一些文档就好,不要上来就去看一些高阶的书。我当年学Java的时候上来就看Think in Java、Effective Java之类的,真心好难懂。 除了看文档以外,编程是个超级实践的活,所以一定要多写代码,只有这样才能真正熟练起来。这也是为什么我还是觉得在面试的时候让面试者手写代码是很重要的,这个过程是非常容易判断写代码的熟悉程度的。很多人会说由于写代码都是高度依赖IDE的,导致手写很难,但我绝对相信写代码写了很多的人,手写一段不太复杂的、可运行的代码是不难的。即使像我这种三年多没写过代码的人,让我现在手写一段不太复杂的可运行的Java程序,还是没问题的,前面N年的写代码生涯使得很多东西已经深入骨髓了。 我觉得编程能力初级这个阶段对于大部分程序员来说都不会是问题,勤学苦练,是这个阶段的核心。 2、编程能力中级:会查和避免问题 除了初级要掌握的会熟练的使用编程语言去解决问题外,中级我觉得首先是提升查问题的能力。 在写代码的过程中,出问题是非常正常的,怎么去有效且高效的排查问题,是程序员群体中通常能感受到的大家在编程能力上最大的差距。 解决问题能力强的基本很容易在程序员群体里得到很高的认可。在查问题的能力上,首先要掌握的是一些基本的调试技巧,好用的调试工具,在Java里有JDK自带的jstat、jmap、jinfo,不在JDK里的有mat、gperf、btrace等。工欲善其事必先利其器,在查问题上是非常典型的,有些时候大家在查问题时的能力差距,有可能仅仅是因为别人比你多知道一个工具而已。 除了调试技巧和工具外,查问题的更高境界就是懂原理。一个懂原理的程序员在查问题的水平上和其他程序员是有明显差距的。我想很多的同学应该能感受到,有些时候查出问题的原因仅仅是因为有效的工具,知其然不知其所以然。 我给很多阿里的同学培训过Java排查问题的方法,在这个培训里,我经常也会讲到查问题的能力的培养最主要的也是熟练,多尝试给自己写一些会出问题的程序,多积极的看别人是怎么查问题的,多积极的去参与排查问题,很多最后查问题能力强的人多数仅仅是因为“无他,但手熟尔”。 我自己排查问题能力的提升主要是在2009年和2010年。那两年作为淘宝消防队(处理各种问题和故障的虚拟团队)的成员,处理了很多的故障和问题。当时消防队还有阿里最公认的技术大神——多隆,我向他学习到了很多排查问题的技巧。和他比,我排查问题的能力就是初级的那种。 印象最深刻的是一次我们一起查一个应用cpu us高的问题,我们两定位到是一段代码在某种输入参数的时候会造成cpu us高的原因后,我能想到的继续查的方法是去生产环境抓输入参数,然后再用参数来本地debug看是什么原因。但多隆在看了一会那段代码后,给了我一个输入参数,我拿这个参数一运行,果然cpu us很高!这种case不是一次两次。所以我经常和别人说,我是需要有问题场景才能排查出问题的,但多隆是完全有可能直接看代码就能看出问题的,这是本质的差距。 除了查问题外,更厉害的程序员是在写代码的过程就会很好的去避免问题。大家最容易理解的就是在写代码时处理各种异常情况,这里通常也是造成程序员们之间很大的差距的地方。 写一段正向逻辑的代码,大部分情况下即使有差距,也不会太大,但在怎么很好的处理这个过程中有可能出现的异常上,这个时候的功力差距会非常明显。很多时候一段代码里处理异常逻辑的部分都会超过正常逻辑的代码量。 我经常说,一个优秀程序员和普通程序员的差距,很多时候压根就不需要看什么满天飞的架构图,而只用show一小段的代码就可以。 举一个小case大家感受下。当年有一个严重故障,最后查出的原因是输入的参数里有一个是数组,把这个数组里的值作为参数去查数据库,结果前面输入了一个很大的数组,导致从数据库查了大量的数据,内存溢出了,很多程序员现在看都会明白对入参、出参的保护check,但类似这样的case我真的碰到了很多。 在中级这个阶段,我会推荐大家尽可能的多刻意的去培养下自己这两个方面的能力,成为一个能写出高质量代码、有效排查问题的优秀程序员。 3、编程能力高级:懂高级API和原理 就我自己的经历而言,我是在写了多年的Java代码后,才开始真正更细致的学习和掌握Java的一些更高级的API,我相信多数Java程序员也是如此。 我算是从2003年开始用Java写商业系统的代码,但直到在2007年加入淘宝后,才开始非常认真地学习Java的IO通信、并发这些部分的API。尽管以前也学过也写过一些这样的代码,但完全就是皮毛。当然,这些通常来说有很大部分的原因会是工作的相关性,多数的写业务系统的程序员可能基本就不需要用到这些,所以导致会很难懂这些相对高级一些的API,但这些API对真正的理解一门编程语言,我觉得至关重要。 在之前的程序员成长路线的文章里我也讲到了这个部分,在没有场景的情况下,只能靠自己去创造场景来学习好。我觉得只要有足够的兴趣,这个问题还是不大的,毕竟现在有各种开源,这些是可以非常好的帮助自己创造机会学习的,例如学Java NIO,可以自己基于NIO包一个框架,然后对比Netty,看看哪些写的是不如Netty的,这样会非常有助于真正的理解。 在学习高级API的过程中,以及排查问题的过程中,我自己越来越明白懂编程语言的运行原理是非常重要的,因此我到了后面的阶段开始学习Java的编译机制、内存管理、线程机制等。对于我这种非科班出身的而言,学这些会因为缺乏基础更难很多,但这些更原理性的东西学会了后,对自己的编程能力会有质的提升,包括以后学习其他编程语言的能力,学这些原理最好的方法我觉得是先看看一些讲相关知识的书,然后去翻看源码,这样才能真正的更好的掌握,最后是在以后写代码的过程中、查问题的过程中多结合掌握的原理,才能做到即使在N年后也不会忘。 在编程能力的成长上,我觉得没什么捷径。我非常赞同1万小时理论,在中级、高级阶段,如果有人指点或和优秀的程序员们共事,会好非常多。不过我觉得这个和读书也有点像,到了一定阶段后(例如高中),天分会成为最重要的分水岭,不过就和大部分行业一样,大部分的情况下都还没到拼天分的时候,只需要拼勤奋就好。 系统设计能力的成长 除了少数程序员会进入专深的领域,例如Linux Kernel、JVM,其他多数的程序员除了编程能力的成长外,也会越来越需要在系统设计能力上成长。 通常一个编程能力不错的程序员,在一定阶段后就会开始承担一个模块的工作,进而承担一个子系统、系统、跨多领域的更大系统等。 我自己在工作的第三年开始承担一个流程引擎的设计和实现工作,一个不算小的系统,并且也是当时那个项目里的核心部分。那个阶段我学会了一些系统设计的基本知识,例如需要想清楚整个系统的目标、模块的划分和职责、关键的对象设计等,而不是上来就开始写代码。但那个时候由于我是一个人写整个系统,所以其实对设计的感觉并还没有那么强力的感觉。 在那之后的几年也负责过一些系统,但总体感觉好像在系统设计上的成长没那么多,直到在阿里的经历,在系统设计上才有了越来越多的体会。(点击文末阅读原文,查看:我在系统设计上犯过的14个错,可以看到我走的一堆的弯路)。 在阿里有一次做分享,讲到我在系统设计能力方面的成长,主要是因为三段经历,负责专业领域系统的设计 -> 负责跨专业领域的专业系统的设计 -> 负责阿里电商系统架构级改造的设计。 第一段经历,是我负责HSF。HSF是一个从0开始打造的系统,它主要是作为支撑服务化的框架,是个非常专业领域的系统,放在整个淘宝电商的大系统来看,其实它就是一个很小的子系统,这段经历里让我最深刻的有三点: 1).要设计好这种非常专业领域的系统,专业的知识深度是非常重要的。我在最早设计HSF的几个框的时候,是没有设计好服务消费者/提供者要怎么和现有框架结合的,在设计负载均衡这个部分也反复了几次,这个主要是因为自己当时对这个领域掌握不深的原因造成的; 2). 太技术化。在HSF的阶段,出于情怀,在有一个版本里投入了非常大的精力去引进OSGi以及去做动态化,这个后来事实证明是个非常非常错误的决定,从这个点我才真正明白在设计系统时一定要想清楚目标,而目标很重要的是和公司发展阶段结合; 3). 可持续性。作为一个要在生产环境持续运行很多年的系统而言,怎么样让其在未来更可持续的发展,这个对设计阶段来说至关重要。这里最low的例子是最早设计HSF协议的时候,协议头里竟然没有版本号,导致后来升级都特别复杂;最典型的例子是HSF在早期缺乏了缺乏了服务Tracing这方面的设计,导致后面发现了这个地方非常重要后,全部落地花了长达几年的时间;又例如HSF早期缺乏Filter Chain的设计,导致很多扩展、定制化做起来非常不方便。 第二段经历,是做T4。T4是基于LXC的阿里的容器,它和HSF的不同是,它其实是一个跨多领域的系统,包括了单机上的容器引擎,容器管理系统,容器管理系统对外提供API,其他系统或用户通过这个来管理容器。这个系统发展过程也是各种犯错,犯错的主要原因也是因为领域掌握不深。在做T4的日子里,学会到的最重要的是怎么去设计这种跨多个专业领域的系统,怎么更好的划分模块的职责,设计交互逻辑,这段经历对我自己更为重要的意义是我有了做更大一些系统的架构的信心。 第三段经历,是做阿里电商的异地多活。这对我来说是真正的去做一个巨大系统的架构师,尽管我以前做HSF的时候参与了淘宝电商2.0-3.0的重大技术改造,但参与和自己主导是有很大区别的,这个架构改造涉及到了阿里电商众多不同专业领域的技术团队。在这个阶段,我学会的最主要的: 1). 子系统职责划分。在这种超大的技术方案中,很容易出现某些部分的职责重叠和冲突,这个时候怎么去划分子系统,就非常重要了。作为大架构师,这个时候要从团队的职责、团队的可持续性上去选择团队; 2). 大架构师最主要的职责是控制系统风险。对于这种超大系统,一定是多个专业领域的架构师和大架构师共同设计,怎么确保在执行的过程中对于系统而言最重要的风险能够被控制住,这是我真正的理解什么叫系统设计文档里设计原则的部分。 设计原则我自己觉得就是用来确保各个子系统在设计时都会遵循和考虑的,一定不能是虚的东西,例如在异地多活架构里,最重要的是如何控制数据风险,这个需要在原则里写上,最基本的原则是可接受系统不可用,但也要保障数据一致,而我看过更多的系统设计里设计原则只是写写的,或者千篇一律的,设计原则切实的体现了架构师对目标的理解(例如当时异地多活这个其实开始只是个概念,但做到什么程度才叫做到异地多活,这是需要解读的,也要确保在技术层面的设计上是达到了目标的),技术方案层面上的选择原则,并确保在细节的设计方案里有对于设计原则的承接以及执行; 3). 考虑问题的全面性。像异地多活这种大架构改造,涉及业务层面、各种基础技术层面、基础设施层面,对于执行节奏的决定要综合考虑人力投入、机器成本、基础设施布局诉求、稳定性控制等,这会比只是做一个小的系统的设计复杂非常多。 系统设计能力的成长,我自己觉得最重要的一是先在一两个技术领域做到专业,然后尽量扩大自己的知识广度。例如除了自己的代码部分外,还应该知道具体是怎么部署的,部署到哪去了,部署的环境具体是怎么样的,和整个系统的关系是什么样的。 像我自己,是在加入基础设施团队后才更加明白有些时候软件上做的一个决策,会导致基础设施上巨大的硬件、网络或机房的投入,但其实有可能只需要在软件上做些调整就可以避免,做做研发、做做运维可能是比较好的把知识广度扩大的方法。 第二点是练习自己做tradeoff的能力,这个比较难,做tradeoff这事需要综合各种因素做选择,但这也是所有的架构师最关键的,可以回头反思下自己在做各种系统设计时做出的tradeoff是什么。这个最好是亲身经历,听一些有经验的架构师分享他们选择背后的逻辑也会很有帮助,尤其是如果恰好你也在同样的挑战阶段,光听最终的架构结果其实大多数时候帮助有限。 技术Leader我觉得最好是能在架构师的基础上,后续注重成长的方面还是有挺大差别,就不在这篇里写了,后面再专门来写一篇。 程序员金字塔 我认为程序员的价值关键体现在作品上,被打上作品标签是一种很大的荣幸,作品影响程度的大小我觉得决定了金字塔的层次,所以我会这么去理解程序员的金字塔。 当然,要打造一款作品,仅有上面的两点能力是不够的,作品里很重要的一点是对业务、技术趋势的判断。 希望作为程序员的大伙,都能有机会打造一款世界级的作品,去为技术圈的发展做出贡献。 由于目前IT技术更新速度还是很快的,程序员这个行当是特别需要学习能力的。我一直认为,只有对程序员这个职业真正的充满兴趣,保持自驱,才有可能在这个职业上做好,否则的话是很容易淘汰的。 作者简介: 毕玄,2007年加入阿里,十多年来主要从事在软件基础设施领域,先后负责阿里的服务框架、Hbase、Sigma、异地多活等重大的基础技术产品和整体架构改造。

茶什i 2020-01-10 15:19:35 0 浏览量 回答数 0

回答

很多人电脑是不是会出现各种蓝屏故障问题啊,出现问题又不知道怎么样解决。 1.故障检查信息 *STOP 0x0000001E(0xC0000005,0xFDE38AF9,0x0000001,0x7E8B0EB4)KMODE_EXCEPTION_NOT_HANDLED * 其中错误的第一部分是停机码(Stop Code)也就是STOP 0x0000001E, 用于识别已发生错误的类型, 错误第二部分是被括号括起来的四个数字集, 表示随机的开发人员定义的参数(这个参数对于普通用户根本无法理解, 只有驱动程序编写者或者操作系统的开发人员才懂). 第三部分是错误名. 信息第一行通常用来识别生产错误的驱动程序或者设备. 2.推荐操作蓝屏第二部分是推荐用户进行的操作信息. 有时, 推荐的操作仅仅是一般性的建议; 有时, 也就是显示一条与当前问题相关的提示. 一般来说, 惟一的建议就是重启. 3.调试端口告诉用户内存转储映像是否写到磁盘商了, 使用内存转储映像可以确定发生问题的性质, 还会告诉用户调试信息是否被传到另一台电脑商, 以及使用了什么端口完成这次通讯. 蓝屏时的处理办法:1.重启有时只是某个程序或驱动程序一时犯错, 重启后有可能就会正常。 2.新硬件首先, 应该检查新硬件是否插牢, 这个被许多人忽视的问题往往会引发许多莫名其妙的故障. 如果确认没有问题, 将其拔下, 然后换个插槽试试, 并安装最新的驱动程序. 同时还应对照微软网站的硬件兼容类别检查一下硬件是否与操作系统兼容. 3.新驱动和新服务如果刚安装完某个硬件的新驱动, 或安装了某个软件, 而它又在系统服务中添加了相应项目, 在重启或使用中出现了蓝屏故障, 请到安全模式来卸载或禁用它们. 4.检查病毒比如冲击波和振荡波等病毒有时会导致Windows蓝屏死机, 因此查杀病毒必不可少. 同时一些木马间谍软件也会引发蓝屏, 所以最好再用相关工具进行扫描检查. 5.检查BIOS和硬件兼容性对于新装的电脑经常出现蓝屏问题, 应该检查并升级BIOS到最新版本, 同时关闭其中的内存相关项, 比如:缓存和映射. 另外, 还应该对照微软的硬件兼容列表检查自己的硬件. 还有就是, 如果主板BIOS无法支持大容量硬盘也会导致蓝屏, 需要对其进行升级. 6.检查系统曰志在开始-->菜单中输入:EventVwr.msc, 回车出现"事件查看器", 注意检查其中的"系统曰志"和"应用程序曰志"中表明"错误"的项. 7.最后一次正确配置 最后一次正确配置界面 一般情况下, 蓝屏都出现于更新了硬件驱动或新加硬件并安装其驱动后, 这时Windows 2K/XP提供的"最后一次正确配置"就是解决蓝屏的快捷方式. 重启系统, 在出现启动菜单时按下F8键就会出现高级启动选项菜单, 接着选择"最后一次正确配置". 常见的蓝屏代码 0X0000000操作完成 0X0000001不正确的函数 0X0000002系统找不到指定的文件 0X0000003系统找不到指定的路径 0X0000004系统无法打开文件 0X0000005拒绝存取 0X0000006无效的代码 0X0000007内存控制模块已损坏 0X0000008内存空间不足,无法处理这个指令 0X0000009内存控制模块位址无效 0X000000A环境不正确 0X000000B尝试载入一个格式错误的程序 0X000000C存取码错误 0X000000D资料错误 0X000000E内存空间不够,无法完成这项操作 0X000000F系统找不到指定的硬盘 0X0000010无法移除目录 0X0000011系统无法将文件移到其他的硬盘 0X0000012没有任何文件 0X0000019找不到指定扇区或磁道 0X000001A指定的磁盘或磁片无法存取 0X000001B磁盘找不到要求的装置 0X000001C打印机没有纸 0X000001D系统无法将资料写入指定的磁盘 0X000001E系统无法读取指定的装置 0X000001F连接到系统的某个装置没有作用 0X0000021文件的一部分被锁定,现在无法存取 0X0000024开启的分享文件数量太多 0X0000026到达文件结尾 0X0000027磁盘已满 0X0000036网络繁忙 0X000003B网络发生意外的错误 0X0000043网络名称找不到 0X0000050文件已经存在 0X0000052无法建立目录或文件 0X0000053 INT24失败 0X000006B因为代用的磁盘尚未插入,所以程序已经停止 0X000006C磁盘正在使用中或被锁定 0X000006F文件名太长 0X0000070硬盘空间不足 0X000007F找不到指定的程序 0X000045B系统正在关机 0X000045C无法中止系统关机,因为没有关机的动作在进行中 0X000046A可用服务器储存空间不足 0X0000475系统 BIOS无法变更系统电源状态 0X000047E指定的程序需要新的windows版本 0X000047F指定的程序不是windwos或ms-dos程序 0X0000480指定的程序已经启动,无法再启动一次 0X0000481指定的程序是为旧版的windows所写的 0X0000482执行此应用程序所需的程序库文件之一被损 0X0000483没有应用程序与此项操作的指定文件建立关联 0X0000484传送指令到应用程序无效 0X00005A2指定的装置名称无效 0X00005AA系统资源不足,无法完成所要求的服务 0X00005AB系统资源不足,无法完成所要求的服务 0X00005AC系统资源不足,无法完成所要求的服务 110 0x006E系统无法开启指定的装置或档案。 111 0x006F档名太长。 112 0x0070磁碟空间不足。 113 0x0071没有可用的内部档案识别字。 114 0x0072目标内部档案识别字不正确。 117 0x0075由应用程式所执行的IOCTL 呼叫不正确。 118 0x0076写入验证参数值不正确。 119 0x0077系统不支援所要求的指令。 120 0x0078此项功能仅在 Win32 模式有效。 121 0x0079 semaphore超过逾时期间。 122 0x007A传到系统呼叫的资料区域太小。 123 0x007B档名、目录名称或储存体标 124 0x007C系统呼叫层次不正确。 125 0x007D磁碟没有设定标 126 0x007E找不到指定的模组。 127 0x007F找不到指定的程序。 128 0x0080没有子行程可供等待。 129 0x0081 %1这个应用程式无法在 Win32 模式下执行。 130 0x0082 Attempt to use a file handle to an open disk partition for an operation other than raw disk I/O. 131 0x0083尝试将档案指标移至档案开头之前。 132 0x0084无法在指定的装置或档案,设定档案指标。 133 0x0085 JOIN 或 SUBST指令无法用於内含事先结合过的磁碟机。 134 0x0086尝试在已经结合的磁碟机,使用JOIN 或 SUBST 指令。 135 0x0087尝试在已经替换的磁碟机,使用 JOIN 或 SUBST 指令。 136 0x0088系统尝试删除未连结过的磁碟机的连结关系。 137 0x0089系统尝试删除未替换过的磁碟机的替换关系。 138 0x008A系统尝试将磁碟机结合到已经结合过之磁碟机的目录。 139 0x008B系统尝试将磁碟机替换成已经替换过之磁碟机的目录。 140 0x008C系统尝试将磁碟机替换成已经替换过之磁碟机的目录.

独步清客 2019-12-02 00:43:56 0 浏览量 回答数 0

回答

用上 FreeMarker 后,再也不需要 JSP了,JSP相对来说弱爆了,连 layout 功能都没有,layout 现在是基本配置了###### 引用来自“爪哇老妖”的答案 这个真可以有,JSP、Velocity、Freemarker这些都属于动态模版技术,HTML呢,直接就是静态模版技术,也许你会反问我可以用ajax来实现后台调用数据啊,可是我很担心你那页面的加载速度和用户体验,情况更严重的是,有些页面的效果是根据后台数据或参数来展示的,对于你的这个想法,持保留意见。。。 从加载速度方面来说,并没有想像中那么慢,在Chrome和Firefox上速度飞快,加载HTML的时候根本感觉不到它做了些什么,只是在IE上不太理想,页面巨大的话有时候确实会卡一下,不过随着IE版本的更新这个情况可能会慢慢解决掉。 用户体验方面感觉比原来刷页面的方式好的多,Ajax与后台交互,所以根本看不到讨厌的500错误页面了,用JS处理好后台返回的错误,提示信息更加易懂。 至于页面显示内容与数据库有关的问题,这都是交给后台组织好数据用JSON返回的,例如:{userid:1,operation: {'查询'}}和{userid:2,operation: {'查询','删除'}}之类,这样JS拿到JSON数据之后就知道该怎么构建页面了,当然,这些页面元素级的控制,完全可以放到数据库中去,动态的实时控制用户权限。 ######楼主说的情况跟extjs一样,抛弃动态页面,所有数据用js控制,展现,IE处理js虽然慢一点,但这是可控的,在加载的时候给个loading图片用户看起来比浏览器加载动态页面效果好些。要是js功底好,还可以写一些特效,用户体验就更好了。######+freemarker###### 看情况啊,可以有。 不过你说的情况,也有很多,尤其是网站很大,甚至页面的不同部分都是不同的小组做的话。 这时候不用落伍的iframe,就用ajax,jsonp了。 ###### 引用来自“闫晓沛”的答案 +freemarker 是直接访问freemarker的模板吗?这样也确实可以代替JSP,不过还是得走一下Java容器,感觉不如直接让Apache处理HTML的好 ###### 这个真可以有,JSP、Velocity、Freemarker这些都属于动态模版技术,HTML呢,直接就是静态模版技术,也许你会反问我可以用ajax来实现后台调用数据啊,可是我很担心你那页面的加载速度和用户体验,情况更严重的是,有些页面的效果是根据后台数据或参数来展示的,对于你的这个想法,持保留意见。。。 ######回复 @lovinglily : ”世界上不会有一个页面是预先设计好的,因为它有数据“乔布斯说的######意思是,静态页面预先设计好布局的话,并不是根本意义上根据后台数据动态改变,这对页面数据显示有影响是吧..######你能保证所有用户的浏览器都能处理你的这些数据?######跨浏览器确实是一个大问题,可以借助jQuery这样的JS库来解决,虽然有些时候也不是很完美,但是够用了######对于jsp freemarker 等之类的都是属于动态模板,要知道它们最终都是翻译成html代码给浏览器,所以没有替代这种说法。只能说哪种情况更适合你的应用了。如果动态交互更多 且动态判断多的情况下 你用ajax动态请求的方式显得很蹩脚,这中间有个取舍和平衡点######同意你的观点###### 引用来自“爪哇老妖”的答案 这个真可以有,JSP、Velocity、Freemarker这些都属于动态模版技术,HTML呢,直接就是静态模版技术,也许你会反问我可以用ajax来实现后台调用数据啊,可是我很担心你那页面的加载速度和用户体验,情况更严重的是,有些页面的效果是根据后台数据或参数来展示的,对于你的这个想法,持保留意见。。。 我能保证所有用户浏览器都能处理服务器发给它的HTML,很难保证用户浏览器能处理我页面里的所有Ajax数据请求。 ######回复 @xmut : js不可能运行的很慢,就算被我们喷的无地自容的IE6,其实也是大量的js在运行。一个页面的js不可能很多,多到不能处理的地步,否则是本身就设计有问题的######啥年代了,还在纠结浏览器能不能运行js。######没错,这样的项目架构确实存在禁用JS之后玩不转的情况,但是现在有几个项目不用JS的呢,我们可以把“开启JS”作为项目运行必需的环境提出来######确实!楼主把页面控制逻辑全部交给javascript,万一客户端javascript被禁用,或者javascript运行速度很慢,这反而影响了客户体验!######有还是没有 ,看项目的需要,没有不能替代的技术方案。

爱吃鱼的程序员 2020-06-04 16:49:07 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 Q: ossfs适合什么样的程序? ossfs能把oss bucket挂载到本地,如果您使用的软件没有支持OSS,但您又想让数据能自动同步到OSS,那么ossfs是很好的选择。 Q: ossfs有什么局限性? 由于数据需要经过网络同步到云端,ossfs在性能和功能上可能与本地文件系统有差距。如果您想让数据库等对io要求很高的应用跑在ossfs挂载的盘上,请慎重考虑。和本地文件系统具体差异: 随机或者追加写文件会导致整个文件的重写。 元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。 文件/文件夹的rename操作不是原子的。 多个客户端挂载同一个oss bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。 不支持hard link。 Q: ossfs一定要阿里云的机器才能用么? ossfs不限制一定要阿里云的内网才可以使用,外网机器依然可以使用。 Q: ossfs能不能同时挂载多个OSS bucket? 可以的,在passwd-ossfs文件中写入多个OSS配置信息即可。支持不同帐号的OSS。 Q: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 Q: 为什么我在mount时遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected这样的错误? 请先umount对应的目录。 请检查您在使用ossfs挂载时,填入的url参数是否正确,是否和bucket/access key id/access key secret匹配。 特别注意:url中不包含bucket的名字。例如:您在oss控制台中看到bucket的域名是这样的:ossfs-test-1.oss-cn-hangzhou.aliyuncs.com。那么填入的url则是:http://oss-cn-hangzhou.aliyuncs.com。 Q: ossfs提示ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory 这是您未创建该目录导致的,在挂载前需要创建对应目录。 Q: 我把bucket挂载到本地后,ls目录,却收到operation not permitted错误,这是为什么? 请检查您的bucket中,是否包含目录名含有不可见字符的OSS object。文件系统对文件/目录名有更严格的限制,因此会收到上述错误。使用其他工具对这些object重命名后,ls就能正确显示目录内容了。 Q: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint Q: 如何开机自动挂载ossfs? Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。 echo your_bucket_name:your_access_key_id:your_access_key_secret > /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs Step 2 接下来针对不同的系统版本,设置方式有所不同 Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5) 在/etc/fstab中加入下面的命令 ossfs#your_bucket_name your_mount_point fuse _netdev,url=your_url,allow_other 0 0 其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。 到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令: chkconfig netfs on Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统) 在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。 执行命令:chmod a+x /etc/init.d/ossfs 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。 执行命令:chkconfig ossfs on 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。 好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。 Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 Q: 我需要以www用户挂载ossfs,此时如何设置开机自动挂载? 参照上面的问题的解答,Step 1照做,对Step 2B稍加修改,修改/etc/init.d/ossfs中的命令为: sudo -u www ossfs your_bucket your_mountpoint -ourl=your_url 设置自启动脚本中允许使用sudo,编辑/etc/sudoers,将其中的Defaults requiretty这行改为#Defaults requiretty(注释掉) Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0

2019-12-01 23:15:17 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站