Experienced Android & iOS Developer with a demonstrated history of working in the internet industry. Skilled in Flutter, Kotlin, Dart, SQL, C++, Core Java, Android, Rx, and Mobile Applications. Strong engineering professional with a Master of Science (MS) focused in Software Systems from BITS Pilani.
Senior Android Developer
Platform Android, iOS (Native) DevelopmentMazkara Pvt. Ltd. (Pune)Senior Software Engineer
ExploriusSenior Android Developer
Citrus Platform Pvt. LtdAndroid Developer
P.K Online ventures Pvt. Ltd.Android Developer
Damco Solutions Pvt. Ltd. (FaridabadAndroid Studio
IntelliJ
Xcode
Hey. Hi. Sorry. It took me time to understand, like, uh, it is recording. Okay. So the thing is okay. The question is, could you help me understand more about your background by giving a brief introduction? Okay. So I'm Manish Kumar. Basically, I'm giving this interview for the senior mobile development role. So, basically, I have read out the documentation and everything. And as far as my, uh, the previous experience concern, so I do have around 13 years of experience right now. I started my career in Java first, and then, uh, switched to the in 6 month, I get switched to the mobile application development. So, uh, this is, uh, I started with the Android version and then move for moved to, uh, the Ios as well for around, like, 1 year. Uh, I handled team as well, and I was having around 7 years of experience from till then to till now. Uh, okay. So at that, I got to know about the Flutter. So I switched to the Flutter in back in 2018, when it was in the firm, not even in the beta. So, uh, I started, uh, some, uh, POC work and everything, and I I found it very fascinating, and it was quite good for me. So what I did, I switched to the mobile or in the Flutter, and that was quite good. And from till there to till now, like, I'm working in the Flutter itself. So I you can consider, like, I do have around 6 or more years of experience in the Flutter itself. I know in and out everything about architecture and everything. Right now, I'm working as an, like, architect. So, uh, yep, this is it as for my background. And as far as my study is concerned, so, basically, I have done my post graduation from based planning, which is in Rajasthan in, uh, masters in software systems. And, uh, before that, I did, uh, my BTEC from Ashland Institute of Technology, which is located in Saiidawal, India, uh, in IT, information technology. Um, so I do have a quite good experience in, uh, of around 13 years now, uh, completely in mobile.
What is the best way to do navigation with large scale of Flutter application? Okay. So, uh, okay. There are first of all, like, if Flutter started with navigation, uh, navigators 1 point o, okay, but, uh, that are not quite good because, like, navigation was pretty hard in the web. So they came up with the navigator 2.2.0. So by the flutter package itself, you can use that, but I'll suggest, like, uh, you we should actually use the route package. Okay? So with the route package, we what we can do is, like, we can actually navigate it through, uh, the naming conventions. Right? And we can actually guard it, uh, as well. So where okay. So let's suppose there is, uh, Amazon. You are creating, uh, creating site, like, ecommerce application or maybe, like, social network where, like, login is mandatory, okay, to get, uh, the product visibility and all. So, basically, you can guide it through the navigation. So and different, uh, different parameter we need to pass So for that, we still need to use the route and other other packages are as well there. They are under the hood used to navigator 2.0, which is in the Flutter. And if we want to scale or we want to actually write it by, um, as per this guy, so we can also do that. There's no big deal because, like, uh, Flutter has already taken care of lots of thing. And with the navigator 2.0, main main thing is not related to the mobile I'm talking about. The main thing they are actually the main is, uh, they are handling the web part. Right? So, basically, when when we have, like, amazon.com/ some products slash some ID. Right? So we cannot go directly inside the Flutter because it shows, like, some hash. Right? So with that, with the navigator 2.0, we can just directly go inside, uh, the child window, and it will be good. Right? Uh, hold on a second, please. Yeah. Okay. I'm just okay. So with navigator 2.0, we can actually handle it, uh, very well.
Okay. I will put a solid principle in the context of designing a new, uh, features for a native. Uh, okay. So okay. So basically, we are talking about the singleton. Right? Uh, and then the object oriented things and observable things. Right? So basically, for the native application okay. It's not about native, uh, mobile app, okay, or other application. We are talking about the home mobile here. Basically, mobile works on the m v v pattern. It should, basically, as per my opinion. Okay? Uh, we are not talking about the m v v m because, like, MVVM is kind of dead in the mobile as well for Android a long time. So right now, we are talking if we talk about the Compose in Android, if we are talking about that SIP UI in Ios, if we talk about the Flutter, uh, components, like, widget components, So they are all related to the code building of UI. Right? So, basically, you need to write the code. Right? And there should be the segregation of between the UI layer, between the API layer, between the data handling. So basically model class I'm talking about here and the business logic. So, basically, we can cover those in the different sets of, uh, the it's different different sets of module. So, basically, when I say, uh, what MVP service model view, I'll say, uh, provide a pop within there. You can talk about you can just count it. So when we say okay. Yeah. So MVP is like, uh, we there would be a UI layer. Okay. It's which will be the view. Okay. We actually connected to the provider, whether we can use Riverport providers, GetX, or b log. There are lots of actually state management tools out there, Libraries are there. So, basically, you can use, um, what we say, uh, the provider. Right? Present the layer. So you just put the, uh, API handling, API calls, data handling, business logic part there. But I'm not talking about that. All the logic of that in network call, everything would be there. So you should actually switch to, uh, the network layer has done. So, basically, you need to make that separate class or separate package for the network handling. So all the network handling, which is the async task, right, should go there. So, uh, this would be the network class. And when you are calling, like, through the provider, you are calling the network, it is giving getting you the data after some time because it's an async task. Right? Yeah. Till then, you need to be in that in that state. Like, you need to change the UI state to UI state dot progress bar or something. Like, something is loading. And then your view will get to know. And as soon as you will get the data, based on the data, you can show you can just tell the provider whether you have that, uh, error. You got the error or you got the data or you got something else which you are expecting. Okay. So your UI will get to know about after the notifying date. Provider will notify after the getting the data from the network. It will notify the view. View will actually render. So, basically, as per okay. And every class should be every video should be responsible of, uh, their own data handling, own view part. Right? There should be the object oriented, and, basically, that is on the based on the object oriented. Of the real pattern, we had already talked about using the provider. Right? So these kind of nets will be actually dry. And, uh, the pattern, basically, when when we talk of the factory pattern. Right? Our model class using the serializable already does that. Right? So we need not to you use, like, many of the different classes, like, uh, providers of okay. So factory pattern is implemented inside the model classes using the serializable as well. We do have different package for different ones, so we can, uh, talk about it if we want.
What methods would you use to debug and performance issue on a native iOS application? Uh, I'm sorry for that because, like, I don't have that much of XP exposure of the Ios application. So debugging is not, uh, under my, uh, under my expertise, but, yeah, I would like to, like, learn a lot, uh, if I get the chance, definitely. Thank you.
Okay. How can a feature flag be used to progressively roll out a new feature? And that's a kind of weird question. I don't know why we are seeing it. When we say, like, feature flags to be used, probably roll out the new features in the application. So, basically, feature where if we are talking about the release, right, so, basically, we are using the pipeline or, like, features can increment using the scrum. Okay. So if we do have we are dividing the our the task into the scrum and we are using the pipelines. Right? It will actually we we will build that way. So it will increment, uh, the versions, and we will relate to the release note throughout the through that. So I think that with the new feature, I'll use the pipeline and the release notes with that. And for, uh, the site for the site user, basically, which which are our audience, basically. So we will use the update package for the same. Um, we will get, uh, we will update through whenever they they open up. We've throughout the net notification. We whenever they'll open, we will actually get them notified. Okay. So this, uh, we do have some new releases. And after the release, if there's a hard thing right? Okay. So we have changed, like, a lot. Like, previous version will break. So So that would be the hard reset. So we need to just block the user, uh, to get that update. So that's the thing. Thank you.
Do you use to handle sensitive data with the plateau? Okay. So the thing is, uh, what strategy I need to use? So, basically, I I'll use that, uh, the shared presence with 1, but the shared presence by itself are not, basically, the encrypted one. So, basically, we we're gonna use, like, encrypted, uh, shared preferences package. One thing, before API handling, we're gonna use the SHA, uh, SHA certificates. So what we'll do is we will actually block the unnecessary API cost. Okay? If the applications are not valid, we are gonna use the Proguard as well. And, uh, the photo sensitive user if, uh, users okay. So if we are we see the banking application, if we go behind. Right? So when you are actually using the you are checking your your recent application, banking application doesn't show the data because, like, it it is the sensitive information that it is having. So what we can do is screen captioning. We can stop. Right? Record. It will not allow that user to record, but in Ios, if that's not possible. So what we can do is, like, if somebody is trying to capture, um, capture the snapshot or screenshot, right, try to video record it. We are but a US gives the data, uh, like, events, basically. So after the event, we can just remove, uh, from that, uh, from the gallery, whatever, like, a screenshot they just captured or make it white. Right? So this kind of features, I I'll I'll try to apply. Proguard is the one. Like, text card is the one. And for many of the outside application, like, uh, okay, as bomb as bomb as they are, like, we we're gonna check it to fit with a third party tool. Definitely, we're gonna get some maybe, like, some issue or some suggestion because it's an iterative process. Uh, Google and Apple comes up with lots of new things. We cannot actually can make the count every time, but some tools we can enroll for. Right? We can go upload the APA and get to know whether, like, how it at what part we were doing the errors. We are we are having exposed to the sensitive data, so definitely we can do that. And, uh, for that, uh, the quick, uh, good thing, but I'm gonna fix it. 1st of all start with that, uh, all the data should be saved in the encrypted form inside the application, which is, uh, we can use the drift for the data storage for we can use that encrypted, uh, encrypted shared preferences. We can do this and, uh, okay. And then for the code, uh, code security, we can use, uh, ProGuard, DexGuard. Right? For, uh, a screen cap stopping the screen capture, there is a live it's there's already a flag inside the Android application, so we can use that secure flag. Okay. We can just actually use that, and it will stop the recording and the snapshot captioning. On iOS, the similar way we can do it, but it it doesn't stop the captioning. But we can just remove it from the gallery. And other tools we can use, as well we can use. There are a lot of things, uh, we can handle. And, uh, if around the API, we'll use the SSH. So valid SSH only, API gets hit and they get the data. And for the data, like, transmitted to the network layer. So at that point of time, we just, uh, stop the all the log and it should not capture that way. So these things, I'm gonna do that. Thank you.
Okay. I'm reviewing the Flutter widget snippet. Identify what might cause an exception and suggest an improvement to ensure widget properly dispose. Okay. Okay. 1st of all, we are creating the my custom widget, which is the straightforward and okay. My custom widget and the rest code, my custom widget state. Perfect. Uh, stream subscription. We are subscribing it. Stream. Stream. Okay. During duration is there. Subscription equal may and internally yeah. It is leaving the error. Basically, you are actually making an extreme basic uh, right, and making that stream to listen the data. So maybe, like, okay, after 3 or one second, it need to have restarted it. Right? So and after that, you have the subscription. Now you are not exposing it. So, basically, when you go, uh, go back, right, Uh, maybe, like, okay. Just close this screen. Maybe, like, there's a press button or the back you go. But the screen stream is is still there. Every one second, it's gonna get the data, and the problem is, again, with it, you are subscribing multiple streams as well. Okay. There are a couple of issues with now the streams are actually running inside the state first, then it is actually giving the data to the subscription itself all the time, every time, like, when whenever my streams comes, and it gives you that it starts listening, and it is giving to the subscription. So it is subscribing again and again, and then it is not disposing itself as well. So, basically, we need to dispose both is my stream and the subscription first, And the thing is we should not actually keep that listen again and again kind of thing. Okay? We can just actually make the stream and let's listen it and dispose it both, stream and my subscription. Thank you.
Some of the code blocks for an API call in the Flutter. Is there any way to handle HTTP request and response to improve error handling and maintain it? Let me check. Okay. Future. Like, future, async is there. Like, I'm getting the response. A way it is there. I should be get. I'm digest, like, getting it. Um, if we are getting a data, so it is just converting it to the decode and the variable user and the otherwise, uh, through the user. Right? So, basically okay. So it is kind of, uh, fine code, but the problem with this code is it it is just giving the future. It is returning back. Right? It's not giving that, uh, the user object. So first of all, we can actually bound it to the user object first. Right? And, uh, I don't know if, uh, okay, so whether responses await if you were using the HTTP. HTTP is fine. Like, I'll I'll use the diaphragm. So that's really fine. I I need to, like, JSON dot decode. My response dot body gonna give the string. You are just, uh, decoding, and why are we using the JSON dot decode? I don't know. And user user use user data. User data is fine. So, basically, the problem with this code I'm I'm figuring out is there should be some valid return type first at the 1st place. Because, like, you cannot just dependent on the future and then ask, uh, okay, they're dependent on the code which is calling it. So it will return the user object. Probably should not. And the try cache should be handled there. Maybe, like, you we can use the null as well. Thank you.
Discuss a study and a real time data synchronization across multiple user, uh, devices in the prediction. So, basically, uh, so there's a couple of ways, uh, I found it. So it said that difficulty very hard, but I don't think so. It's very difficult because, uh, they are the protocols. Right? Uh, like, except people, it's a wide socket connection. So they are so, basically, if you, uh, let me take the take the example of, uh, checking application, like WhatsApp. Maybe, like, my WhatsApp is open on the web, my on my mobile, and maybe, like, on another tablet as well. Right? So whenever I get the data, uh, get a message from my friend, I get on the 3 on the 3 devices. Right? So how we get the synchronization? I delete it on my from my 1 device and it sync and synchronize synchronize on all devices. So how we go how I do it, basically. We're using the protocol, which is the XMPP. Right? So how the XMPP or the socket connection for us. So, basically, every device after the login, it actually make the connection, right, to the, uh, to the server. So, basically, it's not a connection directly open always. This is kind of based on the observable pattern. Right? Socket connection sometimes does, uh, like, open the connection for the for a particular chat, maybe for another socket connection for all the chats, right, all the messages. But, uh, in in terms of XMPP, you just need to you just need to make the connection make the, like, subscription to the server, and server can actually send you send you back about the events which occurs the particular user. So, basically, my 3 devices are connected to the server. Server actually wakes up, just send the push notification, And based on that push notification, I can manage my, uh, on my device rather, like, what needs to be done right here. So, basically, what events occur? Maybe, like, uh, my 1 device okay. So now you send me the message. I get the, uh, the same message on the 3 devices because I get 3 notification on different devices. But when I send the notification message from my okay. I delete delete that message. So that is even triggered by my device. I'm not gonna get that, uh, even back, but my couple of more devices, which are actually, uh, registered with that server. So these kind of things we can do. We can use the multiple, uh, user devices in the Flutter, uh, so we can do that. So it's not only particular related to the Flutter. It's, uh, it's valid across the devices, basically. And other things is if we talk about some maybe third party tools, right, we don't want to make that all the XMP protocol. We don't want to write the Jabber and all, uh, maybe the socket connection, so we can use the Firebase, basically. Okay. So Firebase are the are the core thing. Right? There is Google product. We can use that. We can just get the leverage of the real time database and, uh, the push notification from them, like analytics are there. And I'm not gonna go in the analytics, but Firebase push notification and the real time database is the key. So we can use that and sync across the multiple devices and, uh, it under the hood, work from the FM protocol and the push notification. Thank you.
Okay. Good to have this question. I'm not sure. Uh, what is this? How would you configure a con okay. How would you configure a continuous integration deployment pipeline to the mobile application in the Google Cloud or AWS? Right? So Microsoft as you I have worked with. Right? Uh, I'm not sure of the Google Cloud. Okay. So, uh, mic on Microsoft, uh, Microsoft, I had done it. Right? Uh, so using the YAML file. So what we do is, uh, first of all, they are a set of commands. Right? Uh, so what I need to do is I just need to connect it to to the main let's suppose, uh, on my private account, uh, my code is on my private Git account, GitHub. Okay. I just need to connect it through the token. So I'm not talking about, like, we need to log in and pass on directly. No. We just need to pass on a particular, uh, project, which, uh, we need to build on, like, uh, the pipeline. And in the pipeline, we do, uh, I I'll use that YAML file. Okay. YAML file will be will start with the some command. Maybe I'll I'll try to make the branches, maybe, uh, the sprint branch. I want to delete the queue and r c. So I'll put that into the sprint branch first. I'll make the pipeline in that way. It will okay. 1st of all, trigger when there are the sprint branch changes. So whenever a sprint branch get the change, it will trigger. And this pipeline, this YAML file actually have been set, uh, set of commands. So first of all, I'll start with, like, uh, after the trigger, there would be, uh, k, Java install, JDK install, and then there would be a flutter install. Then I'll do that installing of the provisioning profile if I want to add the IUS belt. Right? So I'll do the manual integration manual signing up, uh, manual signing up the IUS application and release the I, uh, IPA. And I'll use the App Center for the same. So yeah. We because we need, like, some some place where we need to, uh, we can actually release the application and then that, uh, I'll make that open link, right, using that center. And what I'll do is I'll just, uh, okay. There would be a command, Flutter. Okay. And then I'll run Flutter run, Flutter build, Flutter clean, and everything. I'll make the I'll tell the device Flutter run and the main file path if there are many multiple, uh, main files. But if there is single run, I need not to. And there would be, uh, then then the then finally, uh, then the step would be the Ios configuration. For Ios, like, I need to do install the provisioning profile, everything. And then I need to manually sign it. Right? So, uh, okay, through the command. So I what? Where the file is, providing file and everything will be placed in the secure secure vault for the files. And then I need to just give the permission to the pipeline. And then I need to re I need to release the, uh, Android build, and, uh, I need to name it. Right? But Android and iOS, a a IP and a APK need to release. I need to name it. And then finally, I close the pipeline. And there would be a release pipeline as well. Right? CICD, basically, deployment would be there. I need to check I need to tell the deployment c I, c d. Oh, sorry. C d. Like, what is the c I? So c I would be, like, my pipe and QA or RTC, and I'll integrate that. I'll tell that. I'll do the configuration of the app center. Like, API key would be there. The group link would be there, and I need to make that group ID and the name and the release part. And by that, if I run that after the c I, I when I run the CD, which is releasing, uh, it will release the application and put that place into the group ID, which I have already made the public. And using the public URL, I can access to both IP and Thank you.
What solution would you propose for scaling the back end infrastructure for a quickly growing React Native application? So, basically, this I'm not sure why this is related to the React Native application. Then we thought we are talking about the back end infrastructure. I don't know the is this a trick question or what? Because, like, okay. So scaling of backend doesn't impact on the React Native application, but, yeah, the speed of your application or the mobile or React Native or the Flutter one is directly impacted by the, uh, your back end infrastructure. So, basically, scaling on the back end, you you can use the microservices that you should use the the pagination one. Right? So quickly data loading, and you can actually utilize the push notifications bat in better way. So the back, uh, scaling on the background completely depends on, like, micros, uh, not completely, on many factors. Right? What performance you are seeking for? Okay. How much bandwidth you are having and what kind of capability you are looking for, and what are the use like, how much usage you are handling right now for your front end application, which can be mobile. We have built by React Native Native or Better or maybe your website. So all dependent on your back end, APIs, and, uh, this API and their performance completely. Thank you.