• 关于

    this补充

    的搜索结果

回答

var Test = {} 是一个声明+赋值的运算,赋值就是先对等号右边的表达式求值,然后将结果赋给等号左边的变量——换句话说:只有赋值成功后才能访问 Test。而 isAndroid 是在对等号右边表达式求值时就运行的(IIFE),此时由于 Test 还没有完成赋值,IIFE 实际访问的 this 是 window,而 window.UA 是不存在的,因此 undefined 无误。JavaScript 是动态语言,this 的指向是在代码执行时由解释器决定的,你写的这个 isAndroid 本质上是编译型语言里的 getter 方法,所以不要用 IIFE 来在声明时自动求值。如果你不想用 Test.isAndroid() 这样的方式来访问 this.UA,你可以写 JavaScript 的 get isAndroid 方法,这个要看你使用的 ES 版本来决定具体的写法了,可上网搜索 JavaScript getter/setter 作进一步学习。补充一个样本,对浏览器支持有要求,自行做转换或找 shim 支持:var Test = { UA: 'test ua', get isAndroid() { console.log(this.UA) } } Test.isAndroid // 'test ua'
a123456678 2019-12-02 02:09:48 0 浏览量 回答数 0

回答

我只想知道两个点是怎么确定一个矩形的?######回复 @Akkk47 : 对角是可以确定矩形######回复 @木兰宿莽 : 哈哈哈,代码我写不下去了,一直出错,等待你的代码######回复 @二胜 : 。。。看成平行四边形了,矩形是可以######回复 @木兰宿莽 : 不会写啊,可以帮我写一下吗,谢谢大神啊######回复 @木兰宿莽 : 老师说对角的两个点就可以确定一个矩形了#######include<iostream> using std::cout; using std::endl; using std::cin; class Point { private: float x,y; public: Point():x(0.0f),y(0.0f){} Point& operator=(const Point& rp){ this->x=rp.x; this->x=rp.y; return *this; } Point& operator()(const Point& rp){    this->x=rp.x; this->y=rp.y; return *this; } Point(float rx,float ry):x(rx),y(ry){} ~Point(){} public: float getX(){return this->x;}     float getY(){return this->y;} }; class Rectangle { private: Point pointFirst; Point pointSecond; public: Rectangle():pointFirst(0.0f,0.0f),pointSecond(1.0f,1.0f){} Rectangle(Point p1,Point p2=Point(1.0f,1.0f)):pointFirst(p1),pointSecond(p2){} public: float isArea(){        return (pointFirst.getX()-pointSecond.getX())*(pointFirst.getY()-pointSecond.getY());     } }; int main() { Rectangle rct1;         Point p1(0.0f,0.0f);         Point p2(4.0f,4.0f);         Rectangle rct2(p1,p2); cout<<rct1.isArea()<<endl; cout<<rct2.isArea()<<endl; return 0; } ######完成了80%的功能吧,自己看懂,然后补充完成
kun坤 2020-06-09 12:01:10 0 浏览量 回答数 0

问题

spring 父类注解注入 子类不能得到值

在使用SpringMVC的时候,想要做BaseDao来完成一些共同的功能代码,之后用集成这个Dao来实现具体功能。 可是后来发现,在BaseDao中有一个属性是使用注解注入的,而且子类调用这个属性的时候是没有值得报空指针异常。 有没有什么好...
a123456678 2019-12-01 20:25:26 2966 浏览量 回答数 1

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

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

回答

苹果的文档是这样描述的:If the view belonging to a view controlleris added to a view hierarchy directly, the view controller will not receivethis message. If you insert or add a view to the view hierarchy, and it has aview controller, you should send the associated view controller this messagedirectly. Failing to send the view controller this message will prevent anyassociated animation from being displayed.如果是直接把View Controller的view addSubview到另一个View,则不会调用viewDidAppear,你需要手动发送viewDidAppear给这个View Controller。那么我们是不是可以这样认为:pushViewController,或presentModelViewController这个View Controller时,会调用它的viewDidAppear方法呢?苹果文档中未说明。事实上即使是用presentModelviewController,viewDidAppear也不一定能被调用。测试的结果表明:如果nib第1次加载的时候,viewDidAppear一定会调用的。但如果第2次加载这个nib则不一定会调用。viewDidLoad则无论何种情况总是调用的,所以要保险得多。另外,在iPad中没有这样的问题,viewDidAppear总是会调用的。补充说明,viewWillAppear和viewDidAppear的情况是一样的,在iPhone上,除了第1次加载xib文件时肯定会调用外,其他任何情况都不会自动调用:无论popViewControllerAnimate、presentModalViewController还是 addSubviews。但iPad上则相反,除了addSubviews方法外,都一定会调用。此外,测试是在ios4.3设备上进行的。
杨冬芳 2019-12-02 03:02:39 0 浏览量 回答数 0

问题

在for循环内跳过范围内的值

因此,我所在的课程发布了一个练习: # Modify the code inside this loop to stop when i is exactly divisible by 11 for i in r...
is大龙 2020-03-24 10:05:23 0 浏览量 回答数 1

回答

用签名的url上传文件到oss总是报错,问题补充 我用的是put的签名,代码如下:Date expiration = new Date(new Date().getTime() + 3600 * 1000);             URL url = this.clientOut.generatePresignedUrl(bucketName, key, expiration, HttpMethod.PUT); 我的目的是,客户端用此新生成的url上传文件,这样客户端就不需要通过我的ecs中转了,这样就可以节省带宽。 问题是返回:MethodNotAllowed。不知道是什么原因
2lv 2019-12-02 01:47:27 0 浏览量 回答数 0

问题

Play 怎么使用jar包中的model?报错

一个项目的model包被我打成jar包,然后Build path到另外一个项目中使用,写的时候能够正常的import,但测试的时候,调用一个model的.save()方法报错ÿ...
爱吃鱼的程序员 2020-06-09 16:31:23 0 浏览量 回答数 1

问题

关于jquery全选和取消全选的问题

今天使用了Simple Admin作为网站后台的模板,在使用过程中遇到了一个问题,就是checkbox全选的问题,描述如下 <{foreach $abs as $v}> <tr> ...
a123456678 2019-12-01 20:20:06 933 浏览量 回答数 1

问题

jdbc连接ads数据库,查询报错。

语句:select a from A错误:ShowSyntaxException: an error in SHOW/LIST syntax: Unrecognized SHOW command: character ===2017/3/8...
asdfghzxcv 2019-12-01 20:00:05 2257 浏览量 回答数 1

问题

关于JS的类型问题!

var testStr = '[{"aa":"a1","bb":"b1","cc":"c1","dd":"d1"},{"aa":"a2","bb":"b2","cc":"c2","dd":"d2"},{"aa":"a3","bb":"b3"...
小旋风柴进 2019-12-01 20:18:00 744 浏览量 回答数 1

问题

初次建站,出师未捷身先死,求大神指点

本人是学文科的妹子,因为兴趣想建一个dz论坛。 在万网买了域名和空间,备案,解析,上传文件都完成了,现在就卡在这了。 根据万网的教程,要设置默认首页。 万网...
肥雪 2019-12-01 21:42:48 3581 浏览量 回答数 6

回答

Re:Re数据集描述有误 引用第2楼兵与卒于2016-04-22 22:19发表的 Re数据集描述有误 : 数据下载到本地,操作系统win7,解压后,生成ijcai2016_koubei_test文件,加了csv后缀之后,数据格式n行2列,不是跟描述中的n行3列,求解 [url=https://bbs.aliyun.com/job.php?action=topost&tid=278289&pid=781008][/url] 你好,ijcai_2016_koubei_test文件是本次比赛的测试集,提供的文件有User_id和Location_id两个字段,第三个字段Merchant_id_list需要参赛者建模预测后补充上,并以此作为submission文件提交。 ------------------------- Re:ReReRe数据集描述有误 引用第5楼stefanchou于2016-04-24 22:36发表的 ReReRe数据集描述有误 : 引用第3楼零幺于2016-04-22 23:39发表的 Re:Re数据集描述有误 : 你好,ijcai_2016_koubei_test文件是本次比赛的测试集,提供的文件有User_id和Location_id两个字段,第三个字段Merchant_id_list需要参赛者建模预测后补充上,并以此作为submission文件提交。 ....... [url=https://bbs.aliyun.com/job.php?action=topost&tid=278289&pid=781461][/url] No. You can drop some lines in 'ijcai_2016_koubei_test' if you want to. I think this may yield better precision but worse recall sometime.
零幺 2019-12-02 02:42:31 0 浏览量 回答数 0

问题

fastjson解析List&lt;Object[]&gt;类型数据在JDK7环境下报错?报错

@wenshao 你好,想跟你请教个问题: fastjson解析List<Object[]>类型数据在JDK7环境下报错。errorMessage如下: Except...
爱吃鱼的程序员 2020-06-22 21:54:56 0 浏览量 回答数 1

回答

对于第一个问题,我也发现了 你可以这样来解决: this.getPara()取得那个参数,如果不为空则返回404,说白了就是对这个参数进行分析 用拦截器那就得在每个不用参数的方法里面加这个判断了,这样全局配置的error其实就没有用了 web.xml我工程的配置可以实现 <error-page>    <error-code>404</error-code>    <location>/resource/404.html</location>  </error-page>嗯,如果jFinal返回了404就好办,但现在的问题是它不返回404,因为url能匹配到方法,后面的被当成是无用的参数,而不是错误的url 你要用session的话,应该跳到jsp中把 this.setAttr()设置的是request this.setSessionAttr设置的是sessionsession用的之前别人发的代码,用拦截器解决了,但好像全局配置的404不经过拦截器就直接跳转到404页面了   JFinal提供了 NoUrlPara这个拦截器来支持楼主的需求,只需要这样:@Before(NoUrlPara.class)   如果me.setError404View还搞不定需求,可以考虑扩展IErrorRenderFactory来灵活实现各种异常处理需求看了下源码,这就是1L说的方法,哈哈 这肯定设计到JFinal路由的配置 @JFinal 再补充一下,很多网站与jfinal处理的方式是一样的,一般来说链接都是点击进入的,很少有直接输入的,例如oschina的新闻频道链接:  http://www.oschina.net/news/abc回复 @VikingZ:使用@Before(NoUrlPara.class)搞定这个我知道,但对不存在的url处理不好,会被人恶意做出很多不同url但内容相同的页面链接,搜索引擎抓取后,如果判定是作弊,那对网站的影响就很大了 如果下面这样的链接让搜索引擎全部抓取到: http://www.wangxiaowang.com/kecheng/tyu http://www.wangxiaowang.com/kecheng/abc http://www.wangxiaowang.com/kecheng/qwe h ttp://www.wangxiaowang.com/kecheng/lkj ...... 假如被搜索引擎认为是作弊,那  http://www.wangxiaowang.com/kecheng/ 页面甚至是整个域名下的页面的排名可能就会受到影响,被降权等惩罚 这样的链接在本域名下是不会有的,使坏的人在其它域名中生成这些链接,估计影响会很小。JFinal目前的路由设计一是为了简单、二是为了匹配性能高到极致
爱吃鱼的程序员 2020-06-22 18:55:31 0 浏览量 回答数 0

回答

public class Demo { public static void main(String[] args) { Demo d = new Demo(); String path =d.getPath().substring(0, d.getPath().indexOf("WEB-INF")); StringBuilder tempPath=new StringBuilder(); tempPath.append(path).append("download/").append("temp.txt"); System.out.println(tempPath.toString()); } public String getPath(){ return this.getClass().getClassLoader().getResource("rule.xml").getPath(); } } ######你可以先得到 rule.xml 的路径,然后再通过相对路径找到 temp.txt 的路径 ######诶,怎么找哦,rule.xml找到了,但temp.txt始终没找到######使用servlet. getServletContext().getContextPath()###### 你可以在rule.xml中配置一个download 的绝对路径. 然后解析xml.获得. 补充. 你download .放到src的同级.纯属没事找抽型######不是用SRC同级,那结构是 *.war下面的
kun坤 2020-06-07 21:45:01 0 浏览量 回答数 0

回答

@BeetlName("param")publicclassParamTagextendsBaseTag{publicvoidrender(){Stringkey=String.valueOf(this.getAttributeValue("type"));if(key!=null){List<SysParam>sysParams=KgCacheKit.getSysParamsByType(key);for(inti=0;i<sysParams.size();i++){//按照顺序绑定俩个变量this.binds(sysParams.get(i),i)this.doBodyRender();}}} 在标签里: <#paramtype="sign.page";target,index><labelclass='radio-inline'><inputtype="radio"name="page"value="${target.code}"${index==0?'checked'}>${target.name}</label></#param> 具体可以参考文档: http://ibeetl.com/guide/  2.22.绑定变量的HTML标签 补充:既可以按照名字绑定,也可以按照顺序绑定(这是推荐的方式), 你那个报错是因为代码里绑定了多个变量,但实际只申明了一个。错误提示不是很清楚,2.1.2版本即将改善此错误提示:比如 >>错误:htmltagvar位于1行资源:/org/beetl/core/lab/hello.txttag执行抛错1|<#menu;menu,index>2|</#menu>java.lang.RuntimeException:申明的绑定和代码里实际绑定不一致:试图绑定未申明的变量imenuatorg.beetl.core.GeneralVarTagBinding.bind(GeneralVarTagBinding.java:106)atorg.beetl.core.lab.TestGeneralVarTagBinding.render(TestGeneralVarTagBinding.java:32)atorg.beetl.ext.tag.HTMLTagVarBindingWrapper.render(HTMLTagVarBindingWrapper.java:52)atorg.beetl.core.statement.TagVarBindingStatement.runTag(TagVarBindingStatement.java:54)atorg.beetl.core.statement.TagStatement.execute(TagStatement.java:87)atorg.beetl.core.statement.Program.execute(Program.java:70)atorg.beetl.core.engine.FilterProgram.execute(FilterProgram.java:31)atorg.beetl.core.Template.renderTo(Template.java:123)atorg.beetl.core.Template.renderTo(Template.java:102)atorg.beetl.core.lab.Test.main(Test.java:49) 引用来自“闲.大赋”的评论 补充:既可以按照名字绑定,也可以按照顺序绑定(这是推荐的方式), 你那个报错是因为代码里绑定了多个变量,但实际只申明了一个。错误提示不是很清楚,2.1.2版本即将改善此错误提示:比如 >>错误:htmltagvar位于1行资源:/org/beetl/core/lab/hello.txttag执行抛错1|<#menu;menu,index>2|</#menu>java.lang.RuntimeException:申明的绑定和代码里实际绑定不一致:试图绑定未申明的变量imenuatorg.beetl.core.GeneralVarTagBinding.bind(GeneralVarTagBinding.java:106)atorg.beetl.core.lab.TestGeneralVarTagBinding.render(TestGeneralVarTagBinding.java:32)atorg.beetl.ext.tag.HTMLTagVarBindingWrapper.render(HTMLTagVarBindingWrapper.java:52)atorg.beetl.core.statement.TagVarBindingStatement.runTag(TagVarBindingStatement.java:54)atorg.beetl.core.statement.TagStatement.execute(TagStatement.java:87)atorg.beetl.core.statement.Program.execute(Program.java:70)atorg.beetl.core.engine.FilterProgram.execute(FilterProgram.java:31)atorg.beetl.core.Template.renderTo(Template.java:123)atorg.beetl.core.Template.renderTo(Template.java:102)atorg.beetl.core.lab.Test.main(Test.java:49) 引用来自“闲.大赋”的评论 补充:既可以按照名字绑定,也可以按照顺序绑定(这是推荐的方式), 你那个报错是因为代码里绑定了多个变量,但实际只申明了一个。错误提示不是很清楚,2.1.2版本即将改善此错误提示:比如 >>错误:htmltagvar位于1行资源:/org/beetl/core/lab/hello.txttag执行抛错1|<#menu;menu,index>2|</#menu>java.lang.RuntimeException:申明的绑定和代码里实际绑定不一致:试图绑定未申明的变量imenuatorg.beetl.core.GeneralVarTagBinding.bind(GeneralVarTagBinding.java:106)atorg.beetl.core.lab.TestGeneralVarTagBinding.render(TestGeneralVarTagBinding.java:32)atorg.beetl.ext.tag.HTMLTagVarBindingWrapper.render(HTMLTagVarBindingWrapper.java:52)atorg.beetl.core.statement.TagVarBindingStatement.runTag(TagVarBindingStatement.java:54)atorg.beetl.core.statement.TagStatement.execute(TagStatement.java:87)atorg.beetl.core.statement.Program.execute(Program.java:70)atorg.beetl.core.engine.FilterProgram.execute(FilterProgram.java:31)atorg.beetl.core.Template.renderTo(Template.java:123)atorg.beetl.core.Template.renderTo(Template.java:102)atorg.beetl.core.lab.Test.main(Test.java:49)
爱吃鱼的程序员 2020-06-14 19:58:08 0 浏览量 回答数 0

回答

调试手段 代码中加入: System.out.println(orders.getSchema()); root |-- user: BIGINT |-- product: STRING |-- amount: INT |-- rowtime: TIMESTAMP(3) ROWTIME 解决方案 Table orders = tEnv.fromDataStream(orderA, $("user"), $("product"), $("amount"),$("rowtime").rowtime()); 对应的OrderStream是: // ************************************************************************* // USER DATA TYPES // ************************************************************************* /* * Simple POJO. */ import java.sql.Timestamp; import org.apache.flink.streaming.api.windowing.time.Time; public class OrderStream { public Long user; public String product; public int amount; public Long rowtime; public OrderStream() { } public OrderStream(Long user, String product, int amount,Long rowtime) { this.user = user; this.product = product; this.amount = amount; this.rowtime=rowtime; } @Override public String toString() { return "Order{" + "user=" + user + ", product='" + product + '\'' + ", amount ='" + amount + '\'' + ", rowtime=" + rowtime + '}'; } } 对应的主程序为: StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime); StreamTableEnvironment tEnv = StreamTableEnvironment.create(env); DataStream<OrderStream> orderA = env.fromCollection(Arrays.asList( new OrderStream(1L, "beer", 3, 1505529000L), //2017-09-16 10:30:00 new OrderStream(1L, "beer", 3, 1505529000L), //2017-09-16 10:30:00 new OrderStream(3L, "rubber", 2,1505527800L),//2017-09-16 10:10:00 new OrderStream(3L, "rubber", 2,1505527800L),//2017-09-16 10:10:00 new OrderStream(1L, "diaper", 4,1505528400L),//2017-09-16 10:20:00 new OrderStream(1L, "diaper", 4,1505528400L)//2017-09-16 10:20:00 )); Table orders = tEnv.fromDataStream(orderA, $("user"), $("product"), $("amount"),$("rowtime").rowtime()); System.out.println(orders.getSchema()); 来自网友的补充: Hunter x Hunter: $("rowtime2").proctime()是表示自动生成一个字段 rowtime2 Hunter x Hunter: $("rowtime2").rowtime()是表示用已经存在的字段 rowtime2用作eventime 注意,时间属性不是数据库表格里面的一个字段
苍霞学子 2021-04-02 22:00:27 0 浏览量 回答数 0

问题

错误代码表

说明 错误代码和英文描述是错误返回信息可见的,中文描述只用于文档解释和补充说明,错误返回信息不可见。 错误代码和英文描述的组合标示一个错误返回,有相同错误代码时,依赖英文描述区分不同的...
行者武松 2019-12-01 21:43:10 2572 浏览量 回答数 0

问题

gdb提示core file may not match specified executable file.

有两个程序A和B, 启动A后, A会fork()新线程然后使用execl()调用B程序 运行过程中B会出错产生core文件,使用gdb查看core文件时提示 warning: core file may not match specifie...
a123456678 2019-12-01 20:05:39 3838 浏览量 回答数 1

问题

CentOS SSH公钥登录问题

内网,想做ssh root公钥登录,配置好之后还是提示输入密码,现象:在服务器端使用其他端口开放sshd: $/usr/sbin/sshd -p 1234 此时客户端可以无密码登录,但是22端口的sshd还是需要密码 停止服务端22端口的...
a123456678 2019-12-01 20:05:24 2011 浏览量 回答数 1

问题

关于httppost = new HttpPost(Uri) 返回值为null! 不知道为何

RT http.java public class Http { static HttpEntity entity; //HttpEntity是可以同Http消息进行接受或发送的实体,可以是流或者字符串 st...
爵霸 2019-12-01 20:25:25 2504 浏览量 回答数 0

问题

关于jQuery选择器的问题

$(function(){ $('.div4table tr td.trigger').each(function(){ this.click(function(){ ...
小旋风柴进 2019-12-01 19:33:39 805 浏览量 回答数 1

回答

好像没啥缺点,说说优点吧。当然是兼容性了。虽然现在标准浏览器的市场份额越来越高,但是回想当年,没有jQuery,开发难度立马上升很多。方便的事件托管。在jQuery中,我们可以非常方便的使用.on('event', 'selector', function),把事件响应函数托管给父级容器,这样在列表类的应用中,不仅可以大大减少内存占用,还可以放心的移除新增子元素。部分事件增加冒泡。submit事件在IE中是不冒泡的,jQuery人工给它增加了冒泡能力。方便的trigger。虽然用起来都是事件,但其实不同的事件存在于不同的命名空间中,自己写的时候多半得查下资料,用jQuery的话直接trigger就好。批量off。原生JavaScript中,removeEventListener一次只能移除一个事件的一个侦听函数。jQuery中则可以一次性移除多个侦听或托管,甚至全部侦听。尤其在移除DOM元素前,非常有用。事件命名空间。使用命名空间可以更方便的批量管理事件。一次性操作多个事件。传递事件类型时可以使用空格分隔,达到一次绑定多个事件到同一个选择器和同一个处理函数的目的。总之,jQuery在时刻践行它的口号:少写,多效。补充两点不算缺点的注意事项吧。jQuery使用自定义事件取代原生事件。早期的事件属性比较简单,jQuery会把常用属性复制到自定义事件上,比如target、currentTarget。但是后来新增的事件,比如ctrl+v粘贴时触发的ClipboardEvent.paste,要访问剪切板的内容,就必须通过originEvent找到原生事件,才能访问.data。我有一篇博客记录了这个情况。使用事件托管时,currentTarget和this指向的都是selector指定的DOM节点。使用事件托管,移除事件时,需要指定selector,不然移除的是父节点本身的侦听,而不是子节点的侦听。
小旋风柴进 2019-12-02 02:21:21 0 浏览量 回答数 0

问题

一个特别特别棘手xml sax 解析问题:报错

我在解析一个远程流过来的 xml进行解析,因为jdom sax他占用内存比较少,所以就选了他。 问题:  解析的xml中有中文的时候,他不是一次读取一行内容进行返回的࿰...
kun坤 2020-06-06 23:12:07 0 浏览量 回答数 1

回答

Tomcat 提示相关错误码 本页目录 403 报错 502 报错 提示:这篇文档是由阿里云售后支持团队针对特定或紧急问题提供的“快速发布”文档。文档的内容以原稿呈现,未进行编辑及审核。因此,阿里云对于文档内容不做任何承诺, 并且,我们有权在未经通知您的情形下对文档内容做出编辑、修改或提供补充信息。 403 报错 403 Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。 常见问题解决方法 进入 manager 界面之后,显示 403 Access Denied。 在 conf/tomcat-users.xml 文件中NOTE: By default, no user is included in the “manager-gui” role required to operate the “/manager/html” web application. If you wish to use this app, you must define such a user - the username and password are arbitrary. 也就是说,为了考虑安全,tomcat默认还是没有manager-gui的管理权限的,如果想要使用manager的话,需要自行加入管理权限(角色)。需要加一个这样的权限(角色) 502 报错 Tomcat 报错都是结合前端的环境,比如前端 Apache 或者是 Nginx 等配置。 The proxy server received an invalid response from an upstream server. 一般都是结合前端环境出现的报错。需要具体结合访问问题架构来看,此文简单表述下由于 Apache 将请求拦截导致 502 的问题情况。 如下图,正常 Tomcat 默认填写访问端口都是 8080,但是下图 Apache 转发端口转发文件目录样式文件等都是 8090 等端口,如果是转发正常其他模块调用没有问题就会导致访问超时 502 的报错情况。 您可以参阅 Nginx 502 报错查询详细的问题原因。
KB小秘书 2019-12-02 02:06:33 0 浏览量 回答数 0

问题

写了一个简单的excel读取类,待扩展更新:报错

工作上的需要,要导入excel到数据库,故简单写了个excel的读取类,功能非常简陋,望各位大虾多多指教,多多补充。后续会应需要增加读取方法。工作结束后更新写操作。 代...
kun坤 2020-06-07 20:00:55 0 浏览量 回答数 1

回答

结业啦 先引一句前人话做开场: Now this is not the end. It is not even the beginning of the end. But it is, perhaps, the end of the beginning. 《图谱》更大的意义上,是一个地图。至于个人能得到多少宝藏,就看自己的“探索”了,向着心中的“one piece”出发吧。 我是偶然看到这个活动,但是很庆幸能参与进来并持续的走到了现在。通过这近一个月的打卡学习,看着每天的进度增加,还是有点小小的成就感的。 我觉得《图谱》给我的最大作用是,为我拉起了一个网,而且是大牛们整理提炼的。这个网上包括了java基础,关联技术,以及(重要的)java热门框架等节点,也包含了像云化这些高端的概念。 结合这个网,我可以查漏补缺:看看基础部分,哪些概念是自己生疏的;基础的sql和JDBC开发是不是都掌握了;热门框架,自己能说出来多少,又知道多少实现细节。。。 按图索骥一点点的补充、加强网内节点,扩展网外节点。 《图谱》中大量的视频教程,对新手来说是个不错的接受介质。 不过对于有一定基础的人来说,我更建议能有一些文字版的资料,比如《Java工程师成神之路》这样的pdf。不仅片断时间学习更方便,效率也比视频资料更高。(个人建议,不敢代表大多数_) 再一个建议增加些“设计模式”类的专题课程。 最后就是“作业”少了,建议增加点实操题,完了要求大家分享下成果, 我工作中也是用的Java语言做为主要的开发语言,使用JavaEE开发供大B用的B/S架构的应用。 我个人认为,Java语言门槛低,简单易学,而且做为一种强类型语言,可以在编译期就暴露很多问题。 这点是Java语言的一大优势,市场上供给多,大企业也敢放心的使用。 然后还要提一下Java语言的生态。用户基数大,也就有更强的意愿和能力,在各个领域产出“基础设施”级的工具,方便应用人员在其上快速的实现部署自己的“创意”。 当然,做为编程爱好者,你完全可以再额外学习其他语言,比如python等。 初学者如果要想学java,书籍的话,就推荐《Thinking In JAVA》吧。 不限于图书的话,我也推荐官方的“The Java™ Tutorials”,也是一个不错的选择。 最后,一起努力吧。
dtogpxterwssm 2021-03-05 10:08:05 0 浏览量 回答数 0

回答

什么意思?不能循环读取数据,存起来,然后再打印?还是因为你没办法判断数据什么时候结束? ######就是我手上有一个终端,向连在COM1上的接收器发送数据,发送完一条数据后控制台上马上现实这条数据,我想实现的效果是一行显示一条数据,现在的情况是一条数据分成了几行显示!我如果用循环的方式一个一个的读字节,就会把以前输入的数据也打印出来,我只想打印当前这条数据,一行一条数据。######串口性能有限,不同的串口设备之间都有不同,只能是被动的去接受数据,串口通讯一定要有协议,否则不好搞,不知道数据到底发完还是没发完######@广隶 : 判断不了,要从协议里规定这次通讯有多少长度的字符。怎么发送根本不好判断,17个字节,可能一次一个字节17次发过来,也可一次性发过来,甚至首位加几个字符发过来。所以写一定要有协议在里面规定通讯到底有多长。######串口方面的东西我最近才接触,我写的这个第一次打印可以一次打印17位内的数据,以后就打印14位后剩下的另起一行打印,14位后的数据好像是又读了一遍串口。怎么去判断接收器能接受多少位的数据?请指教。######对于分给终端的数据一般是有限制的,不能发太多,否则终端会吃不消。这个要看设备的制造商的文档了。###### 我把代码贴出来,有哪位大牛帮我看看,谢谢啦! public class Test3 { private static String str; public void init(){ try { CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM1"); System.out.println(portId.getName()+":开启啦"); @SuppressWarnings("unused")        ReadCom readCom =new ReadCom(portId); } catch (NoSuchPortException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (PortInUseException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public class ReadCom implements Runnable,SerialPortEventListener{ InputStream input = System.in; SerialPort serialPort; Thread readThread; public ReadCom(CommPortIdentifier portId) throws PortInUseException, IOException{ serialPort = (SerialPort) portId.open("test",2000); serialPort.setInputBufferSize(1024); input=serialPort.getInputStream(); try { serialPort.addEventListener(this); } catch (TooManyListenersException e) { // TODO Auto-generated catch block e.printStackTrace(); } serialPort.notifyOnDataAvailable(true); try { serialPort.setSerialPortParams(115200,  SerialPort.DATABITS_8,  SerialPort.STOPBITS_1,  SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException e) { // TODO Auto-generated catch block e.printStackTrace(); } readThread = new Thread(this); readThread.start(); } @Override public void run() { // TODO Auto-generated method stub } @Override public void serialEvent(SerialPortEvent event) { switch (event.getEventType()) { case SerialPortEvent.BI: case SerialPortEvent.OE: case SerialPortEvent.FE: case SerialPortEvent.PE: case SerialPortEvent.CD: case SerialPortEvent.CTS: case SerialPortEvent.DSR: case SerialPortEvent.OUTPUT_BUFFER_EMPTY: break; case SerialPortEvent.DATA_AVAILABLE: byte[] readBuffer  =  new byte[512];    try { while (input.available()>0) { int len = input.read(readBuffer); str = new String(readBuffer,0,len); Memcached mcc = Memcached.getInstance(); mcc.add("test", str); System.out.println("内容长度:"+len); System.out.println("内容:"+str); } } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) throws IOException { Test3 test3 = new Test3(); test3.init(); } } ###### 引用来自“广隶”的答案 我把代码贴出来,有哪位大牛帮我看看,谢谢啦! public class Test3 { private static String str; public void init(){ try { CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM1"); System.out.println(portId.getName()+":开启啦"); @SuppressWarnings("unused")        ReadCom readCom =new ReadCom(portId); } catch (NoSuchPortException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (PortInUseException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public class ReadCom implements Runnable,SerialPortEventListener{ InputStream input = System.in; SerialPort serialPort; Thread readThread; public ReadCom(CommPortIdentifier portId) throws PortInUseException, IOException{ serialPort = (SerialPort) portId.open("test",2000); serialPort.setInputBufferSize(1024); input=serialPort.getInputStream(); try { serialPort.addEventListener(this); } catch (TooManyListenersException e) { // TODO Auto-generated catch block e.printStackTrace(); } serialPort.notifyOnDataAvailable(true); try { serialPort.setSerialPortParams(115200,  SerialPort.DATABITS_8,  SerialPort.STOPBITS_1,  SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException e) { // TODO Auto-generated catch block e.printStackTrace(); } readThread = new Thread(this); readThread.start(); } @Override public void run() { // TODO Auto-generated method stub } @Override public void serialEvent(SerialPortEvent event) { switch (event.getEventType()) { case SerialPortEvent.BI: case SerialPortEvent.OE: case SerialPortEvent.FE: case SerialPortEvent.PE: case SerialPortEvent.CD: case SerialPortEvent.CTS: case SerialPortEvent.DSR: case SerialPortEvent.OUTPUT_BUFFER_EMPTY: break; case SerialPortEvent.DATA_AVAILABLE: byte[] readBuffer  =  new byte[512];    try { while (input.available()>0) { int len = input.read(readBuffer); str = new String(readBuffer,0,len); Memcached mcc = Memcached.getInstance(); mcc.add("test", str); System.out.println("内容长度:"+len); System.out.println("内容:"+str); } } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) throws IOException { Test3 test3 = new Test3(); test3.init(); } } 你这样是可以收到收据的,但是使用串口设备的终端机往往都是单片机,性能极为有限,往往不会一次发送大量数据,所以收到的数据基本都是碎片一块一块的。 在串口接收数据的时候需要一个协议,用这个协议来确保数据的正确性,比如数据长度,那么你就可以先直到长度,然后不停接收数据直到收完为止,另外协议还可以保证双发同步性,如果串口双方同时往对方发数据,这个时候可能会造成不可预料的结果。 ###### 引用来自“Monkey”的答案 引用来自“广隶”的答案 我把代码贴出来,有哪位大牛帮我看看,谢谢啦! public class Test3 { private static String str; public void init(){ try { CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM1"); System.out.println(portId.getName()+":开启啦"); @SuppressWarnings("unused")        ReadCom readCom =new ReadCom(portId); } catch (NoSuchPortException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (PortInUseException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public class ReadCom implements Runnable,SerialPortEventListener{ InputStream input = System.in; SerialPort serialPort; Thread readThread; public ReadCom(CommPortIdentifier portId) throws PortInUseException, IOException{ serialPort = (SerialPort) portId.open("test",2000); serialPort.setInputBufferSize(1024); input=serialPort.getInputStream(); try { serialPort.addEventListener(this); } catch (TooManyListenersException e) { // TODO Auto-generated catch block e.printStackTrace(); } serialPort.notifyOnDataAvailable(true); try { serialPort.setSerialPortParams(115200,  SerialPort.DATABITS_8,  SerialPort.STOPBITS_1,  SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException e) { // TODO Auto-generated catch block e.printStackTrace(); } readThread = new Thread(this); readThread.start(); } @Override public void run() { // TODO Auto-generated method stub } @Override public void serialEvent(SerialPortEvent event) { switch (event.getEventType()) { case SerialPortEvent.BI: case SerialPortEvent.OE: case SerialPortEvent.FE: case SerialPortEvent.PE: case SerialPortEvent.CD: case SerialPortEvent.CTS: case SerialPortEvent.DSR: case SerialPortEvent.OUTPUT_BUFFER_EMPTY: break; case SerialPortEvent.DATA_AVAILABLE: byte[] readBuffer  =  new byte[512];    try { while (input.available()>0) { int len = input.read(readBuffer); str = new String(readBuffer,0,len); Memcached mcc = Memcached.getInstance(); mcc.add("test", str); System.out.println("内容长度:"+len); System.out.println("内容:"+str); } } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) throws IOException { Test3 test3 = new Test3(); test3.init(); } } 你这样是可以收到收据的,但是使用串口设备的终端机往往都是单片机,性能极为有限,往往不会一次发送大量数据,所以收到的数据基本都是碎片一块一块的。 在串口接收数据的时候需要一个协议,用这个协议来确保数据的正确性,比如数据长度,那么你就可以先直到长度,然后不停接收数据直到收完为止,另外协议还可以保证双发同步性,如果串口双方同时往对方发数据,这个时候可能会造成不可预料的结果。 谢谢你Monkey,我这个问题解决了!是你的答案给我启示。。。 ######我再补充一点,有些设备会往里加数据。特别是首位添加额外的字节,当然有些肯是故意加上去保证完整数据都会发过来。###### 楼主,您好!您后来是怎么解决的,能不能把源代码发给我,我邮箱是1416149633@QQ.COM,不尽感激,我是位自学者。 ######楼主解决了吗?求解决思路
kun坤 2020-06-07 22:36:33 0 浏览量 回答数 0

回答

引用来自“milin”的评论直接用jquery好了,写的那么麻烦 以下代码取自: JS, JQUERY实现全选,反选。 其中,我将 <script src="js/jquery-1.8.3.min.js"></script> 改成: <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> 测试一下,似乎正是你所要的效果。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <input type="checkbox" value="全选" id="ckAll"/>水果</br> <div class="box"> <input type="checkbox" value="苹果" id="apple"/>苹果 <input type="checkbox" value="香蕉" id="bann"/>香蕉 <input type="checkbox" value="橘子" id="origin"/>橘子 </div> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> <script type="text/javascript">        //给所有 .box input 元素添加 checked = ckAll 当前的状态;        //prop('checked',value) ,第一个值获取属性,第二个值:设置属性值。prop只有一个参数时,表示获取元素属性。         $('#ckAll').click(function(){            $('.box input').prop('checked',$(this).prop('checked')); }); $('.box input').click(function(){ //each 便利每一个元素,让其执行该函数 $('.box input').each(function(){ if(!$(this).prop('checked')){ $('#ckAll').prop('checked',false); //有一个不满足就 跳出该循环,避免执行下面 return false; }else{ $('#ckAll').prop('checked',true); } }) })</script> </body> </html>  ######嗯嗯,是这样的,感谢分享!######一个不选中的场景,是否应当写成:if(!select1Input[i].checked){...}? 你少写了属性:checked。######if(!select1Input[i].checked){...}还是不管用###### 提问: 识别号为"selectAll"的html元素是什么类型?(type="?") 鉴于代表它的变量all 有个属性onclick (all.onclick), 我猜是 type="button"。可是它同时又有一个属性 checked, 我想它可能是 type="checkbox"。因此,我觉得,这个应当设立两个元素:一个 type="button", 一个 type="checkbox"。 请告诉我 元素 "selectAll" 是什么类型(type="?")。我不太明白这句话:"一个不选中,全选框也取消的效果"。全选框是否指的是 id="selectAll" 这个元素? "也取消" 是否是指 这个全选框消失?或它的checked 由 true 变为 false?  建议: 1.    定义 方法 selectReverse 的代码是否可以改成: var selectReverse = reverse.onclick = function(){     for (var i=0; i<select1Input.length; i++) {     select1Input[i].checked= !select1Input[i].checked;     } } 2.   将变量名称 reverse 换成 toggle。Toggle(切换),即使用自定义效果来显示或隐藏匹配的元素。这里,指的是 在  选中/未选中 (checked:true/false) 之间切换。鉴于 reverse 已经被 js 用于颠倒数组中元素的顺序的方法名: reverse(), 这里就不宜再用做其它的意思了。又发现,jQuery 中 toggle() 方法 是用来切换元素的可见状态的。如果是要"全选框也取消",即 全选框也消失, 那么 toggle 就最合适不过了。######回复 @良辰2250 : 我刚发一贴回答。可能正合你意。######回复 @tcxu : 点全选复选框可以全部选中,如果取消其中一个选项,全选复选框就不会选中。我是想让全选复选框与它的选项们之间有一个这样联动的效果呢######回复 @良辰2250 : 谢谢答复。你说:"一个不选中,全选框也取消的效果"。这是什么效果? 看来,全选框指的是 id="selectAll" 这个元素。 "也取消" 指是什么情况?是指 这个全选框消失, 还是指,一旦全选框的 checked 为 false, 其它所有的checkbox 的 checked 都会 是 false?######select1Input[i].checked= !select1Input[i].checked; 嗯,这样会更好######都是复选框:全选、反选、各选项: <label><input id="selectAll" type="checkbox" />全选/取消全选</label> <label><input id="selectReverse" type="checkbox" />反选</label><label><input type="checkbox" name="ability" />js</labe>######var selectAll=function (flag){ for(var i=0;i<select1Input.length;i++){ select1Input[i].checked=flag; } all.checked=flag; } 难道是这个意思?######和上面的效果也一样######直接用jquery好了,写的那么麻烦######借助于 网上的代码,如: <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script> 有一个弊端:万一那个代码网页找不到(当然,不希望如此),你自己的代码也就无法运行了。我明白了你的用意之后,就尝试修改你的代码。结果发现,不用 JQuery 也会奏效。请测试。 var all = document.getElementById('selectAll'); var reverse = document.getElementById('selectReverse'); var select1Input = document.getElementsByName('ability'); var selectAll = function(flag){ for (var i=0; i<select1Input.length; i++){ select1Input[i].checked = flag; } } for (var i=0;i<select1Input.length;i++) select1Input[i].onclick = function(){ all.checked = false; } var selectReverse = reverse.onclick = function(){ for (var i=0; i<select1Input.length; i++) { select1Input[i].checked= !select1Input[i].checked; } } all.onclick = function(){ if (all.checked) { selectAll(true); } if (!all.checked){ selectAll(false); } }  ######谢谢啦我参考了http://www.cnblogs.com/lk4525/p/6513924.html 里面一个计数器,补充了一点######/* 全选、不选、反选 */ var all = document.getElementById('selectAll'); var reverse = document.getElementById('selectReverse'); var select1Input = document.getElementsByName('ability'); var selectAll = function selectAll(flag) { for(var i=0; i<select1Input.length; i++) { select1Input[i].checked = flag; } } for(var i=0; i<select1Input.length; i++) { select1Input[i].onclick = function() { //引入计数器 var sum = 0; for(var j=0; j<select1Input.length; j++) { if(select1Input[j].checked) { sum += 1; if(sum == select1Input.length) { all.checked = true; } else { all.checked = false; } } } } } var selectReverse = reverse.onclick = function(){ for (var i=0; i<select1Input.length; i++) { select1Input[i].checked= !select1Input[i].checked; } } all.onclick = function() { if(all.checked) { selectAll(true); } if(!all.checked) { selectAll(false); } }  ######$(document).on("click", ".checkAll", function (ev) { $(this).parents("table").find(".option .checkSingle").prop("checked", $(this).prop("checked")); }); $(document).on("click", ".checkSingle", function (ev) { var checked = $(this).parents("table").find(".option .checkSingle:not(:checked)").length == 0; $(this).parents("table").find(".checkAll").prop("checked", checked); });######回复 @Tis : 嗯嗯,方法有很多######判断全选框是否应该选中,只要判断 单选框的选中数量 和 总数量是否相等。######为什么写到循环里,直接all.checked=flag不可以?并且你click的时候已经改变all了,为什么还要在selectall里面改变下。还有,全选click里面的if意义在哪?直接selectAll(this.checked)不就好了######测试:点全选,再取消一个选项,再选中,会发现全选框居然不选中了。selectAll(flag)在all.onclick的里面是可以全选,但会存在一个如上的问题。所以引入一个计时器(选中的要和全部数一样),这时所有复选框都选中了,全选框才会是选中的状态
kun坤 2020-06-09 13:59:32 0 浏览量 回答数 0

回答

HTML + CSS 前端的入门门槛极低,体现在HTML和CSS上。运行环境就是浏览器,推荐Chrome。你需要的只是一个文本编辑器,推荐Sublime Text 3,有不少好插件比如Emmet,谷歌搜一下很容易了解到的。当然你非要用记事本的话,也不是不行的。刚入门查阅资料可以用 w3school 或者 MDN 。 HTML和CSS不是编程语言,前者只是结构标签,后者则是样式配置,入门是非常简单的。网上资料也有很多,推荐慕课网 HTML+CSS基础课程。 我当时是看了一本书 Head First HTML and CSS,讲得浅显易懂,不过价格比较感人,也是只翻一遍的书,没有必要买了。 迅速刷一遍慕课网,对HTML和CSS有个大致印象就好。想巩固HTML标签可以去看看16年的task1-1。 HTML5的API可以先放一放,回头再看。 接下来就是深入学习CSS了。推荐: 《CSS权威指南(第3版)》。很枯燥的一本书,但我确实不知道哪本书更适合了。花两三天硬啃下来就好了。属性细节不必记忆,以后用到肯定要再查的。着重点放在大局上,比如盒模型,浮动和定位这些,抓住重点快速过一遍。 《CSS3 专业网页开发指南》。CSS3也是需要掌握的内容。但这里还是以了解为主,知道CSS3有什么内容就好,记忆属性是枯燥且毫无意义的。 以上内容用时5天左右,下面是实践。 学了几天HTML和CSS了,应该也有点成果了。打开IFE2015 task1,写个静态页面吧。 我X,完全写不出来。 这是正常的。去看下别人的代码吧,看一小部分就开窍了。忘掉的属性就查书或者w3c,多尝试,不断踩坑才有进步。 画完第一张图后,别着急往下写。你的代码肯定会有如下问题 胡乱的代码缩进毫无章法的属性顺序 满页的div 不停地写id和class重写吧,是的。重写之前先看一份代码规范 GitHub - ecomfe/spec: This repository contains the specifications.。当然代码规范不是唯一的,我最早看的是这一份,所以代码风格也一直维持到现在。 再去看一下别人提交的代码,多看几份。当然自己也要判断,不能听风就是雨啊,人家写得不好你再去重写一次,等于你也有责任对不对。 开始重写了,会发现功力大增,写代码速度也快了很多的。 写到第三张页面的时候,应该比较熟练了。如果看到布局就大概知道应该怎么写了,那就可以进入JavaScript的学习了。 以上内容用时10天左右。 进阶部分可以回头再看: 掌握预处理工具Sass,自动化工具Gulp。 阅读Bootstrap源码。 《CSS揭秘》,极其惊艳的一本书,涵盖了CSS3的很多奇技淫巧,虽说有些地方不太实用,但让人眼前一亮,很值得看。JavaScript 这是至关重要的阶段。 强烈推荐《JavaScript高级程序设计(第3版)》,俗称红宝书。前七章是重中之重,必须反复阅读,直至完全理解,期间可配合其他书一起读。DOM,事件流,表单,JSON,Ajax与最后几章也相当重要。其余章节可以略读或跳过(比如浏览器嗅探,XML以及那些列举大量API的章节,完全可以用到再查) 推荐《JavaScript语言精粹》,俗称蝴蝶书。超薄的一本,半天就可以看完。JavaScript是一门有很多坑的语言,我个人是喜欢把这些坑点全部搞清楚的,但这本书却避而不谈了,剩下的也就是所谓的“精粹”了。但清晰地过一遍知识点总是好的。 强烈推荐《你不知道的JS》。精彩至极的一本书,将JavaScript的坑一网打尽。之前搞不懂的问题,比如闭包,this之类的都可以在这里找到答案。 ES6也是必学的内容,推荐阮一峰老师的《ES6 标准入门》。但这本书以API居多,所以还是留个大概印象,以后写到类似的地方,查一查有没有ES6更简洁的写法就好,不必死记硬背。以及需要学会Webpack的使用,Babel和模块化就靠Webpack了。 不太推荐《JavaScript权威指南》,也就是犀牛书。那就是一本字典…… 进阶: 《JavaScript设计模式与开发实践》,设计模式是必须了解的内容,这本是写得不错的。 《高性能JavaScript》,红宝书作者的另一力作,讲了一些优化技巧与性能瓶颈问题,值得一读。 以上内容用时1个月左右,中途可穿插IFE2015 task2的题,比2016年的要简单。 这些书全部刷完的话,应该可以跟人谈笑风生了。 开始实践,IFE2016阶段二的题,想怎么刷就怎么刷吧。如果有编程经验的话,应该没什么压力了。JavaScript框架 这部分就比较自由了,每个人点的技能树都不一样的。前端的发展是爆炸式的,换工具比翻书还快,所以还是以看文档为主了。 目前主流框架经常被提及的是React,Angular,Vue。知乎搜一搜就有相当多的优秀答案了。不过这个答案也有时效性,说不定过两年这些框架全都被淘汰了呢【逃 学习至少一种框架,把IFE2016刷通关吧。耗时1个半月左右。 进阶:看各种源代码。这也是我最近打算做的事情,但是好像期末考要到了TAT 最后补充一下,计算机基础知识是很重要的。由于本人有OI的经验所以稍微占点优势。再推荐几本书,抽空还是要看看的: 《深入理解计算机系统》,CSAPP,也是我们专业这学期的课程(但是我的专业明明是EE啊)。 《计算机网络 自顶向下方法》,看名字就知道必读了吧。 操作系统好书挺多的,推荐一本 Operating Systems: Three Easy Pieces ,英文不够好就《现代操作系统》吧。 算法和数据结构,推荐两本:《算法导论》《数据结构与算法分析》。似乎算法和数据结构与前端关系不大,但作为一个码农,不要求你写红黑树,至少快速排序和二分查找这种要会写的吧。
1359302247831492 2019-12-02 00:16:32 0 浏览量 回答数 0

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 阿里云AIoT